Skip to content

Commit

Permalink
fix(parser): fixed a bunch of edge cases
Browse files Browse the repository at this point in the history
  • Loading branch information
KFlash committed Aug 9, 2019
1 parent 671dc57 commit 14160c5
Show file tree
Hide file tree
Showing 10 changed files with 187 additions and 185 deletions.
9 changes: 4 additions & 5 deletions src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -393,11 +393,11 @@ export function validateFunctionName(
report(parser, Errors.StrictEvalArguments);
}

if (t === Token.EscapedFutureReserved) {
if (t === Token.EscapedFutureReserved) {
report(parser, Errors.InvalidEscapedKeyword);
}

if (t === Token.EscapedReserved) {
if (t === Token.EscapedReserved) {
report(parser, Errors.InvalidEscapedKeyword);
}
}
Expand Down Expand Up @@ -613,8 +613,7 @@ export function addVarOrBlock(
addBlockName(parser, context, scope, name, kind, origin);
}
if (origin & Origin.Export) {
updateExportsList(parser, name);
addBindingToExports(parser, name);
declareUnboundVariable(parser, name);
}
}

Expand Down Expand Up @@ -734,7 +733,7 @@ export function addVarName(
* @param parser Parser object
* @param name Exported name
*/
export function updateExportsList(parser: ParserState, name: string): void {
export function declareUnboundVariable(parser: ParserState, name: string): void {
if (parser.exportedNames !== void 0 && name !== '') {
if (parser.exportedNames['#' + name]) {
report(parser, Errors.DuplicateExportBinding, name);
Expand Down
6 changes: 3 additions & 3 deletions src/lexer/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ export const enum NumberKind {
Octal = 1 << 2,
Hex = 1 << 3,
Decimal = 1 << 4,
DecimalWithLeadingZero = 1 << 5,
NonOctalDecimal = 1 << 5,
Float = 1 << 6,
DecimalNumberKind = Decimal | DecimalWithLeadingZero,
ValidBigIntKind = Binary | Decimal | Hex | Octal | DecimalWithLeadingZero
ValidBigIntKind = 1 << 7,
DecimalNumberKind = Decimal | NonOctalDecimal
}

/**
Expand Down
16 changes: 8 additions & 8 deletions src/lexer/numeric.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi

// Hex
if ((char | 32) === Chars.LowerX) {
kind = NumberKind.Hex;
kind = NumberKind.Hex | NumberKind.ValidBigIntKind;
char = advanceChar(parser); // skips 'X', 'x'
while (CharTypes[char] & (CharFlags.Hex | CharFlags.Underscore)) {
if (char === Chars.Underscore) {
Expand All @@ -53,7 +53,7 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi
}
// Octal
} else if ((char | 32) === Chars.LowerO) {
kind = NumberKind.Octal;
kind = NumberKind.Octal | NumberKind.ValidBigIntKind;
char = advanceChar(parser); // skips 'X', 'x'
while (CharTypes[char] & (CharFlags.Octal | CharFlags.Underscore)) {
if (char === Chars.Underscore) {
Expand All @@ -73,7 +73,7 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi
report(parser, digits < 1 ? Errors.MissingHexDigits : Errors.TrailingNumericSeparator);
}
} else if ((char | 32) === Chars.LowerB) {
kind = NumberKind.Binary;
kind = NumberKind.Binary | NumberKind.ValidBigIntKind;
char = advanceChar(parser); // skips 'B', 'b'
while (CharTypes[char] & (CharFlags.Binary | CharFlags.Underscore)) {
if (char === Chars.Underscore) {
Expand All @@ -98,7 +98,7 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi
kind = NumberKind.ImplicitOctal;
while (CharTypes[char] & CharFlags.Decimal) {
if (CharTypes[char] & CharFlags.ImplicitOctalDigits) {
kind = NumberKind.DecimalWithLeadingZero;
kind = NumberKind.NonOctalDecimal;
atStart = 0;
break;
}
Expand All @@ -107,8 +107,8 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi
}
} else if (CharTypes[char] & CharFlags.ImplicitOctalDigits) {
if (context & Context.Strict) report(parser, Errors.StrictOctalEscape);
else parser.flags = Flags.Octals;
kind = NumberKind.DecimalWithLeadingZero;
parser.flags |= Flags.Octals;
kind = NumberKind.NonOctalDecimal;
} else if (char === Chars.Underscore) {
report(parser, Errors.Unexpected);
}
Expand All @@ -120,7 +120,7 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi
while (digit >= 0 && CharTypes[char] & (CharFlags.Decimal | CharFlags.Underscore)) {
if (char === Chars.Underscore) {
char = advanceChar(parser);
if (char === Chars.Underscore) {
if (char === Chars.Underscore || kind & NumberKind.NonOctalDecimal) {
reportScannerError(
parser.index,
parser.line,
Expand Down Expand Up @@ -210,7 +210,7 @@ export function scanNumber(parser: ParserState, context: Context, kind: NumberKi
parser.tokenValue =
kind & (NumberKind.ImplicitOctal | NumberKind.Binary | NumberKind.Hex | NumberKind.Octal)
? value
: kind & NumberKind.DecimalWithLeadingZero
: kind & NumberKind.NonOctalDecimal
? parseFloat(parser.source.substring(parser.tokenPos, parser.index))
: +value;

Expand Down
2 changes: 1 addition & 1 deletion src/lexer/scan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ export function scanSingleToken(parser: ParserState, context: Context, state: Le

// Look for a decimal number.
case Token.NumericLiteral:
return scanNumber(parser, context, NumberKind.Decimal);
return scanNumber(parser, context, NumberKind.Decimal | NumberKind.ValidBigIntKind);

// Look for a string literal
case Token.StringLiteral:
Expand Down
Loading

0 comments on commit 14160c5

Please sign in to comment.