function readNumber(startsWithDot) {
    var start = tokPos;
    var isFloat = false;
    var octal = input.charCodeAt(tokPos) === 48;
    if (!startsWithDot && readInt(10) === null) {
      raise(start, "Invalid number");
    }
    if (input.charCodeAt(tokPos) === 46) {
      ++tokPos;
      readInt(10);
      isFloat = true;
    }
    var next = input.charCodeAt(tokPos);
    if (next === 69 || next === 101) { // 'eE'
      next = input.charCodeAt(++tokPos);
      if (next === 43 || next === 45) {
        ++tokPos; // '+-'
      }
      if (readInt(10) === null) {
        raise(start, "Invalid number");
      }
      isFloat = true;
    }
    if (isIdentifierStart(input.charCodeAt(tokPos))) {
      raise(tokPos, "Identifier directly after number");
    }

    var str = input.slice(start, tokPos);
    var val;
    if (isFloat) {
      val = parseFloat(str);
    } else if (!octal || str.length === 1) {
      val = parseInt(str, 10);
    } else if (/[89]/.test(str) || strict) {
      raise(start, "Invalid number");
    } else {
      val = parseInt(str, 8);
    }
    finishToken(_num, val);
  }
Read an integer, octal integer, or floating-point number.

@param {boolean} startsWithDot