docs: function () {
  
  // Parse a number value.
  
              var number,
                  string = '';
  
              if (ch === '-') {
                  string = '-';
                  next('-');
              }
              while (ch >= '0' && ch <= '9') {
                  string += ch;
                  next();
              }
              if (ch === '.') {
                  string += '.';
                  while (next() && ch >= '0' && ch <= '9') {
                      string += ch;
                  }
              }
              if (ch === 'e' || ch === 'E') {
                  string += ch;
                  next();
                  if (ch === '-' || ch === '+') {
                      string += ch;
                      next();
                  }
                  while (ch >= '0' && ch <= '9') {
                      string += ch;
                      next();
                  }
              }
  
              number = +string;
  
              if (!isFinite(number)) {
                  error("Bad number");
              } else {
                  
                  // means JS rounded or truncated number, too big
                  if (number.toString() !== string) {
                      try {
                          return new BigNumber(string);
                      } catch (e) {
                          // if fails, fallback to default behavior
                      }
                  }
  
                  return number;
              }
          }