diff --git a/packages/babel-parser/src/tokenizer/index.js b/packages/babel-parser/src/tokenizer/index.js index 6d2c046457aa..3fdced8aaffd 100644 --- a/packages/babel-parser/src/tokenizer/index.js +++ b/packages/babel-parser/src/tokenizer/index.js @@ -1035,8 +1035,8 @@ export default class Tokenizer extends LocationParser { next = this.input.charCodeAt(this.state.pos); } - // disallow numeric separators in non octal decimals - if (this.hasPlugin("numericSeparator") && isNonOctalDecimalInt) { + // disallow numeric separators in non octal decimals and legacy octal likes + if (this.hasPlugin("numericSeparator") && (octal || isNonOctalDecimalInt)) { const underscorePos = this.input .slice(start, this.state.pos) .indexOf("_"); diff --git a/packages/babel-parser/test/fixtures/experimental/numeric-separator/invalid-legacy-octal-literal/input.js b/packages/babel-parser/test/fixtures/experimental/numeric-separator/invalid-legacy-octal-literal/input.js new file mode 100644 index 000000000000..909c1baacf29 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/numeric-separator/invalid-legacy-octal-literal/input.js @@ -0,0 +1 @@ +00_0 \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/numeric-separator/invalid-legacy-octal-literal/options.json b/packages/babel-parser/test/fixtures/experimental/numeric-separator/invalid-legacy-octal-literal/options.json new file mode 100644 index 000000000000..5a4fb4525d02 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/numeric-separator/invalid-legacy-octal-literal/options.json @@ -0,0 +1 @@ +{ "throws": "Numeric separator can not be used after leading 0 (1:2)" } diff --git a/scripts/tests/test262/test262_whitelist.txt b/scripts/tests/test262/test262_whitelist.txt index 3eb50c7c2d4e..1082e285e660 100644 --- a/scripts/tests/test262/test262_whitelist.txt +++ b/scripts/tests/test262/test262_whitelist.txt @@ -104,12 +104,6 @@ language/expressions/object/method-definition/private-name-early-error-gen-insid language/expressions/object/method-definition/private-name-early-error-gen-inside-class.js(strict mode) language/expressions/object/method-definition/private-name-early-error-method-inside-class.js(default) language/expressions/object/method-definition/private-name-early-error-method-inside-class.js(strict mode) -language/literals/numeric/numeric-separators/numeric-separator-literal-lol-00-err.js(default) -language/literals/numeric/numeric-separators/numeric-separator-literal-lol-01-err.js(default) -language/literals/numeric/numeric-separators/numeric-separator-literal-lol-07-err.js(default) -language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_0-err.js(default) -language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_1-err.js(default) -language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_7-err.js(default) language/module-code/privatename-not-valid-earlyerr-module-1.js(default) language/module-code/privatename-not-valid-earlyerr-module-1.js(strict mode) language/module-code/privatename-not-valid-earlyerr-module-2.js(default)