author | Rohit Awate <rohitawate121@gmail.com> |
Fri, 01 Nov 2019 22:43:52 +0000 | |
changeset 500237 | 08d0bf739badeaa728fb8c9fda0d4a740dba0df5 |
parent 500236 | 60244e31ea1d74b38eafe4ec3dcbf4e9a551fa0c |
child 500238 | 43b1b62048cd0bf9e2c57da514829401f3e165d1 |
push id | 36757 |
push user | apavel@mozilla.com |
push date | Sat, 02 Nov 2019 09:54:21 +0000 |
treeherder | mozilla-central@8aa8ed80ea43 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jorendorff |
bugs | 1589072 |
milestone | 72.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/frontend/TokenStream.cpp +++ b/js/src/frontend/TokenStream.cpp @@ -2432,17 +2432,21 @@ TokenStreamSpecific<Unit, AnyCharsAccess if (isIntegerUnit(unit)) { continue; } if (unit != '_') { break; } unit = getCodeUnit(); if (!isIntegerUnit(unit)) { - error(JSMSG_MISSING_DIGIT_AFTER_SEPARATOR); + if (unit == '_') { + error(JSMSG_NUMBER_MULTIPLE_ADJACENT_UNDERSCORES); + } else { + error(JSMSG_NUMBER_END_WITH_UNDERSCORE); + } return false; } } *nextUnit = unit; return true; }
--- a/js/src/js.msg +++ b/js/src/js.msg @@ -286,17 +286,18 @@ MSG_DEF(JSMSG_LINE_BREAK_AFTER_THROW, 0 MSG_DEF(JSMSG_LINE_BREAK_BEFORE_ARROW, 0, JSEXN_SYNTAXERR, "no line break is allowed before '=>'") MSG_DEF(JSMSG_MALFORMED_ESCAPE, 1, JSEXN_SYNTAXERR, "malformed {0} character escape sequence") MSG_DEF(JSMSG_MISSING_BINARY_DIGITS, 0, JSEXN_SYNTAXERR, "missing binary digits after '0b'") MSG_DEF(JSMSG_MISSING_EXPONENT, 0, JSEXN_SYNTAXERR, "missing exponent") MSG_DEF(JSMSG_MISSING_EXPR_AFTER_THROW,0, JSEXN_SYNTAXERR, "throw statement is missing an expression") MSG_DEF(JSMSG_MISSING_FORMAL, 0, JSEXN_SYNTAXERR, "missing formal parameter") MSG_DEF(JSMSG_MISSING_HEXDIGITS, 0, JSEXN_SYNTAXERR, "missing hexadecimal digits after '0x'") MSG_DEF(JSMSG_MISSING_OCTAL_DIGITS, 0, JSEXN_SYNTAXERR, "missing octal digits after '0o'") -MSG_DEF(JSMSG_MISSING_DIGIT_AFTER_SEPARATOR, 0, JSEXN_SYNTAXERR, "missing digit after '_' numeric separator") +MSG_DEF(JSMSG_NUMBER_END_WITH_UNDERSCORE, 0, JSEXN_SYNTAXERR, "underscore can appear only between digits, not after the last digit in a number") +MSG_DEF(JSMSG_NUMBER_MULTIPLE_ADJACENT_UNDERSCORES, 0, JSEXN_SYNTAXERR, "number cannot contain multiple adjacent underscores") MSG_DEF(JSMSG_MODULE_SPEC_AFTER_FROM, 0, JSEXN_SYNTAXERR, "missing module specifier after 'from' keyword") MSG_DEF(JSMSG_NAME_AFTER_DOT, 0, JSEXN_SYNTAXERR, "missing name after . operator") MSG_DEF(JSMSG_NAMED_IMPORTS_OR_NAMESPACE_IMPORT, 0, JSEXN_SYNTAXERR, "expected named imports or namespace import after comma") MSG_DEF(JSMSG_NO_BINDING_NAME, 0, JSEXN_SYNTAXERR, "missing binding name") MSG_DEF(JSMSG_NO_EXPORT_NAME, 0, JSEXN_SYNTAXERR, "missing export name") MSG_DEF(JSMSG_NO_IMPORT_NAME, 0, JSEXN_SYNTAXERR, "missing import name") MSG_DEF(JSMSG_NO_VARIABLE_NAME, 0, JSEXN_SYNTAXERR, "missing variable name") MSG_DEF(JSMSG_OF_AFTER_FOR_NAME, 0, JSEXN_SYNTAXERR, "missing 'of' after for")
new file mode 100644 --- /dev/null +++ b/js/src/tests/non262/Number/numericSeparator.js @@ -0,0 +1,9 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +assertThrowsInstanceOf(function() { eval('let a = 100_00_;'); }, SyntaxError); +assertThrowsInstanceOf(() => eval("let b = 10__;"), SyntaxError); + +if (typeof reportCompare === "function") + reportCompare(true, true); +