summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/literals/numeric
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/test262/language/literals/numeric
parentInitial commit. (diff)
downloadfirefox-esr-upstream.tar.xz
firefox-esr-upstream.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/language/literals/numeric')
-rw-r--r--js/src/tests/test262/language/literals/numeric/7.8.3-1gs-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/7.8.3-2gs-strict.js21
-rw-r--r--js/src/tests/test262/language/literals/numeric/7.8.3-3gs-strict.js18
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T2.js55
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T4.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T5.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T6.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T7.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T8.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T4.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T5.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T6.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T7.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T8.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T2.js55
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T4.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T5.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T6.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T7.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T8.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T4.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T5.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T6.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T7.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T8.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T1.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T2.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T3.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T4.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T5.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T6.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T7.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T8.js14
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T1.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T2.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T3.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T4.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T5.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T6.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T7.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T8.js60
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T1.js90
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T2.js90
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T3.js55
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T4.js55
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T5.js55
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T6.js55
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T7.js40
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T8.js40
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T1.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T2.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T1.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T2.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/binary-invalid-digit.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/binary-invalid-leading.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/binary-invalid-truncated.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/binary-invalid-unicode.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/binary.js37
-rw-r--r--js/src/tests/test262/language/literals/numeric/browser.js0
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integer-strict-strict.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integer.js51
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integery-000-strict-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integery-005-strict-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integery-01-strict-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integery-010-strict-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integery-06-strict-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/legacy-octal-integery-07-strict-strict.js17
-rw-r--r--js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer-strict-strict.js41
-rw-r--r--js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer.js121
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-followed-by-ident.js19
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/browser.js0
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bds.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bd.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bds.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-dunder-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dd-nsl-dd.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dds-nsl-dd.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dd-nsl-dd.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dds-nsl-dd.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dd-one-of.js37
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dds-dunder-err.js27
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-err.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-dot-dd-nsl-dd-ep-dd.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dd.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dds-dunder-err.js27
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-err.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-dds-nsl-ep-dd-err.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-dd-err.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-ep-err.js32
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-err.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dd-ep.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dds-ep.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dd-ep.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dds-ep.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-ep-err.js31
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-ep-err.js32
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-err.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hds.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hd.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hds.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-dunder-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-od-nsl-od-one-of.js50
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-00-err.js42
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-01-err.js42
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-07-err.js44
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_0-err.js42
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_1-err.js42
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_7-err.js43
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-08-err.js39
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-09-err.js39
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_8-err.js39
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_9-err.js39
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd-one-of.js41
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-dunder-err.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-leading-zero-err.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds.js28
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-dunder-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-err.js35
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-one-of.js36
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-ods.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-od.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-ods.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-minus-dds-nsl-dd.js29
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-plus-dds-nsl-dd.js30
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-unicode-err.js27
-rw-r--r--js/src/tests/test262/language/literals/numeric/numeric-separators/shell.js0
-rw-r--r--js/src/tests/test262/language/literals/numeric/octal-invalid-digit.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/octal-invalid-leading.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/octal-invalid-truncated.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/octal-invalid-unicode.js24
-rw-r--r--js/src/tests/test262/language/literals/numeric/octal.js47
-rw-r--r--js/src/tests/test262/language/literals/numeric/shell.js0
161 files changed, 6413 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/literals/numeric/7.8.3-1gs-strict.js b/js/src/tests/test262/language/literals/numeric/7.8.3-1gs-strict.js
new file mode 100644
index 0000000000..9c5671cc7e
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/7.8.3-1gs-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-1gs
+description: Strict Mode - octal extension(010) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+var y = 010;
diff --git a/js/src/tests/test262/language/literals/numeric/7.8.3-2gs-strict.js b/js/src/tests/test262/language/literals/numeric/7.8.3-2gs-strict.js
new file mode 100644
index 0000000000..dfb364fb41
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/7.8.3-2gs-strict.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-2gs
+description: >
+ Strict Mode - octal extension is forbidden in strict mode (after a
+ hex number is assigned to a variable)
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+var a;
+a = 0x1;
+a = 01;
diff --git a/js/src/tests/test262/language/literals/numeric/7.8.3-3gs-strict.js b/js/src/tests/test262/language/literals/numeric/7.8.3-3gs-strict.js
new file mode 100644
index 0000000000..36cb6278ae
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/7.8.3-3gs-strict.js
@@ -0,0 +1,18 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-3gs
+description: >
+ Strict Mode - octal extension is forbidden in strict mode (after a
+ hex number is assigned to a variable from an eval)
+flags: [onlyStrict]
+---*/
+
+var a;
+assert.throws(SyntaxError, function() {
+ eval("a = 0x1;a = 01;");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T1.js
new file mode 100644
index 0000000000..65b517d786
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral"
+es5id: 7.8.3_A1.1_T1
+description: "DecimalIntegerLiteral :: 0, NoNZeroDigit"
+---*/
+
+//CHECK#0
+if (0 !== 0) {
+ throw new Test262Error('#0: 0 === 0');
+}
+
+//CHECK#1
+if (1 !== 1) {
+ throw new Test262Error('#1: 1 === 1');
+}
+
+//CHECK#2
+if (2 !== 2) {
+ throw new Test262Error('#2: 2 === 2');
+}
+
+//CHECK#3
+if (3 !== 3) {
+ throw new Test262Error('#3: 3 === 3');
+}
+
+//CHECK#4
+if (4 !== 4) {
+ throw new Test262Error('#4: 4 === 4');
+}
+
+//CHECK#5
+if (5 !== 5) {
+ throw new Test262Error('#5: 5 === 5');
+}
+
+//CHECK#6
+if (6 !== 6) {
+ throw new Test262Error('#6: 6 === 6');
+}
+
+//CHECK#7
+if (7 !== 7) {
+ throw new Test262Error('#7: 7 === 7');
+}
+
+//CHECK#8
+if (8 !== 8) {
+ throw new Test262Error('#8: 8 === 8');
+}
+
+//CHECK#9
+if (9 !== 9) {
+ throw new Test262Error('#9: 9 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T2.js
new file mode 100644
index 0000000000..3d5c404867
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral"
+es5id: 7.8.3_A1.1_T2
+description: "DecimalIntegerLiteral :: NoNZeroDigit DecimalDigits"
+---*/
+
+//CHECK#1
+if (11 !== 11) {
+ throw new Test262Error('#1: 11 === 11');
+}
+
+//CHECK#2
+if (22 !== 22) {
+ throw new Test262Error('#2: 22 === 22');
+}
+
+//CHECK#3
+if (33 !== 33) {
+ throw new Test262Error('#3: 33 === 33');
+}
+
+//CHECK#4
+if (44 !== 44) {
+ throw new Test262Error('#4: 44 === 44');
+}
+
+//CHECK#5
+if (55 !== 55) {
+ throw new Test262Error('#5: 55 === 55');
+}
+
+//CHECK#6
+if (66 !== 66) {
+ throw new Test262Error('#6: 66 === 66');
+}
+
+//CHECK#7
+if (77 !== 77) {
+ throw new Test262Error('#7: 77 === 77');
+}
+
+//CHECK#8
+if (88 !== 88) {
+ throw new Test262Error('#8: 88 === 88');
+}
+
+//CHECK#9
+if (99 !== 99) {
+ throw new Test262Error('#9: 99 === 99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T1.js
new file mode 100644
index 0000000000..985682c62b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T1
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+//CHECK#0
+if (0e1 !== 0) {
+ throw new Test262Error('#0: 0e1 === 0');
+}
+
+//CHECK#1
+if (1e1 !== 10) {
+ throw new Test262Error('#1: 1e1 === 10');
+}
+
+//CHECK#2
+if (2e1 !== 20) {
+ throw new Test262Error('#2: 2e1 === 20');
+}
+
+//CHECK#3
+if (3e1 !== 30) {
+ throw new Test262Error('#3: 3e1 === 30');
+}
+
+//CHECK#4
+if (4e1 !== 40) {
+ throw new Test262Error('#4: 4e1 === 40');
+}
+
+//CHECK#5
+if (5e1 !== 50) {
+ throw new Test262Error('#5: 5e1 === 50');
+}
+
+//CHECK#6
+if (6e1 !== 60) {
+ throw new Test262Error('#6: 6e1 === 60');
+}
+
+//CHECK#7
+if (7e1 !== 70) {
+ throw new Test262Error('#7: 7e1 === 70');
+}
+
+//CHECK#8
+if (8e1 !== 80) {
+ throw new Test262Error('#8: 8e1 === 80');
+}
+
+//CHECK#9
+if (9e1 !== 90) {
+ throw new Test262Error('#9: 9e1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T2.js
new file mode 100644
index 0000000000..4c06951f87
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T2
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+//CHECK#0
+if (0E1 !== 0) {
+ throw new Test262Error('#0: 0E1 === 0');
+}
+
+//CHECK#1
+if (1E1 !== 10) {
+ throw new Test262Error('#1: 1E1 === 1');
+}
+
+//CHECK#2
+if (2E1 !== 20) {
+ throw new Test262Error('#2: 2E1 === 20');
+}
+
+//CHECK#3
+if (3E1 !== 30) {
+ throw new Test262Error('#3: 3E1 === 30');
+}
+
+//CHECK#4
+if (4E1 !== 40) {
+ throw new Test262Error('#4: 4E1 === 40');
+}
+
+//CHECK#5
+if (5E1 !== 50) {
+ throw new Test262Error('#5: 5E1 === 50');
+}
+
+//CHECK#6
+if (6E1 !== 60) {
+ throw new Test262Error('#6: 6E1 === 60');
+}
+
+//CHECK#7
+if (7E1 !== 70) {
+ throw new Test262Error('#7: 7E1 === 70');
+}
+
+//CHECK#8
+if (8E1 !== 80) {
+ throw new Test262Error('#8: 8E1 === 80');
+}
+
+//CHECK#9
+if (9E1 !== 90) {
+ throw new Test262Error('#9: 9E1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T3.js
new file mode 100644
index 0000000000..643666e171
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T3
+description: "ExponentPart :: e -DecimalDigits"
+---*/
+
+//CHECK#0
+if (0e-1 !== 0) {
+ throw new Test262Error('#0: 0e-1 === 0');
+}
+
+//CHECK#1
+if (1e-1 !== 0.1) {
+ throw new Test262Error('#1: 1e-1 === 0.1');
+}
+
+//CHECK#2
+if (2e-1 !== 0.2) {
+ throw new Test262Error('#2: 2e-1 === 0.2');
+}
+
+//CHECK#3
+if (3e-1 !== 0.3) {
+ throw new Test262Error('#3: 3e-1 === 0.3');
+}
+
+//CHECK#4
+if (4e-1 !== 0.4) {
+ throw new Test262Error('#4: 4e-1 === 0.4');
+}
+
+//CHECK#5
+if (5e-1 !== 0.5) {
+ throw new Test262Error('#5: 5e-1 === 0.5');
+}
+
+//CHECK#6
+if (6e-1 !== 0.6) {
+ throw new Test262Error('#6: 6e-1 === 0.6');
+}
+
+//CHECK#7
+if (7e-1 !== 0.7) {
+ throw new Test262Error('#7: 7e-1 === 0.7');
+}
+
+//CHECK#8
+if (8e-1 !== 0.8) {
+ throw new Test262Error('#8: 8e-1 === 0.8');
+}
+
+//CHECK#9
+if (9e-1 !== 0.9) {
+ throw new Test262Error('#9: 9e-1 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T4.js
new file mode 100644
index 0000000000..34a32c2110
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T4
+description: "ExponentPart :: E -DecimalDigits"
+---*/
+
+//CHECK#0
+if (0E-1 !== 0) {
+ throw new Test262Error('#0: 0E-1 === 0');
+}
+
+//CHECK#1
+if (1E-1 !== 0.1) {
+ throw new Test262Error('#1: 1E-1 === 0.1');
+}
+
+//CHECK#2
+if (2E-1 !== 0.2) {
+ throw new Test262Error('#2: 2E-1 === 0.2');
+}
+
+//CHECK#3
+if (3E-1 !== 0.3) {
+ throw new Test262Error('#3: 3E-1 === 0.3');
+}
+
+//CHECK#4
+if (4E-1 !== 0.4) {
+ throw new Test262Error('#4: 4E-1 === 0.4');
+}
+
+//CHECK#5
+if (5E-1 !== 0.5) {
+ throw new Test262Error('#5: 5E-1 === 0.5');
+}
+
+//CHECK#6
+if (6E-1 !== 0.6) {
+ throw new Test262Error('#6: 6E-1 === 0.6');
+}
+
+//CHECK#7
+if (7E-1 !== 0.7) {
+ throw new Test262Error('#7: 7E-1 === 0.7');
+}
+
+//CHECK#8
+if (8E-1 !== 0.8) {
+ throw new Test262Error('#8: 8E-1 === 0.8');
+}
+
+//CHECK#9
+if (9E-1 !== 0.9) {
+ throw new Test262Error('#9: 9E-1 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T5.js
new file mode 100644
index 0000000000..4cbffa4890
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T5
+description: "ExponentPart :: e +DecimalDigits"
+---*/
+
+//CHECK#0
+if (0e+1 !== 0) {
+ throw new Test262Error('#0: 0e+1 === 0');
+}
+
+//CHe+CK#1
+if (1e+1 !== 10) {
+ throw new Test262Error('#1: 1e+1 === 10');
+}
+
+//CHe+CK#2
+if (2e+1 !== 20) {
+ throw new Test262Error('#2: 2e+1 === 20');
+}
+
+//CHe+CK#3
+if (3e+1 !== 30) {
+ throw new Test262Error('#3: 3e+1 === 30');
+}
+
+//CHe+CK#4
+if (4e+1 !== 40) {
+ throw new Test262Error('#4: 4e+1 === 40');
+}
+
+//CHe+CK#5
+if (5e+1 !== 50) {
+ throw new Test262Error('#5: 5e+1 === 50');
+}
+
+//CHe+CK#6
+if (6e+1 !== 60) {
+ throw new Test262Error('#6: 6e+1 === 60');
+}
+
+//CHe+CK#7
+if (7e+1 !== 70) {
+ throw new Test262Error('#7: 7e+1 === 70');
+}
+
+//CHe+CK#8
+if (8e+1 !== 80) {
+ throw new Test262Error('#8: 8e+1 === 80');
+}
+
+//CHe+CK#9
+if (9e+1 !== 90) {
+ throw new Test262Error('#9: 9e+1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T6.js
new file mode 100644
index 0000000000..c79dd26fbc
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T6
+description: "ExponentPart :: E +DecimalDigits"
+---*/
+
+//CHECK#0
+if (0E+1 !== 0) {
+ throw new Test262Error('#0: 0E+1 === 0');
+}
+
+//CHE+CK#1
+if (1E+1 !== 10) {
+ throw new Test262Error('#1: 1E+1 === 10');
+}
+
+//CHE+CK#2
+if (2E+1 !== 20) {
+ throw new Test262Error('#2: 2E+1 === 20');
+}
+
+//CHE+CK#3
+if (3E+1 !== 30) {
+ throw new Test262Error('#3: 3E+1 === 30');
+}
+
+//CHE+CK#4
+if (4E+1 !== 40) {
+ throw new Test262Error('#4: 4E+1 === 40');
+}
+
+//CHE+CK#5
+if (5E+1 !== 50) {
+ throw new Test262Error('#5: 5E+1 === 50');
+}
+
+//CHE+CK#6
+if (6E+1 !== 60) {
+ throw new Test262Error('#6: 6E+1 === 60');
+}
+
+//CHE+CK#7
+if (7E+1 !== 70) {
+ throw new Test262Error('#7: 7E+1 === 70');
+}
+
+//CHE+CK#8
+if (8E+1 !== 80) {
+ throw new Test262Error('#8: 8E+1 === 80');
+}
+
+//CHE+CK#9
+if (9E+1 !== 90) {
+ throw new Test262Error('#9: 9E+1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T7.js
new file mode 100644
index 0000000000..076e396a7f
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T7
+description: "ExponentPart :: e 0"
+---*/
+
+//CHECK#0
+if (0e0 !== 0) {
+ throw new Test262Error('#0: 0e0 === 0');
+}
+
+//CHECK#1
+if (1e0 !== 1) {
+ throw new Test262Error('#1: 1e0 === 1');
+}
+
+//CHECK#2
+if (2e0 !== 2) {
+ throw new Test262Error('#2: 2e0 === 2');
+}
+
+//CHECK#3
+if (3e0 !== 3) {
+ throw new Test262Error('#3: 3e0 === 3');
+}
+
+//CHECK#4
+if (4e0 !== 4) {
+ throw new Test262Error('#4: 4e0 === 4');
+}
+
+//CHECK#5
+if (5e0 !== 5) {
+ throw new Test262Error('#5: 5e0 === 5');
+}
+
+//CHECK#6
+if (6e0 !== 6) {
+ throw new Test262Error('#6: 6e0 === 6');
+}
+
+//CHECK#7
+if (7e0 !== 7) {
+ throw new Test262Error('#7: 7e0 === 7');
+}
+
+//CHECK#8
+if (8e0 !== 8) {
+ throw new Test262Error('#8: 8e0 === 8');
+}
+
+//CHECK#9
+if (9e0 !== 9) {
+ throw new Test262Error('#9: 9e0 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T8.js
new file mode 100644
index 0000000000..cd051db657
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A1.2_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral ExponentPart"
+es5id: 7.8.3_A1.2_T8
+description: "ExponentPart :: E 0"
+---*/
+
+//CHECK#0
+if (0E0 !== 0) {
+ throw new Test262Error('#0: 0E0 === 0');
+}
+
+//CHECK#1
+if (1E0 !== 1) {
+ throw new Test262Error('#1: 1E0 === 1');
+}
+
+//CHECK#2
+if (2E0 !== 2) {
+ throw new Test262Error('#2: 2E0 === 2');
+}
+
+//CHECK#3
+if (3E0 !== 3) {
+ throw new Test262Error('#3: 3E0 === 3');
+}
+
+//CHECK#4
+if (4E0 !== 4) {
+ throw new Test262Error('#4: 4E0 === 4');
+}
+
+//CHECK#5
+if (5E0 !== 5) {
+ throw new Test262Error('#5: 5E0 === 5');
+}
+
+//CHECK#6
+if (6E0 !== 6) {
+ throw new Test262Error('#6: 6E0 === 6');
+}
+
+//CHECK#7
+if (7E0 !== 7) {
+ throw new Test262Error('#7: 7E0 === 7');
+}
+
+//CHECK#8
+if (8E0 !== 8) {
+ throw new Test262Error('#8: 8E0 === 8');
+}
+
+//CHECK#9
+if (9E0 !== 9) {
+ throw new Test262Error('#9: 9E0 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T1.js
new file mode 100644
index 0000000000..847e5e35d6
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits"
+es5id: 7.8.3_A2.1_T1
+description: Use .DecimalDigit
+---*/
+
+//CHECK#0
+if (.0 !== 0.0) {
+ throw new Test262Error('#0: .0 === 0.0');
+}
+
+//CHECK#1
+if (.1 !== 0.1) {
+ throw new Test262Error('#1: .1 === 0.1');
+}
+
+//CHECK#2
+if (.2 !== 0.2) {
+ throw new Test262Error('#2: .2 === 0.2');
+}
+
+//CHECK#3
+if (.3 !== 0.3) {
+ throw new Test262Error('#3: .3 === 0.3');
+}
+
+//CHECK#4
+if (.4 !== 0.4) {
+ throw new Test262Error('#4: .4 === 0.4');
+}
+
+//CHECK#5
+if (.5 !== 0.5) {
+ throw new Test262Error('#5: .5 === 0.5');
+}
+
+//CHECK#6
+if (.6 !== 0.6) {
+ throw new Test262Error('#6: .6 === 0.6');
+}
+
+//CHECK#7
+if (.7 !== 0.7) {
+ throw new Test262Error('#7: .7 === 0.7');
+}
+
+//CHECK#8
+if (.8 !== 0.8) {
+ throw new Test262Error('#8: .8 === 0.8');
+}
+
+//CHECK#9
+if (.9 !== 0.9) {
+ throw new Test262Error('#9: .9 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T2.js
new file mode 100644
index 0000000000..46218eafbc
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits"
+es5id: 7.8.3_A2.1_T2
+description: Use .DecimalDigits
+---*/
+
+//CHECK#0
+if (.00 !== 0.00) {
+ throw new Test262Error('#0: .00 === 0.00');
+}
+
+//CHECK#1
+if (.11 !== 0.11) {
+ throw new Test262Error('#1: .11 === 0.11');
+}
+
+//CHECK#2
+if (.22 !== 0.22) {
+ throw new Test262Error('#2: .22 === 0.22');
+}
+
+//CHECK#3
+if (.33 !== 0.33) {
+ throw new Test262Error('#3: .33 === 0.33');
+}
+
+//CHECK#4
+if (.44 !== 0.44) {
+ throw new Test262Error('#4: .44 === 0.44');
+}
+
+//CHECK#5
+if (.55 !== 0.55) {
+ throw new Test262Error('#5: .55 === 0.55');
+}
+
+//CHECK#6
+if (.66 !== 0.66) {
+ throw new Test262Error('#6: .66 === 0.66');
+}
+
+//CHECK#7
+if (.77 !== 0.77) {
+ throw new Test262Error('#7: .77 === 0.77');
+}
+
+//CHECK#8
+if (.88 !== 0.88) {
+ throw new Test262Error('#8: .88 === 0.88');
+}
+
+//CHECK#9
+if (.99 !== 0.99) {
+ throw new Test262Error('#9: .99 === 0.99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T3.js
new file mode 100644
index 0000000000..ef4cc60330
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.1_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits"
+es5id: 7.8.3_A2.1_T3
+description: Use .DecimalDigits that have at the end zeros
+---*/
+
+//CHECK#0
+if (.00 !== 0.0) {
+ throw new Test262Error('#0: .0 === 0.0');
+}
+
+//CHECK#1
+if (.10 !== 0.1) {
+ throw new Test262Error('#1: .1 === 0.1');
+}
+
+//CHECK#2
+if (.20 !== 0.2) {
+ throw new Test262Error('#2: .2 === 0.2');
+}
+
+//CHECK#3
+if (.30 !== 0.3) {
+ throw new Test262Error('#3: .3 === 0.3');
+}
+
+//CHECK#4
+if (.40 !== 0.4) {
+ throw new Test262Error('#4: .4 === 0.4');
+}
+
+//CHECK#5
+if (.50 !== 0.5) {
+ throw new Test262Error('#5: .5 === 0.5');
+}
+
+//CHECK#6
+if (.60 !== 0.6) {
+ throw new Test262Error('#6: .6 === 0.6');
+}
+
+//CHECK#7
+if (.70 !== 0.7) {
+ throw new Test262Error('#7: .7 === 0.7');
+}
+
+//CHECK#8
+if (.80 !== 0.8) {
+ throw new Test262Error('#8: .8 === 0.8');
+}
+
+//CHECK#9
+if (.90 !== 0.9) {
+ throw new Test262Error('#9: .9 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T1.js
new file mode 100644
index 0000000000..d11565b111
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T1
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+//CHECK#0
+if (.0e1 !== 0) {
+ throw new Test262Error('#0: .0e1 === 0');
+}
+
+//CHECK#1
+if (.1e1 !== 1) {
+ throw new Test262Error('#1: .1e1 === 1');
+}
+
+//CHECK#2
+if (.2e1 !== 2) {
+ throw new Test262Error('#2: .2e1 === 2');
+}
+
+//CHECK#3
+if (.3e1 !== 3) {
+ throw new Test262Error('#3: .3e1 === 3');
+}
+
+//CHECK#4
+if (.4e1 !== 4) {
+ throw new Test262Error('#4: .4e1 === 4');
+}
+
+//CHECK#5
+if (.5e1 !== 5) {
+ throw new Test262Error('#5: .5e1 === 5');
+}
+
+//CHECK#6
+if (.6e1 !== 6) {
+ throw new Test262Error('#6: .6e1 === 6');
+}
+
+//CHECK#7
+if (.7e1 !== 7) {
+ throw new Test262Error('#7: .7e1 === 7');
+}
+
+//CHECK#8
+if (.8e1 !== 8) {
+ throw new Test262Error('#8: .8e1 === 8');
+}
+
+//CHECK#9
+if (.9e1 !== 9) {
+ throw new Test262Error('#9: .9e1 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T2.js
new file mode 100644
index 0000000000..6de53e7874
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T2
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+//CHECK#0
+if (.0E1 !== 0) {
+ throw new Test262Error('#0: .0E1 === 0');
+}
+
+//CHECK#1
+if (.1E1 !== 1) {
+ throw new Test262Error('#1: .1E1 === 1');
+}
+
+//CHECK#2
+if (.2E1 !== 2) {
+ throw new Test262Error('#2: .2E1 === 2');
+}
+
+//CHECK#3
+if (.3E1 !== 3) {
+ throw new Test262Error('#3: .3E1 === 3');
+}
+
+//CHECK#4
+if (.4E1 !== 4) {
+ throw new Test262Error('#4: .4E1 === 4');
+}
+
+//CHECK#5
+if (.5E1 !== 5) {
+ throw new Test262Error('#5: .5E1 === 5');
+}
+
+//CHECK#6
+if (.6E1 !== 6) {
+ throw new Test262Error('#6: .6E1 === 6');
+}
+
+//CHECK#7
+if (.7E1 !== 7) {
+ throw new Test262Error('#7: .7E1 === 7');
+}
+
+//CHECK#8
+if (.8E1 !== 8) {
+ throw new Test262Error('#8: .8E1 === 8');
+}
+
+//CHECK#9
+if (.9E1 !== 9) {
+ throw new Test262Error('#9: .9E1 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T3.js
new file mode 100644
index 0000000000..7b750b0386
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T3
+description: "ExponentPart :: e +DecimalDigits"
+---*/
+
+//CHECK#0
+if (.0e-1 !== 0) {
+ throw new Test262Error('#0: .0e-1 === 0');
+}
+
+//CHECK#1
+if (.1e-1 !== 0.01) {
+ throw new Test262Error('#1: .1e-1 === 0.01');
+}
+
+//CHECK#2
+if (.2e-1 !== 0.02) {
+ throw new Test262Error('#2: .2e-1 === 0.02');
+}
+
+//CHECK#3
+if (.3e-1 !== 0.03) {
+ throw new Test262Error('#3: .3e-1 === 0.03');
+}
+
+//CHECK#4
+if (.4e-1 !== 0.04) {
+ throw new Test262Error('#4: .4e-1 === 0.04');
+}
+
+//CHECK#5
+if (.5e-1 !== 0.05) {
+ throw new Test262Error('#5: .5e-1 === 0.05');
+}
+
+//CHECK#6
+if (.6e-1 !== 0.06) {
+ throw new Test262Error('#6: .6e-1 === 0.06');
+}
+
+//CHECK#7
+if (.7e-1 !== 0.07) {
+ throw new Test262Error('#7: .7e-1 === 0.07');
+}
+
+//CHECK#8
+if (.8e-1 !== 0.08) {
+ throw new Test262Error('#8: .8e-1 === 0.08');
+}
+
+//CHECK#9
+if (.9e-1 !== 0.09) {
+ throw new Test262Error('#9: .9e-1 === 0.09');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T4.js
new file mode 100644
index 0000000000..5e986f3ae2
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T4
+description: "ExponentPart :: E +DecimalDigits"
+---*/
+
+//CHECK#0
+if (.0E-1 !== 0) {
+ throw new Test262Error('#0: .0E-1 === 0');
+}
+
+//CHECK#1
+if (.1E-1 !== 0.01) {
+ throw new Test262Error('#1: .1E-1 === 0.01');
+}
+
+//CHECK#2
+if (.2E-1 !== 0.02) {
+ throw new Test262Error('#2: .2E-1 === 0.02');
+}
+
+//CHECK#3
+if (.3E-1 !== 0.03) {
+ throw new Test262Error('#3: .3E-1 === 0.03');
+}
+
+//CHECK#4
+if (.4E-1 !== 0.04) {
+ throw new Test262Error('#4: .4E-1 === 0.04');
+}
+
+//CHECK#5
+if (.5E-1 !== 0.05) {
+ throw new Test262Error('#5: .5E-1 === 0.05');
+}
+
+//CHECK#6
+if (.6E-1 !== 0.06) {
+ throw new Test262Error('#6: .6E-1 === 0.06');
+}
+
+//CHECK#7
+if (.7E-1 !== 0.07) {
+ throw new Test262Error('#7: .7E-1 === 0.07');
+}
+
+//CHECK#8
+if (.8E-1 !== 0.08) {
+ throw new Test262Error('#8: .8E-1 === 0.08');
+}
+
+//CHECK#9
+if (.9E-1 !== 0.09) {
+ throw new Test262Error('#9: .9E-1 === 0.09');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T5.js
new file mode 100644
index 0000000000..54ef29a8d5
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T5
+description: "ExponentPart :: e +DecimalDigits"
+---*/
+
+//CHECK#0
+if (.0e+1 !== 0) {
+ throw new Test262Error('#0: .0e+1 === 0');
+}
+
+//CHECK#1
+if (.1e+1 !== 1) {
+ throw new Test262Error('#1: .1e+1 === 1');
+}
+
+//CHECK#2
+if (.2e+1 !== 2) {
+ throw new Test262Error('#2: .2e+1 === 2');
+}
+
+//CHECK#3
+if (.3e+1 !== 3) {
+ throw new Test262Error('#3: .3e+1 === 3');
+}
+
+//CHECK#4
+if (.4e+1 !== 4) {
+ throw new Test262Error('#4: .4e+1 === 4');
+}
+
+//CHECK#5
+if (.5e+1 !== 5) {
+ throw new Test262Error('#5: .5e+1 === 5');
+}
+
+//CHECK#6
+if (.6e+1 !== 6) {
+ throw new Test262Error('#6: .6e+1 === 6');
+}
+
+//CHECK#7
+if (.7e+1 !== 7) {
+ throw new Test262Error('#7: .7e+1 === 7');
+}
+
+//CHECK#8
+if (.8e+1 !== 8) {
+ throw new Test262Error('#8: .8e+1 === 8');
+}
+
+//CHECK#9
+if (.9e+1 !== 9) {
+ throw new Test262Error('#9: .9e+1 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T6.js
new file mode 100644
index 0000000000..d922634c1d
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T6
+description: "ExponentPart :: E +DecimalDigits"
+---*/
+
+//CHECK#0
+if (.0E+1 !== 0) {
+ throw new Test262Error('#0: .0E+1 === 0');
+}
+
+//CHECK#1
+if (.1E+1 !== 1) {
+ throw new Test262Error('#1: .1E+1 === 1');
+}
+
+//CHECK#2
+if (.2E+1 !== 2) {
+ throw new Test262Error('#2: .2E+1 === 2');
+}
+
+//CHECK#3
+if (.3E+1 !== 3) {
+ throw new Test262Error('#3: .3E+1 === 3');
+}
+
+//CHECK#4
+if (.4E+1 !== 4) {
+ throw new Test262Error('#4: .4E+1 === 4');
+}
+
+//CHECK#5
+if (.5E+1 !== 5) {
+ throw new Test262Error('#5: .5E+1 === 5');
+}
+
+//CHECK#6
+if (.6E+1 !== 6) {
+ throw new Test262Error('#6: .6E+1 === 6');
+}
+
+//CHECK#7
+if (.7E+1 !== 7) {
+ throw new Test262Error('#7: .7E+1 === 7');
+}
+
+//CHECK#8
+if (.8E+1 !== 8) {
+ throw new Test262Error('#8: .8E+1 === 8');
+}
+
+//CHECK#9
+if (.9E+1 !== 9) {
+ throw new Test262Error('#9: .9E+1 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T7.js
new file mode 100644
index 0000000000..9cb8eb7036
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T7
+description: "ExponentPart :: e 0"
+---*/
+
+//CHECK#0
+if (.0e0 !== 0.0) {
+ throw new Test262Error('#0: .0e0 === 0.0');
+}
+
+//CHECK#1
+if (.1e0 !== 0.1) {
+ throw new Test262Error('#1: .1e0 === 0.1');
+}
+
+//CHECK#2
+if (.2e0 !== 0.2) {
+ throw new Test262Error('#2: .2e0 === 0.2');
+}
+
+//CHECK#3
+if (.3e0 !== 0.3) {
+ throw new Test262Error('#3: .3e0 === 0.3');
+}
+
+//CHECK#4
+if (.4e0 !== 0.4) {
+ throw new Test262Error('#4: .4e0 === 0.4');
+}
+
+//CHECK#5
+if (.5e0 !== 0.5) {
+ throw new Test262Error('#5: .5e0 === 0.5');
+}
+
+//CHECK#6
+if (.6e0 !== 0.6) {
+ throw new Test262Error('#6: .6e0 === 0.6');
+}
+
+//CHECK#7
+if (.7e0 !== 0.7) {
+ throw new Test262Error('#7: .7e0 === 0.7');
+}
+
+//CHECK#8
+if (.8e0 !== 0.8) {
+ throw new Test262Error('#8: .8e0 === 0.8');
+}
+
+//CHECK#9
+if (.9e0 !== 0.9) {
+ throw new Test262Error('#9: .9e0 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T8.js
new file mode 100644
index 0000000000..eca19e538d
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A2.2_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: .DecimalDigits ExponentPart"
+es5id: 7.8.3_A2.2_T8
+description: "ExponentPart :: E 0"
+---*/
+
+//CHECK#0
+if (.0E0 !== 0.0) {
+ throw new Test262Error('#0: .0E0 === 0.0');
+}
+
+//CHECK#1
+if (.1E0 !== 0.1) {
+ throw new Test262Error('#1: .1E0 === 0.1');
+}
+
+//CHECK#2
+if (.2E0 !== 0.2) {
+ throw new Test262Error('#2: .2E0 === 0.2');
+}
+
+//CHECK#3
+if (.3E0 !== 0.3) {
+ throw new Test262Error('#3: .3E0 === 0.3');
+}
+
+//CHECK#4
+if (.4E0 !== 0.4) {
+ throw new Test262Error('#4: .4E0 === 0.4');
+}
+
+//CHECK#5
+if (.5E0 !== 0.5) {
+ throw new Test262Error('#5: .5E0 === 0.5');
+}
+
+//CHECK#6
+if (.6E0 !== 0.6) {
+ throw new Test262Error('#6: .6E0 === 0.6');
+}
+
+//CHECK#7
+if (.7E0 !== 0.7) {
+ throw new Test262Error('#7: .7E0 === 0.7');
+}
+
+//CHECK#8
+if (.8E0 !== 0.8) {
+ throw new Test262Error('#8: .8E0 === 0.8');
+}
+
+//CHECK#9
+if (.9E0 !== 0.9) {
+ throw new Test262Error('#9: .9E0 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T1.js
new file mode 100644
index 0000000000..b91bff9334
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral."
+es5id: 7.8.3_A3.1_T1
+description: "DecimalIntegerLiteral :: 0, NoNZeroDigit"
+---*/
+
+//CHECK#0
+if (0. !== 0) {
+ throw new Test262Error('#0: 0. === 0');
+}
+
+//CHECK#1
+if (1. !== 1) {
+ throw new Test262Error('#1: 1. === 1');
+}
+
+//CHECK#2
+if (2. !== 2) {
+ throw new Test262Error('#2: 2. === 2');
+}
+
+//CHECK#3
+if (3. !== 3) {
+ throw new Test262Error('#3: 3. === 3');
+}
+
+//CHECK#4
+if (4. !== 4) {
+ throw new Test262Error('#4: 4. === 4');
+}
+
+//CHECK#5
+if (5. !== 5) {
+ throw new Test262Error('#5: 5. === 5');
+}
+
+//CHECK#6
+if (6. !== 6) {
+ throw new Test262Error('#6: 6. === 6');
+}
+
+//CHECK#7
+if (7. !== 7) {
+ throw new Test262Error('#7: 7. === 7');
+}
+
+//CHECK#8
+if (8. !== 8) {
+ throw new Test262Error('#8: 8. === 8');
+}
+
+//CHECK#9
+if (9. !== 9) {
+ throw new Test262Error('#9: 9. === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T2.js
new file mode 100644
index 0000000000..d9a968a685
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.1_T2.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral."
+es5id: 7.8.3_A3.1_T2
+description: "DecimalIntegerLiteral :: NoNZeroDigit DecimalDigigts"
+---*/
+
+//CHECK#1
+if (11. !== 11) {
+ throw new Test262Error('#1: 11. === 11');
+}
+
+//CHECK#2
+if (22. !== 22) {
+ throw new Test262Error('#2: 22. === 22');
+}
+
+//CHECK#3
+if (33. !== 33) {
+ throw new Test262Error('#3: 33. === 33');
+}
+
+//CHECK#4
+if (44. !== 44) {
+ throw new Test262Error('#4: 44. === 44');
+}
+
+//CHECK#5
+if (55. !== 55) {
+ throw new Test262Error('#5: 55. === 55');
+}
+
+//CHECK#6
+if (66. !== 66) {
+ throw new Test262Error('#6: 66. === 66');
+}
+
+//CHECK#7
+if (77. !== 77) {
+ throw new Test262Error('#7: 77. === 77');
+}
+
+//CHECK#8
+if (88. !== 88) {
+ throw new Test262Error('#8: 88. === 88');
+}
+
+//CHECK#9
+if (99. !== 99) {
+ throw new Test262Error('#9: 99. === 99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T1.js
new file mode 100644
index 0000000000..bd5f7582b9
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits"
+es5id: 7.8.3_A3.2_T1
+description: After DecimalIntegerLiteral. used ZeroDigit
+---*/
+
+//CHECK#0
+if (0.0 !== 0) {
+ throw new Test262Error('#0: 0.0 === 0');
+}
+
+//CHECK#1
+if (1.0 !== 1) {
+ throw new Test262Error('#1: 1.0 === 1');
+}
+
+//CHECK#2
+if (2.0 !== 2) {
+ throw new Test262Error('#2: 2.0 === 2');
+}
+
+//CHECK#3
+if (3.0 !== 3) {
+ throw new Test262Error('#3: 3.0 === 3');
+}
+
+//CHECK#4
+if (4.0 !== 4) {
+ throw new Test262Error('#4: 4.0 === 4');
+}
+
+//CHECK#5
+if (5.0 !== 5) {
+ throw new Test262Error('#5: 5.0 === 5');
+}
+
+//CHECK#6
+if (6.0 !== 6) {
+ throw new Test262Error('#6: 6.0 === 6');
+}
+
+//CHECK#7
+if (7.0 !== 7) {
+ throw new Test262Error('#7: 7.0 === 7');
+}
+
+//CHECK#8
+if (8.0 !== 8) {
+ throw new Test262Error('#8: 8.0 === 8');
+}
+
+//CHECK#9
+if (9.0 !== 9) {
+ throw new Test262Error('#9: 9.0 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T2.js
new file mode 100644
index 0000000000..6243c7441a
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits"
+es5id: 7.8.3_A3.2_T2
+description: After DecimalIntegerLiteral. used ZeroDigits
+---*/
+
+//CHECK#0
+if (0.00 !== 0) {
+ throw new Test262Error('#0: 0.00 === 0');
+}
+
+//CHECK#1
+if (1.00 !== 1) {
+ throw new Test262Error('#1: 1.00 === 1');
+}
+
+//CHECK#2
+if (2.00 !== 2) {
+ throw new Test262Error('#2: 2.00 === 2');
+}
+
+//CHECK#3
+if (3.00 !== 3) {
+ throw new Test262Error('#3: 3.00 === 3');
+}
+
+//CHECK#4
+if (4.00 !== 4) {
+ throw new Test262Error('#4: 4.00 === 4');
+}
+
+//CHECK#5
+if (5.00 !== 5) {
+ throw new Test262Error('#5: 5.00 === 5');
+}
+
+//CHECK#6
+if (6.00 !== 6) {
+ throw new Test262Error('#6: 6.00 === 6');
+}
+
+//CHECK#7
+if (7.00 !== 7) {
+ throw new Test262Error('#7: 7.00 === 7');
+}
+
+//CHECK#8
+if (8.00 !== 8) {
+ throw new Test262Error('#8: 8.00 === 8');
+}
+
+//CHECK#9
+if (9.00 !== 9) {
+ throw new Test262Error('#9: 9.00 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T3.js
new file mode 100644
index 0000000000..71d65dffba
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits"
+es5id: 7.8.3_A3.2_T3
+description: After DecimalIntegerLiteral. used NoNZeroDigit
+---*/
+
+//CHECK#0
+if (0.0 !== 0.0) {
+ throw new Test262Error('#0: 0.0 === 0.0');
+}
+
+//CHECK#1
+if (1.1 !== 1.1) {
+ throw new Test262Error('#1: 1.1 === 1.1');
+}
+
+//CHECK#2
+if (2.2 !== 2.2) {
+ throw new Test262Error('#2: 2.2 === 2.2');
+}
+
+//CHECK#3
+if (3.3 !== 3.3) {
+ throw new Test262Error('#3: 3.3 === 3.3');
+}
+
+//CHECK#4
+if (4.4 !== 4.4) {
+ throw new Test262Error('#4: 4.4 === 4.4');
+}
+
+//CHECK#5
+if (5.5 !== 5.5) {
+ throw new Test262Error('#5: 5.5 === 5.5');
+}
+
+//CHECK#6
+if (6.6 !== 6.6) {
+ throw new Test262Error('#6: 6.6 === 6.6');
+}
+
+//CHECK#7
+if (7.7 !== 7.7) {
+ throw new Test262Error('#7: 7.7 === 7.7');
+}
+
+//CHECK#8
+if (8.8 !== 8.8) {
+ throw new Test262Error('#8: 8..8 === 8.8');
+}
+
+//CHECK#9
+if (9.9 !== 9.9) {
+ throw new Test262Error('#9: 9.9 === 9.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T1.js
new file mode 100644
index 0000000000..e083ac5563
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T1
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.e1 !== 0) {
+ throw new Test262Error('#0: 0.e1 === 0');
+}
+
+//CHECK#1
+if (1.e1 !== 10) {
+ throw new Test262Error('#1: 1.e1 === 10');
+}
+
+//CHECK#2
+if (2.e1 !== 20) {
+ throw new Test262Error('#2: 2.e1 === 20');
+}
+
+//CHECK#3
+if (3.e1 !== 30) {
+ throw new Test262Error('#3: 3.e1 === 30');
+}
+
+//CHECK#4
+if (4.e1 !== 40) {
+ throw new Test262Error('#4: 4.e1 === 40');
+}
+
+//CHECK#5
+if (5.e1 !== 50) {
+ throw new Test262Error('#5: 5.e1 === 50');
+}
+
+//CHECK#6
+if (6.e1 !== 60) {
+ throw new Test262Error('#6: 6.e1 === 60');
+}
+
+//CHECK#7
+if (7.e1 !== 70) {
+ throw new Test262Error('#7: 7.e1 === 70');
+}
+
+//CHECK#8
+if (8.e1 !== 80) {
+ throw new Test262Error('#8: 8.e1 === 80');
+}
+
+//CHECK#9
+if (9.e1 !== 90) {
+ throw new Test262Error('#9: 9.e1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T2.js
new file mode 100644
index 0000000000..10ee466d8b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T2
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.E1 !== 0) {
+ throw new Test262Error('#0: 0.E1 === 0');
+}
+
+//CHECK#1
+if (1.E1 !== 10) {
+ throw new Test262Error('#1: 1.E1 === 10');
+}
+
+//CHECK#2
+if (2.E1 !== 20) {
+ throw new Test262Error('#2: 2.E1 === 20');
+}
+
+//CHECK#3
+if (3.E1 !== 30) {
+ throw new Test262Error('#3: 3.E1 === 30');
+}
+
+//CHECK#4
+if (4.E1 !== 40) {
+ throw new Test262Error('#4: 4.E1 === 40');
+}
+
+//CHECK#5
+if (5.E1 !== 50) {
+ throw new Test262Error('#5: 5.E1 === 50');
+}
+
+//CHECK#6
+if (6.E1 !== 60) {
+ throw new Test262Error('#6: 6.E1 === 60');
+}
+
+//CHECK#7
+if (7.E1 !== 70) {
+ throw new Test262Error('#7: 7.E1 === 70');
+}
+
+//CHECK#8
+if (8.E1 !== 80) {
+ throw new Test262Error('#8: 8.E1 === 80');
+}
+
+//CHECK#9
+if (9.E1 !== 90) {
+ throw new Test262Error('#9: 9.E1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T3.js
new file mode 100644
index 0000000000..ec6e50e55e
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T3
+description: "ExponentPart :: e -DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.e-1 !== 0) {
+ throw new Test262Error('#0: 0.e-1 === 0');
+}
+
+//CHECK#1
+if (1.e-1 !== 0.1) {
+ throw new Test262Error('#1: 1.e-1 === 0.1');
+}
+
+//CHECK#2
+if (2.e-1 !== 0.2) {
+ throw new Test262Error('#2: 2.e-1 === 0.2');
+}
+
+//CHECK#3
+if (3.e-1 !== 0.3) {
+ throw new Test262Error('#3: 3.e-1 === 0.3');
+}
+
+//CHECK#4
+if (4.e-1 !== 0.4) {
+ throw new Test262Error('#4: 4.e-1 === 0.4');
+}
+
+//CHECK#5
+if (5.e-1 !== 0.5) {
+ throw new Test262Error('#5: 5.e-1 === 0.5');
+}
+
+//CHECK#6
+if (6.e-1 !== 0.6) {
+ throw new Test262Error('#6: 6.e-1 === 0.6');
+}
+
+//CHECK#7
+if (7.e-1 !== 0.7) {
+ throw new Test262Error('#7: 7.e-1 === 0.7');
+}
+
+//CHECK#8
+if (8.e-1 !== 0.8) {
+ throw new Test262Error('#8: 8.e-1 === 0.8');
+}
+
+//CHECK#9
+if (9.e-1 !== 0.9) {
+ throw new Test262Error('#9: 9.e-1 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T4.js
new file mode 100644
index 0000000000..4a70140810
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T4
+description: "ExponentPart :: E -DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.E-1 !== 0) {
+ throw new Test262Error('#0: 0.E-1 === 0');
+}
+
+//CHECK#1
+if (1.E-1 !== 0.1) {
+ throw new Test262Error('#1: 1.E-1 === 0.1');
+}
+
+//CHECK#2
+if (2.E-1 !== 0.2) {
+ throw new Test262Error('#2: 2.E-1 === 0.2');
+}
+
+//CHECK#3
+if (3.E-1 !== 0.3) {
+ throw new Test262Error('#3: 3.E-1 === 0.3');
+}
+
+//CHECK#4
+if (4.E-1 !== 0.4) {
+ throw new Test262Error('#4: 4.E-1 === 0.4');
+}
+
+//CHECK#5
+if (5.E-1 !== 0.5) {
+ throw new Test262Error('#5: 5.E-1 === 0.5');
+}
+
+//CHECK#6
+if (6.E-1 !== 0.6) {
+ throw new Test262Error('#6: 6.E-1 === 0.6');
+}
+
+//CHECK#7
+if (7.E-1 !== 0.7) {
+ throw new Test262Error('#7: 7.E-1 === 0.7');
+}
+
+//CHECK#8
+if (8.E-1 !== 0.8) {
+ throw new Test262Error('#8: 8.E-1 === 0.8');
+}
+
+//CHECK#9
+if (9.E-1 !== 0.9) {
+ throw new Test262Error('#9: 9.E-1 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T5.js
new file mode 100644
index 0000000000..624c152890
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T5
+description: "ExponentPart :: e +DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.e+1 !== 0) {
+ throw new Test262Error('#0: 0.e+1 === 0');
+}
+
+//CHECK#1
+if (1.e+1 !== 10) {
+ throw new Test262Error('#1: 1.e+1 === 10');
+}
+
+//CHECK#2
+if (2.e+1 !== 20) {
+ throw new Test262Error('#2: 2.e+1 === 20');
+}
+
+//CHECK#3
+if (3.e+1 !== 30) {
+ throw new Test262Error('#3: 3.e+1 === 30');
+}
+
+//CHECK#4
+if (4.e+1 !== 40) {
+ throw new Test262Error('#4: 4.e+1 === 40');
+}
+
+//CHECK#5
+if (5.e+1 !== 50) {
+ throw new Test262Error('#5: 5.e+1 === 50');
+}
+
+//CHECK#6
+if (6.e+1 !== 60) {
+ throw new Test262Error('#6: 6.e+1 === 60');
+}
+
+//CHECK#7
+if (7.e+1 !== 70) {
+ throw new Test262Error('#7: 7.e+1 === 70');
+}
+
+//CHECK#8
+if (8.e+1 !== 80) {
+ throw new Test262Error('#8: 8.e+1 === 80');
+}
+
+//CHECK#9
+if (9.e+1 !== 90) {
+ throw new Test262Error('#9: 9.e+1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T6.js
new file mode 100644
index 0000000000..d016066531
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T6
+description: "ExponentPart :: E +DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.E+1 !== 0) {
+ throw new Test262Error('#0: 0.E+1 === 0');
+}
+
+//CHECK#1
+if (1.E+1 !== 10) {
+ throw new Test262Error('#1: 1.E+1 === 10');
+}
+
+//CHECK#2
+if (2.E+1 !== 20) {
+ throw new Test262Error('#2: 2.E+1 === 20');
+}
+
+//CHECK#3
+if (3.E+1 !== 30) {
+ throw new Test262Error('#3: 3.E+1 === 30');
+}
+
+//CHECK#4
+if (4.E+1 !== 40) {
+ throw new Test262Error('#4: 4.E+1 === 40');
+}
+
+//CHECK#5
+if (5.E+1 !== 50) {
+ throw new Test262Error('#5: 5.E+1 === 50');
+}
+
+//CHECK#6
+if (6.E+1 !== 60) {
+ throw new Test262Error('#6: 6.E+1 === 60');
+}
+
+//CHECK#7
+if (7.E+1 !== 70) {
+ throw new Test262Error('#7: 7.E+1 === 70');
+}
+
+//CHECK#8
+if (8.E+1 !== 80) {
+ throw new Test262Error('#8: 8.E+1 === 80');
+}
+
+//CHECK#9
+if (9.E+1 !== 90) {
+ throw new Test262Error('#9: 9.E+1 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T7.js
new file mode 100644
index 0000000000..fec881e1d7
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T7
+description: "ExponentPart :: e 0"
+---*/
+
+//CHECK#0
+if (0.e0 !== 0) {
+ throw new Test262Error('#0: 0.e0 === 0');
+}
+
+//CHECK#1
+if (1.e0 !== 1) {
+ throw new Test262Error('#1: 1.e0 === 1');
+}
+
+//CHECK#2
+if (2.e0 !== 2) {
+ throw new Test262Error('#2: 2.e0 === 2');
+}
+
+//CHECK#3
+if (3.e0 !== 3) {
+ throw new Test262Error('#3: 3.e0 === 3');
+}
+
+//CHECK#4
+if (4.e0 !== 4) {
+ throw new Test262Error('#4: 4.e0 === 4');
+}
+
+//CHECK#5
+if (5.e0 !== 5) {
+ throw new Test262Error('#5: 5.e0 === 5');
+}
+
+//CHECK#6
+if (6.e0 !== 6) {
+ throw new Test262Error('#6: 6.e0 === 6');
+}
+
+//CHECK#7
+if (7.e0 !== 7) {
+ throw new Test262Error('#7: 7.e0 === 7');
+}
+
+//CHECK#8
+if (8.e0 !== 8) {
+ throw new Test262Error('#8: 8.e0 === 8');
+}
+
+//CHECK#9
+if (9.e0 !== 9) {
+ throw new Test262Error('#9: 9.e0 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T8.js
new file mode 100644
index 0000000000..8d69621ecb
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.3_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. ExponentPart"
+es5id: 7.8.3_A3.3_T8
+description: "ExponentPart :: E 0"
+---*/
+
+//CHECK#0
+if (0.E0 !== 0) {
+ throw new Test262Error('#0: 0.E0 === 0');
+}
+
+//CHECK#1
+if (1.E0 !== 1) {
+ throw new Test262Error('#1: 1.E0 === 1');
+}
+
+//CHECK#2
+if (2.E0 !== 2) {
+ throw new Test262Error('#2: 2.E0 === 2');
+}
+
+//CHECK#3
+if (3.E0 !== 3) {
+ throw new Test262Error('#3: 3.E0 === 3');
+}
+
+//CHECK#4
+if (4.E0 !== 4) {
+ throw new Test262Error('#4: 4.E0 === 4');
+}
+
+//CHECK#5
+if (5.E0 !== 5) {
+ throw new Test262Error('#5: 5.E0 === 5');
+}
+
+//CHECK#6
+if (6.E0 !== 6) {
+ throw new Test262Error('#6: 6.E0 === 6');
+}
+
+//CHECK#7
+if (7.E0 !== 7) {
+ throw new Test262Error('#7: 7.E0 === 7');
+}
+
+//CHECK#8
+if (8.E0 !== 8) {
+ throw new Test262Error('#8: 8.E0 === 8');
+}
+
+//CHECK#9
+if (9.E0 !== 9) {
+ throw new Test262Error('#9: 9.E0 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T1.js
new file mode 100644
index 0000000000..865feec61c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T1
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.0e1 !== 0) {
+ throw new Test262Error('#0: 0.0e1 === 0');
+}
+
+//CHECK#1
+if (1.1e1 !== 11) {
+ throw new Test262Error('#1: 1.1e1 === 11');
+}
+
+//CHECK#2
+if (2.2e1 !== 22) {
+ throw new Test262Error('#2: 2.2e1 === 22');
+}
+
+//CHECK#3
+if (3.3e1 !== 33) {
+ throw new Test262Error('#3: 3.3e1 === 33');
+}
+
+//CHECK#4
+if (4.4e1 !== 44) {
+ throw new Test262Error('#4: 4.4e1 === 44');
+}
+
+//CHECK#5
+if (5.5e1 !== 55) {
+ throw new Test262Error('#5: 5.5e1 === 55');
+}
+
+//CHECK#6
+if (6.6e1 !== 66) {
+ throw new Test262Error('#6: 6.e1 === 66');
+}
+
+//CHECK#7
+if (7.7e1 !== 77) {
+ throw new Test262Error('#7: 7.7e1 === 77');
+}
+
+//CHECK#8
+if (8.8e1 !== 88) {
+ throw new Test262Error('#8: 8.8e1 === 88');
+}
+
+//CHECK#9
+if (9.9e1 !== 99) {
+ throw new Test262Error('#9: 9.9e1 === 99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T2.js
new file mode 100644
index 0000000000..4d3b49af6b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T2
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.0E1 !== 0) {
+ throw new Test262Error('#0: 0.0E1 === 0');
+}
+
+//CHECK#1
+if (1.1E1 !== 11) {
+ throw new Test262Error('#1: 1.1E1 === 11');
+}
+
+//CHECK#2
+if (2.2E1 !== 22) {
+ throw new Test262Error('#2: 2.2E1 === 22');
+}
+
+//CHECK#3
+if (3.3E1 !== 33) {
+ throw new Test262Error('#3: 3.3E1 === 33');
+}
+
+//CHECK#4
+if (4.4E1 !== 44) {
+ throw new Test262Error('#4: 4.4E1 === 44');
+}
+
+//CHECK#5
+if (5.5E1 !== 55) {
+ throw new Test262Error('#5: 5.5E1 === 55');
+}
+
+//CHECK#6
+if (6.6E1 !== 66) {
+ throw new Test262Error('#6: 6.E1 === 66');
+}
+
+//CHECK#7
+if (7.7E1 !== 77) {
+ throw new Test262Error('#7: 7.7E1 === 77');
+}
+
+//CHECK#8
+if (8.8E1 !== 88) {
+ throw new Test262Error('#8: 8.8E1 === 88');
+}
+
+//CHECK#9
+if (9.9E1 !== 99) {
+ throw new Test262Error('#9: 9.9E1 === 99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T3.js
new file mode 100644
index 0000000000..88f488ba7c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T3
+description: "ExponentPart :: e -DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.0e-1 !== 0) {
+ throw new Test262Error('#0: 0.0e-1 === 0');
+}
+
+//CHECK#1
+if (1.1e-1 !== 0.11) {
+ throw new Test262Error('#1: 1.1e-1 === 0.11');
+}
+
+//CHECK#2
+if (2.2e-1 !== 0.22) {
+ throw new Test262Error('#2: 2.2e-1 === 0.22');
+}
+
+//CHECK#3
+if (3.3e-1 !== 0.33) {
+ throw new Test262Error('#3: 3.3e-1 === 0.33');
+}
+
+//CHECK#4
+if (4.4e-1 !== 0.44) {
+ throw new Test262Error('#4: 4.4e-1 === 0.44');
+}
+
+//CHECK#5
+if (5.5e-1 !== 0.55) {
+ throw new Test262Error('#5: 5.5e-1 === 0.55');
+}
+
+//CHECK#6
+if (6.6e-1 !== 0.66) {
+ throw new Test262Error('#6: 6.e-1 === 0.66');
+}
+
+//CHECK#7
+if (7.7e-1 !== 0.77) {
+ throw new Test262Error('#7: 7.7e-1 === 0.77');
+}
+
+//CHECK#8
+if (8.8e-1 !== 0.88) {
+ throw new Test262Error('#8: 8.8e-1 === 0.88');
+}
+
+//CHECK#9
+if (9.9e-1 !== 0.99) {
+ throw new Test262Error('#9: 9.9e-1 === 0.99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T4.js
new file mode 100644
index 0000000000..f4b5d75c10
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T4
+description: "ExponentPart :: E -DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.0E-1 !== 0) {
+ throw new Test262Error('#0: 0.0E-1 === 0');
+}
+
+//CHECK#1
+if (1.1E-1 !== 0.11) {
+ throw new Test262Error('#1: 1.1E-1 === 0.11');
+}
+
+//CHECK#2
+if (2.2E-1 !== 0.22) {
+ throw new Test262Error('#2: 2.2E-1 === 0.22');
+}
+
+//CHECK#3
+if (3.3E-1 !== 0.33) {
+ throw new Test262Error('#3: 3.3E-1 === 0.33');
+}
+
+//CHECK#4
+if (4.4E-1 !== 0.44) {
+ throw new Test262Error('#4: 4.4E-1 === 0.44');
+}
+
+//CHECK#5
+if (5.5E-1 !== 0.55) {
+ throw new Test262Error('#5: 5.5E-1 === 0.55');
+}
+
+//CHECK#6
+if (6.6E-1 !== 0.66) {
+ throw new Test262Error('#6: 6.E-1 === 0.66');
+}
+
+//CHECK#7
+if (7.7E-1 !== 0.77) {
+ throw new Test262Error('#7: 7.7E-1 === 0.77');
+}
+
+//CHECK#8
+if (8.8E-1 !== 0.88) {
+ throw new Test262Error('#8: 8.8E-1 === 0.88');
+}
+
+//CHECK#9
+if (9.9E-1 !== 0.99) {
+ throw new Test262Error('#9: 9.9E-1 === 0.99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T5.js
new file mode 100644
index 0000000000..f25d3fb008
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T5
+description: "ExponentPart :: e +DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.0e+1 !== 0) {
+ throw new Test262Error('#0: 0.0e+1 === 0');
+}
+
+//CHECK#1
+if (1.1e+1 !== 11) {
+ throw new Test262Error('#1: 1.1e+1 === 11');
+}
+
+//CHECK#2
+if (2.2e+1 !== 22) {
+ throw new Test262Error('#2: 2.2e+1 === 22');
+}
+
+//CHECK#3
+if (3.3e+1 !== 33) {
+ throw new Test262Error('#3: 3.3e+1 === 33');
+}
+
+//CHECK#4
+if (4.4e+1 !== 44) {
+ throw new Test262Error('#4: 4.4e+1 === 44');
+}
+
+//CHECK#5
+if (5.5e+1 !== 55) {
+ throw new Test262Error('#5: 5.5e+1 === 55');
+}
+
+//CHECK#6
+if (6.6e+1 !== 66) {
+ throw new Test262Error('#6: 6.e+1 === 66');
+}
+
+//CHECK#7
+if (7.7e+1 !== 77) {
+ throw new Test262Error('#7: 7.7e+1 === 77');
+}
+
+//CHECK#8
+if (8.8e+1 !== 88) {
+ throw new Test262Error('#8: 8.8e+1 === 88');
+}
+
+//CHECK#9
+if (9.9e+1 !== 99) {
+ throw new Test262Error('#9: 9.9e+1 === 99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T6.js
new file mode 100644
index 0000000000..e2f77e702c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T6
+description: "ExponentPart :: E +DecimalDigits"
+---*/
+
+//CHECK#0
+if (0.0E+1 !== 0) {
+ throw new Test262Error('#0: 0.0E+1 === 0');
+}
+
+//CHECK#1
+if (1.1E+1 !== 11) {
+ throw new Test262Error('#1: 1.1E+1 === 11');
+}
+
+//CHECK#2
+if (2.2E+1 !== 22) {
+ throw new Test262Error('#2: 2.2E+1 === 22');
+}
+
+//CHECK#3
+if (3.3E+1 !== 33) {
+ throw new Test262Error('#3: 3.3E+1 === 33');
+}
+
+//CHECK#4
+if (4.4E+1 !== 44) {
+ throw new Test262Error('#4: 4.4E+1 === 44');
+}
+
+//CHECK#5
+if (5.5E+1 !== 55) {
+ throw new Test262Error('#5: 5.5E+1 === 55');
+}
+
+//CHECK#6
+if (6.6E+1 !== 66) {
+ throw new Test262Error('#6: 6.E+1 === 66');
+}
+
+//CHECK#7
+if (7.7E+1 !== 77) {
+ throw new Test262Error('#7: 7.7E+1 === 77');
+}
+
+//CHECK#8
+if (8.8E+1 !== 88) {
+ throw new Test262Error('#8: 8.8E+1 === 88');
+}
+
+//CHECK#9
+if (9.9E+1 !== 99) {
+ throw new Test262Error('#9: 9.9E+1 === 99');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T7.js
new file mode 100644
index 0000000000..8f474c8781
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T7
+description: "ExponentPart :: e 0"
+---*/
+
+//CHECK#0
+if (0.0e0 !== 0.0) {
+ throw new Test262Error('#0: 0.0e0 === 0.0');
+}
+
+//CHECK#1
+if (1.1e0 !== 1.1) {
+ throw new Test262Error('#1: 1.1e0 === 1.1');
+}
+
+//CHECK#2
+if (2.2e0 !== 2.2) {
+ throw new Test262Error('#2: 2.2e0 === 2.2');
+}
+
+//CHECK#3
+if (3.3e0 !== 3.3) {
+ throw new Test262Error('#3: 3.3e0 === 3.3');
+}
+
+//CHECK#4
+if (4.4e0 !== 4.4) {
+ throw new Test262Error('#4: 4.4e0 === 4.4');
+}
+
+//CHECK#5
+if (5.5e0 !== 5.5) {
+ throw new Test262Error('#5: 5.5e0 === 5.5');
+}
+
+//CHECK#6
+if (6.6e0 !== 6.6) {
+ throw new Test262Error('#6: 6.e0 === 6.6');
+}
+
+//CHECK#7
+if (7.7e0 !== 7.7) {
+ throw new Test262Error('#7: 7.7e0 === 7.7');
+}
+
+//CHECK#8
+if (8.8e0 !== 8.8) {
+ throw new Test262Error('#8: 8.8e0 === 8.8');
+}
+
+//CHECK#9
+if (9.9e0 !== 9.9) {
+ throw new Test262Error('#9: 9.9e0 === 9.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T8.js
new file mode 100644
index 0000000000..fbb5b57d8f
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A3.4_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart"
+es5id: 7.8.3_A3.4_T8
+description: "ExponentPart :: E 0"
+---*/
+
+//CHECK#0
+if (0.0E0 !== 0.0) {
+ throw new Test262Error('#0: 0.0E0 === 0.0');
+}
+
+//CHECK#1
+if (1.1E0 !== 1.1) {
+ throw new Test262Error('#1: 1.1E0 === 1.1');
+}
+
+//CHECK#2
+if (2.2E0 !== 2.2) {
+ throw new Test262Error('#2: 2.2E0 === 2.2');
+}
+
+//CHECK#3
+if (3.3E0 !== 3.3) {
+ throw new Test262Error('#3: 3.3E0 === 3.3');
+}
+
+//CHECK#4
+if (4.4E0 !== 4.4) {
+ throw new Test262Error('#4: 4.4E0 === 4.4');
+}
+
+//CHECK#5
+if (5.5E0 !== 5.5) {
+ throw new Test262Error('#5: 5.5E0 === 5.5');
+}
+
+//CHECK#6
+if (6.6E0 !== 6.6) {
+ throw new Test262Error('#6: 6.E0 === 6.6');
+}
+
+//CHECK#7
+if (7.7E0 !== 7.7) {
+ throw new Test262Error('#7: 7.7E0 === 7.7');
+}
+
+//CHECK#8
+if (8.8E0 !== 8.8) {
+ throw new Test262Error('#8: 8.8E0 === 8.8');
+}
+
+//CHECK#9
+if (9.9E0 !== 9.9) {
+ throw new Test262Error('#9: 9.9E0 === 9.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T1.js
new file mode 100644
index 0000000000..3c13bcbe3f
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T1
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+assert.throws(ReferenceError, function() {
+ e1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T2.js
new file mode 100644
index 0000000000..2b40f8f200
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T2.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T2
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+assert.throws(ReferenceError, function() {
+ E1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T3.js
new file mode 100644
index 0000000000..b9a8fa8867
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T3.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T3
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+assert.throws(ReferenceError, function() {
+ e-1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T4.js
new file mode 100644
index 0000000000..1b733e632d
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T4.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T4
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+assert.throws(ReferenceError, function() {
+ E-1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T5.js
new file mode 100644
index 0000000000..a68ab1bdc2
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T5.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T5
+description: "ExponentPart :: e DecimalDigits"
+---*/
+
+assert.throws(ReferenceError, function() {
+ e+1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T6.js
new file mode 100644
index 0000000000..5fdcdee4d5
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T6.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T6
+description: "ExponentPart :: E DecimalDigits"
+---*/
+
+assert.throws(ReferenceError, function() {
+ E+1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T7.js
new file mode 100644
index 0000000000..3c1ba69f05
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T7.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T7
+description: "ExponentPart :: e 0"
+---*/
+
+assert.throws(ReferenceError, function() {
+ e0
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T8.js
new file mode 100644
index 0000000000..27ee68030c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.1_T8.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: ExponentPart is incorrect"
+es5id: 7.8.3_A4.1_T8
+description: "ExponentPart :: E 0"
+---*/
+
+assert.throws(ReferenceError, function() {
+ E0
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T1.js
new file mode 100644
index 0000000000..70d8e5988b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T1.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T1
+description: "ExponentIndicator :: e"
+---*/
+
+//CHECK#0
+if (0e01 !== 0) {
+ throw new Test262Error('#0: 0e01 === 0');
+}
+
+//CHECK#1
+if (1e01 !== 10) {
+ throw new Test262Error('#1: 1e01 === 10');
+}
+
+//CHECK#2
+if (2e01 !== 20) {
+ throw new Test262Error('#2: 2e01 === 20');
+}
+
+//CHECK#3
+if (3e01 !== 30) {
+ throw new Test262Error('#3: 3e01 === 30');
+}
+
+//CHECK#4
+if (4e01 !== 40) {
+ throw new Test262Error('#4: 4e01 === 40');
+}
+
+//CHECK#5
+if (5e01 !== 50) {
+ throw new Test262Error('#5: 5e01 === 50');
+}
+
+//CHECK#6
+if (6e01 !== 60) {
+ throw new Test262Error('#6: 6e01 === 60');
+}
+
+//CHECK#7
+if (7e01 !== 70) {
+ throw new Test262Error('#7: 7e01 === 70');
+}
+
+//CHECK#8
+if (8e01 !== 80) {
+ throw new Test262Error('#8: 8e01 === 80');
+}
+
+//CHECK#9
+if (9e01 !== 90) {
+ throw new Test262Error('#9: 9e01 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T2.js
new file mode 100644
index 0000000000..49c54a842f
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T2.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T2
+description: "ExponentIndicator :: E"
+---*/
+
+//CHECK#0
+if (0E01 !== 0) {
+ throw new Test262Error('#0: 0E01 === 0');
+}
+
+//CHECK#1
+if (1E01 !== 10) {
+ throw new Test262Error('#1: 1E01 === 10');
+}
+
+//CHECK#2
+if (2E01 !== 20) {
+ throw new Test262Error('#2: 2E01 === 20');
+}
+
+//CHECK#3
+if (3E01 !== 30) {
+ throw new Test262Error('#3: 3E01 === 30');
+}
+
+//CHECK#4
+if (4E01 !== 40) {
+ throw new Test262Error('#4: 4E01 === 40');
+}
+
+//CHECK#5
+if (5E01 !== 50) {
+ throw new Test262Error('#5: 5E01 === 50');
+}
+
+//CHECK#6
+if (6E01 !== 60) {
+ throw new Test262Error('#6: 6E01 === 60');
+}
+
+//CHECK#7
+if (7E01 !== 70) {
+ throw new Test262Error('#7: 7E01 === 70');
+}
+
+//CHECK#8
+if (8E01 !== 80) {
+ throw new Test262Error('#8: 8E01 === 80');
+}
+
+//CHECK#9
+if (9E01 !== 90) {
+ throw new Test262Error('#9: 9E01 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T3.js
new file mode 100644
index 0000000000..d5766009fe
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T3.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T3
+description: "ExponentIndicator :: e"
+---*/
+
+//CHECK#0
+if (0e-01 !== 0) {
+ throw new Test262Error('#0: 0e-01 === 0');
+}
+
+//CHECK#1
+if (1e-01 !== 0.1) {
+ throw new Test262Error('#1: 1e-01 === 0.1');
+}
+
+//CHECK#2
+if (2e-01 !== 0.2) {
+ throw new Test262Error('#2: 2e-01 === 0.2');
+}
+
+//CHECK#3
+if (3e-01 !== 0.3) {
+ throw new Test262Error('#3: 3e-01 === 0.3');
+}
+
+//CHECK#4
+if (4e-01 !== 0.4) {
+ throw new Test262Error('#4: 4e-01 === 0.4');
+}
+
+//CHECK#5
+if (5e-01 !== 0.5) {
+ throw new Test262Error('#5: 5e-01 === 0.5');
+}
+
+//CHECK#6
+if (6e-01 !== 0.6) {
+ throw new Test262Error('#6: 6e-01 === 0.6');
+}
+
+//CHECK#7
+if (7e-01 !== 0.7) {
+ throw new Test262Error('#7: 7e-01 === 0.7');
+}
+
+//CHECK#8
+if (8e-01 !== 0.8) {
+ throw new Test262Error('#8: 8e-01 === 0.8');
+}
+
+//CHECK#9
+if (9e-01 !== 0.9) {
+ throw new Test262Error('#9: 9e-01 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T4.js
new file mode 100644
index 0000000000..1ae7a60f30
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T4.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T4
+description: "ExponentIndicator :: E"
+---*/
+
+//CHECK#0
+if (0E-01 !== 0) {
+ throw new Test262Error('#0: 0E-01 === 0');
+}
+
+//CHECK#1
+if (1E-01 !== 0.1) {
+ throw new Test262Error('#1: 1E-01 === 0.1');
+}
+
+//CHECK#2
+if (2E-01 !== 0.2) {
+ throw new Test262Error('#2: 2E-01 === 0.2');
+}
+
+//CHECK#3
+if (3E-01 !== 0.3) {
+ throw new Test262Error('#3: 3E-01 === 0.3');
+}
+
+//CHECK#4
+if (4E-01 !== 0.4) {
+ throw new Test262Error('#4: 4E-01 === 0.4');
+}
+
+//CHECK#5
+if (5E-01 !== 0.5) {
+ throw new Test262Error('#5: 5E-01 === 0.5');
+}
+
+//CHECK#6
+if (6E-01 !== 0.6) {
+ throw new Test262Error('#6: 6E-01 === 0.6');
+}
+
+//CHECK#7
+if (7E-01 !== 0.7) {
+ throw new Test262Error('#7: 7E-01 === 0.7');
+}
+
+//CHECK#8
+if (8E-01 !== 0.8) {
+ throw new Test262Error('#8: 8E-01 === 0.8');
+}
+
+//CHECK#9
+if (9E-01 !== 0.9) {
+ throw new Test262Error('#9: 9E-01 === 0.9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T5.js
new file mode 100644
index 0000000000..cff98be62d
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T5.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T5
+description: "ExponentIndicator :: e"
+---*/
+
+//CHECK#0
+if (0e+01 !== 0) {
+ throw new Test262Error('#0: 0e+01 === 0');
+}
+
+//CHECK#1
+if (1e+01 !== 10) {
+ throw new Test262Error('#1: 1e+01 === 10');
+}
+
+//CHECK#2
+if (2e+01 !== 20) {
+ throw new Test262Error('#2: 2e+01 === 20');
+}
+
+//CHECK#3
+if (3e+01 !== 30) {
+ throw new Test262Error('#3: 3e+01 === 30');
+}
+
+//CHECK#4
+if (4e+01 !== 40) {
+ throw new Test262Error('#4: 4e+01 === 40');
+}
+
+//CHECK#5
+if (5e+01 !== 50) {
+ throw new Test262Error('#5: 5e+01 === 50');
+}
+
+//CHECK#6
+if (6e+01 !== 60) {
+ throw new Test262Error('#6: 6e+01 === 60');
+}
+
+//CHECK#7
+if (7e+01 !== 70) {
+ throw new Test262Error('#7: 7e+01 === 70');
+}
+
+//CHECK#8
+if (8e+01 !== 80) {
+ throw new Test262Error('#8: 8e+01 === 80');
+}
+
+//CHECK#9
+if (9e+01 !== 90) {
+ throw new Test262Error('#9: 9e+01 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T6.js
new file mode 100644
index 0000000000..283738439c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T6.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T6
+description: "ExponentIndicator :: E"
+---*/
+
+//CHECK#0
+if (0E+01 !== 0) {
+ throw new Test262Error('#0: 0E+01 === 0');
+}
+
+//CHECK#1
+if (1E+01 !== 10) {
+ throw new Test262Error('#1: 1E+01 === 10');
+}
+
+//CHECK#2
+if (2E+01 !== 20) {
+ throw new Test262Error('#2: 2E+01 === 20');
+}
+
+//CHECK#3
+if (3E+01 !== 30) {
+ throw new Test262Error('#3: 3E+01 === 30');
+}
+
+//CHECK#4
+if (4E+01 !== 40) {
+ throw new Test262Error('#4: 4E+01 === 40');
+}
+
+//CHECK#5
+if (5E+01 !== 50) {
+ throw new Test262Error('#5: 5E+01 === 50');
+}
+
+//CHECK#6
+if (6E+01 !== 60) {
+ throw new Test262Error('#6: 6E+01 === 60');
+}
+
+//CHECK#7
+if (7E+01 !== 70) {
+ throw new Test262Error('#7: 7E+01 === 70');
+}
+
+//CHECK#8
+if (8E+01 !== 80) {
+ throw new Test262Error('#8: 8E+01 === 80');
+}
+
+//CHECK#9
+if (9E+01 !== 90) {
+ throw new Test262Error('#9: 9E+01 === 90');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T7.js
new file mode 100644
index 0000000000..203a0d5755
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T7.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T7
+description: "ExponentIndicator :: e"
+---*/
+
+//CHECK#0
+if (0e00 !== 0) {
+ throw new Test262Error('#0: 0e00 === 0');
+}
+
+//CHECK#1
+if (1e00 !== 1) {
+ throw new Test262Error('#1: 1e00 === 1');
+}
+
+//CHECK#2
+if (2e00 !== 2) {
+ throw new Test262Error('#2: 2e00 === 2');
+}
+
+//CHECK#3
+if (3e00 !== 3) {
+ throw new Test262Error('#3: 3e00 === 3');
+}
+
+//CHECK#4
+if (4e00 !== 4) {
+ throw new Test262Error('#4: 4e00 === 4');
+}
+
+//CHECK#5
+if (5e00 !== 5) {
+ throw new Test262Error('#5: 5e00 === 5');
+}
+
+//CHECK#6
+if (6e00 !== 6) {
+ throw new Test262Error('#6: 6e00 === 6');
+}
+
+//CHECK#7
+if (7e00 !== 7) {
+ throw new Test262Error('#7: 7e00 === 7');
+}
+
+//CHECK#8
+if (8e00 !== 8) {
+ throw new Test262Error('#8: 8e00 === 8');
+}
+
+//CHECK#9
+if (9e00 !== 9) {
+ throw new Test262Error('#9: 9e00 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T8.js
new file mode 100644
index 0000000000..3f78f22eb4
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A4.2_T8.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed"
+es5id: 7.8.3_A4.2_T8
+description: "ExponentIndicator :: E"
+---*/
+
+//CHECK#0
+if (0E00 !== 0) {
+ throw new Test262Error('#0: 0E00 === 0');
+}
+
+//CHECK#1
+if (1E00 !== 1) {
+ throw new Test262Error('#1: 1E00 === 1');
+}
+
+//CHECK#2
+if (2E00 !== 2) {
+ throw new Test262Error('#2: 2E00 === 2');
+}
+
+//CHECK#3
+if (3E00 !== 3) {
+ throw new Test262Error('#3: 3E00 === 3');
+}
+
+//CHECK#4
+if (4E00 !== 4) {
+ throw new Test262Error('#4: 4E00 === 4');
+}
+
+//CHECK#5
+if (5E00 !== 5) {
+ throw new Test262Error('#5: 5E00 === 5');
+}
+
+//CHECK#6
+if (6E00 !== 6) {
+ throw new Test262Error('#6: 6E00 === 6');
+}
+
+//CHECK#7
+if (7E00 !== 7) {
+ throw new Test262Error('#7: 7E00 === 7');
+}
+
+//CHECK#8
+if (8E00 !== 8) {
+ throw new Test262Error('#8: 8E00 === 8');
+}
+
+//CHECK#9
+if (9E00 !== 9) {
+ throw new Test262Error('#9: 9E00 === 9');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T1.js
new file mode 100644
index 0000000000..bade3bfa3e
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T1.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T1
+description: "HexIntegerLiteral :: 0x Digit"
+---*/
+
+//CHECK#0
+if (0x0 !== 0) {
+ throw new Test262Error('#0: 0x0 === 0');
+}
+
+//CHECK#1
+if (0x1 !== 1) {
+ throw new Test262Error('#1: 0x1 === 1');
+}
+
+//CHECK#2
+if (0x2 !== 2) {
+ throw new Test262Error('#2: 0x2 === 2');
+}
+
+//CHECK#3
+if (0x3 !== 3) {
+ throw new Test262Error('#3: 0x3 === 3');
+}
+
+//CHECK#4
+if (0x4 !== 4) {
+ throw new Test262Error('#4: 0x4 === 4');
+}
+
+//CHECK#5
+if (0x5 !== 5) {
+ throw new Test262Error('#5: 0x5 === 5');
+}
+
+//CHECK#6
+if (0x6 !== 6) {
+ throw new Test262Error('#6: 0x6 === 6');
+}
+
+//CHECK#7
+if (0x7 !== 7) {
+ throw new Test262Error('#7: 0x7 === 7');
+}
+
+//CHECK#8
+if (0x8 !== 8) {
+ throw new Test262Error('#8: 0x8 === 8');
+}
+
+//CHECK#9
+if (0x9 !== 9) {
+ throw new Test262Error('#9: 0x9 === 9');
+}
+
+//CHECK#A
+if (0xA !== 10) {
+ throw new Test262Error('#A: 0xA === 10');
+}
+
+//CHECK#B
+if (0xB !== 11) {
+ throw new Test262Error('#B: 0xB === 11');
+}
+
+//CHECK#C
+if (0xC !== 12) {
+ throw new Test262Error('#C: 0xC === 12');
+}
+
+//CHECK#D
+if (0xD !== 13) {
+ throw new Test262Error('#D: 0xD === 13');
+}
+
+//CHECK#E
+if (0xE !== 14) {
+ throw new Test262Error('#E: 0xE === 14');
+}
+
+//CHECK#F
+if (0xF !== 15) {
+ throw new Test262Error('#F: 0xF === 15');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T2.js
new file mode 100644
index 0000000000..2a7c77cfb1
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T2.js
@@ -0,0 +1,90 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T2
+description: "HexIntegerLiteral :: 0X Digit"
+---*/
+
+//CHECK#0
+if (0X0 !== 0) {
+ throw new Test262Error('#0: 0X0 === 0');
+}
+
+//CHECK#1
+if (0X1 !== 1) {
+ throw new Test262Error('#1: 0X1 === 1');
+}
+
+//CHECK#2
+if (0X2 !== 2) {
+ throw new Test262Error('#2: 0X2 === 2');
+}
+
+//CHECK#3
+if (0X3 !== 3) {
+ throw new Test262Error('#3: 0X3 === 3');
+}
+
+//CHECK#4
+if (0X4 !== 4) {
+ throw new Test262Error('#4: 0X4 === 4');
+}
+
+//CHECK#5
+if (0X5 !== 5) {
+ throw new Test262Error('#5: 0X5 === 5');
+}
+
+//CHECK#6
+if (0X6 !== 6) {
+ throw new Test262Error('#6: 0X6 === 6');
+}
+
+//CHECK#7
+if (0X7 !== 7) {
+ throw new Test262Error('#7: 0X7 === 7');
+}
+
+//CHECK#8
+if (0X8 !== 8) {
+ throw new Test262Error('#8: 0X8 === 8');
+}
+
+//CHECK#9
+if (0X9 !== 9) {
+ throw new Test262Error('#9: 0X9 === 9');
+}
+
+//CHECK#A
+if (0XA !== 10) {
+ throw new Test262Error('#A: 0XA === 10');
+}
+
+//CHECK#B
+if (0XB !== 11) {
+ throw new Test262Error('#B: 0XB === 11');
+}
+
+//CHECK#C
+if (0XC !== 12) {
+ throw new Test262Error('#C: 0XC === 12');
+}
+
+//CHECK#D
+if (0XD !== 13) {
+ throw new Test262Error('#D: 0XD === 13');
+}
+
+//CHECK#E
+if (0XE !== 14) {
+ throw new Test262Error('#E: 0XE === 14');
+}
+
+//CHECK#F
+if (0XF !== 15) {
+ throw new Test262Error('#F: 0XF === 15');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T3.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T3.js
new file mode 100644
index 0000000000..638d8a5c9b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T3.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T3
+description: "HexIntegerLiteral :: 0x NonZeroDigit Digits"
+---*/
+
+//CHECK#0
+if (0x0 !== 0) {
+ throw new Test262Error('#0: 0x0 === 0');
+}
+
+//CHECK#1
+if (0x1 !== 1) {
+ throw new Test262Error('#1: 0x1 === 1');
+}
+
+//CHECK#2
+if (0x10 !== 16) {
+ throw new Test262Error('#2: 0x10 === 16');
+}
+
+//CHECK3
+if (0x100 !== 256) {
+ throw new Test262Error('3: 0x100 === 256');
+}
+
+//CHECK#4
+if (0x1000 !== 4096) {
+ throw new Test262Error('#4: 0x1000 === 4096');
+}
+
+//CHECK#5
+if (0x10000 !== 65536) {
+ throw new Test262Error('#5: 0x10000 === 65536');
+}
+
+//CHECK#6
+if (0x100000 !== 1048576) {
+ throw new Test262Error('#6: 0x100000 === 1048576');
+}
+
+//CHECK#7
+if (0x1000000 !== 16777216) {
+ throw new Test262Error('#7: 0x1000000 === 16777216');
+}
+
+//CHECK#8
+if (0x10000000 !== 268435456) {
+ throw new Test262Error('#8: 0x10000000 === 268435456');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T4.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T4.js
new file mode 100644
index 0000000000..4dbd2cf6be
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T4.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T4
+description: "HexIntegerLiteral :: 0X NonZeroDigit Digits"
+---*/
+
+//CHECK#0
+if (0X0 !== 0) {
+ throw new Test262Error('#0: 0X0 === 0');
+}
+
+//CHECK#1
+if (0X1 !== 1) {
+ throw new Test262Error('#1: 0X1 === 1');
+}
+
+//CHECK#2
+if (0X10 !== 16) {
+ throw new Test262Error('#2: 0X10 === 16');
+}
+
+//CHECK3
+if (0X100 !== 256) {
+ throw new Test262Error('3: 0X100 === 256');
+}
+
+//CHECK#4
+if (0X1000 !== 4096) {
+ throw new Test262Error('#4: 0X1000 === 4096');
+}
+
+//CHECK#5
+if (0X10000 !== 65536) {
+ throw new Test262Error('#5: 0X10000 === 65536');
+}
+
+//CHECK#6
+if (0X100000 !== 1048576) {
+ throw new Test262Error('#6: 0X100000 === 1048576');
+}
+
+//CHECK#7
+if (0X1000000 !== 16777216) {
+ throw new Test262Error('#7: 0X1000000 === 16777216');
+}
+
+//CHECK#8
+if (0X10000000 !== 268435456) {
+ throw new Test262Error('#8: 0X10000000 === 268435456');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T5.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T5.js
new file mode 100644
index 0000000000..84a6134710
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T5.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T5
+description: "HexIntegerLiteral :: 0x0 Digits"
+---*/
+
+//CHECK#0
+if (0x00 !== 0) {
+ throw new Test262Error('#0: 0x00 === 0');
+}
+
+//CHECK#1
+if (0x01 !== 1) {
+ throw new Test262Error('#1: 0x01 === 1');
+}
+
+//CHECK#2
+if (0x010 !== 16) {
+ throw new Test262Error('#2: 0x010 === 16');
+}
+
+//CHECK3
+if (0x0100 !== 256) {
+ throw new Test262Error('3: 0x0100 === 256');
+}
+
+//CHECK#4
+if (0x01000 !== 4096) {
+ throw new Test262Error('#4: 0x01000 === 4096');
+}
+
+//CHECK#5
+if (0x010000 !== 65536) {
+ throw new Test262Error('#5: 0x010000 === 65536');
+}
+
+//CHECK#6
+if (0x0100000 !== 1048576) {
+ throw new Test262Error('#6: 0x0100000 === 1048576');
+}
+
+//CHECK#7
+if (0x01000000 !== 16777216) {
+ throw new Test262Error('#7: 0x01000000 === 16777216');
+}
+
+//CHECK#8
+if (0x010000000 !== 268435456) {
+ throw new Test262Error('#8: 0x010000000 === 268435456');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T6.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T6.js
new file mode 100644
index 0000000000..76e24379f0
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T6.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T6
+description: "HexIntegerLiteral :: 0X0 Digits"
+---*/
+
+//CHECK#0
+if (0X00 !== 0) {
+ throw new Test262Error('#0: 0X00 === 0');
+}
+
+//CHECK#1
+if (0X01 !== 1) {
+ throw new Test262Error('#1: 0X01 === 1');
+}
+
+//CHECK#2
+if (0X010 !== 16) {
+ throw new Test262Error('#2: 0X010 === 16');
+}
+
+//CHECK3
+if (0X0100 !== 256) {
+ throw new Test262Error('3: 0X0100 === 256');
+}
+
+//CHECK#4
+if (0X01000 !== 4096) {
+ throw new Test262Error('#4: 0X01000 === 4096');
+}
+
+//CHECK#5
+if (0X010000 !== 65536) {
+ throw new Test262Error('#5: 0X010000 === 65536');
+}
+
+//CHECK#6
+if (0X0100000 !== 1048576) {
+ throw new Test262Error('#6: 0X0100000 === 1048576');
+}
+
+//CHECK#7
+if (0X01000000 !== 16777216) {
+ throw new Test262Error('#7: 0X01000000 === 16777216');
+}
+
+//CHECK#8
+if (0X010000000 !== 268435456) {
+ throw new Test262Error('#8: 0X010000000 === 268435456');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T7.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T7.js
new file mode 100644
index 0000000000..cc9cb770db
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T7.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T7
+description: "HexIntegerLiteral :: 0x one of a, b, c, d, e, f"
+---*/
+
+//CHECK#a
+if (0xa !== 10) {
+ throw new Test262Error('#a: 0xa === 10');
+}
+
+//CHECK#b
+if (0xb !== 11) {
+ throw new Test262Error('#b: 0xb === 11');
+}
+
+//CHECK#c
+if (0xc !== 12) {
+ throw new Test262Error('#c: 0xc === 12');
+}
+
+//CHECK#d
+if (0xd !== 13) {
+ throw new Test262Error('#d: 0xd === 13');
+}
+
+//CHECK#e
+if (0xe !== 14) {
+ throw new Test262Error('#e: 0xe === 14');
+}
+
+//CHECK#f
+if (0xf !== 15) {
+ throw new Test262Error('#f: 0xf === 15');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T8.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T8.js
new file mode 100644
index 0000000000..76d412fd99
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A5.1_T8.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalLiteral :: HexIntegerLiteral"
+es5id: 7.8.3_A5.1_T8
+description: "HexIntegerLiteral :: 0X one of a, b, c, d, e, f"
+---*/
+
+//CHECK#a
+if (0Xa !== 10) {
+ throw new Test262Error('#a: 0Xa === 10');
+}
+
+//CHECK#b
+if (0Xb !== 11) {
+ throw new Test262Error('#b: 0Xb === 11');
+}
+
+//CHECK#c
+if (0Xc !== 12) {
+ throw new Test262Error('#c: 0Xc === 12');
+}
+
+//CHECK#d
+if (0Xd !== 13) {
+ throw new Test262Error('#d: 0Xd === 13');
+}
+
+//CHECK#e
+if (0Xe !== 14) {
+ throw new Test262Error('#e: 0Xe === 14');
+}
+
+//CHECK#f
+if (0Xf !== 15) {
+ throw new Test262Error('#f: 0Xf === 15');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T1.js
new file mode 100644
index 0000000000..eb2a0d68d1
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T1.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "HexIntegerLiteral :: 0(x/X) is incorrect"
+es5id: 7.8.3_A6.1_T1
+description: Checking if execution of "0x" passes
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+//CHECK#1
+0x
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T2.js
new file mode 100644
index 0000000000..36b4f06232
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.1_T2.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "HexIntegerLiteral :: 0(x/X) is incorrect"
+es5id: 7.8.3_A6.1_T2
+description: Checking if execution of "0X" passes
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+//CHECK#1
+0X
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T1.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T1.js
new file mode 100644
index 0000000000..72c9e31931
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T1.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: 0xG is incorrect
+es5id: 7.8.3_A6.2_T1
+description: Checking if execution of "0xG" fails
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+//CHECK#1
+0xG
diff --git a/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T2.js b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T2.js
new file mode 100644
index 0000000000..bdbb44e13f
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/S7.8.3_A6.2_T2.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: 0xG is incorrect
+es5id: 7.8.3_A6.2_T2
+description: Checking if execution of "0xg" fails
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+//CHECK#1
+0xg
diff --git a/js/src/tests/test262/language/literals/numeric/binary-invalid-digit.js b/js/src/tests/test262/language/literals/numeric/binary-invalid-digit.js
new file mode 100644
index 0000000000..6686982745
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/binary-invalid-digit.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Binary-integer-literal-like sequence containing an invalid digit
+info: |
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigit :: one of
+ 0 1
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+0b2;
diff --git a/js/src/tests/test262/language/literals/numeric/binary-invalid-leading.js b/js/src/tests/test262/language/literals/numeric/binary-invalid-leading.js
new file mode 100644
index 0000000000..3389211f68
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/binary-invalid-leading.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Binary-integer-literal-like sequence with a leading 0
+info: |
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigit :: one of
+ 0 1
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+00b0;
diff --git a/js/src/tests/test262/language/literals/numeric/binary-invalid-truncated.js b/js/src/tests/test262/language/literals/numeric/binary-invalid-truncated.js
new file mode 100644
index 0000000000..e5e1428f0e
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/binary-invalid-truncated.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Binary-integer-literal-like sequence without any digits
+info: |
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigit :: one of
+ 0 1
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+0b;
diff --git a/js/src/tests/test262/language/literals/numeric/binary-invalid-unicode.js b/js/src/tests/test262/language/literals/numeric/binary-invalid-unicode.js
new file mode 100644
index 0000000000..e6ec183806
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/binary-invalid-unicode.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Binary-integer-literal-like sequence expressed with unicode escape sequence
+info: |
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigit :: one of
+ 0 1
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+0\u00620;
diff --git a/js/src/tests/test262/language/literals/numeric/binary.js b/js/src/tests/test262/language/literals/numeric/binary.js
new file mode 100644
index 0000000000..703e64bd14
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/binary.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3.1
+description: Mathematical value of valid binary integer literals
+info: |
+ The MV of BinaryIntegerLiteral :: 0b BinaryDigits is the MV of
+ BinaryDigits.
+ The MV of BinaryIntegerLiteral :: 0B BinaryDigits is the MV of
+ BinaryDigits.
+ The MV of BinaryDigits :: BinaryDigit is the MV of BinaryDigit.
+ The MV of BinaryDigits :: BinaryDigits BinaryDigit is (the MV of
+ BinaryDigits × 2) plus the MV of BinaryDigit.
+---*/
+
+assert.sameValue(0b0, 0, 'lower-case head');
+assert.sameValue(0B0, 0, 'upper-case head');
+assert.sameValue(0b00, 0, 'lower-case head with leading zeros');
+assert.sameValue(0B00, 0, 'upper-case head with leading zeros');
+
+assert.sameValue(0b1, 1, 'lower-case head');
+assert.sameValue(0B1, 1, 'upper-case head');
+assert.sameValue(0b01, 1, 'lower-case head with leading zeros');
+assert.sameValue(0B01, 1, 'upper-case head with leading zeros');
+
+assert.sameValue(0b10, 2, 'lower-case head');
+assert.sameValue(0B10, 2, 'upper-case head');
+assert.sameValue(0b010, 2, 'lower-case head with leading zeros');
+assert.sameValue(0B010, 2, 'upper-case head with leading zeros');
+
+assert.sameValue(0b11, 3, 'lower-case head');
+assert.sameValue(0B11, 3, 'upper-case head');
+assert.sameValue(0b011, 3, 'lower-case head with leading zeros');
+assert.sameValue(0B011, 3, 'upper-case head with leading zeros');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/browser.js b/js/src/tests/test262/language/literals/numeric/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/browser.js
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integer-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integer-strict-strict.js
new file mode 100644
index 0000000000..485c78172c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integer-strict-strict.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-literals-numeric-literals
+description: LegacyOctalIntegerLiteral is not enabled in strict mode code
+info: |
+ NumericLiteral ::
+ DecimalLiteral
+ BinaryIntegerLiteral
+ OctalIntegerLiteral
+ HexIntegerLiteral
+ LegacyOctalIntegerLiteral
+
+ LegacyOctalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalIntegerLiteral OctalDigit
+
+ ## 12.8.3.1 Static Semantics: Early Errors
+
+ NumericLiteral :: LegacyOctalIntegerLiteral
+ DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral
+
+ - It is a Syntax Error if the source code matching this production is
+ strict mode code.
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+00;
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integer.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integer.js
new file mode 100644
index 0000000000..aba9fb5866
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integer.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-literals-numeric-literals
+description: Mathematical value for LegacyOctalIntegerLiteral
+info: |
+ NumericLiteral ::
+ DecimalLiteral
+ BinaryIntegerLiteral
+ OctalIntegerLiteral
+ HexIntegerLiteral
+ LegacyOctalIntegerLiteral
+
+ LegacyOctalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalIntegerLiteral OctalDigit
+flags: [noStrict]
+---*/
+
+// LegacyOctalIntegerLiteral ::
+// 0 OctalDigit
+assert.sameValue(00, 0, '00');
+assert.sameValue(01, 1, '01');
+assert.sameValue(02, 2, '02');
+assert.sameValue(03, 3, '03');
+assert.sameValue(04, 4, '04');
+assert.sameValue(05, 5, '05');
+assert.sameValue(06, 6, '06');
+assert.sameValue(07, 7, '07');
+
+// LegacyOctalIntegerLiteral ::
+// LegacyOctalIntegerLiteral OctalDigit
+assert.sameValue(000, 0, '000');
+assert.sameValue(001, 1, '001');
+assert.sameValue(002, 2, '002');
+assert.sameValue(003, 3, '003');
+assert.sameValue(004, 4, '004');
+assert.sameValue(005, 5, '005');
+assert.sameValue(006, 6, '006');
+assert.sameValue(007, 7, '007');
+
+assert.sameValue(070, 56);
+assert.sameValue(071, 57);
+assert.sameValue(072, 58);
+assert.sameValue(073, 59);
+assert.sameValue(074, 60);
+assert.sameValue(075, 61);
+assert.sameValue(076, 62);
+assert.sameValue(077, 63);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-000-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-000-strict-strict.js
new file mode 100644
index 0000000000..a326471ba6
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-000-strict-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-6-s
+description: Strict Mode - octal extension (000) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+000;
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-005-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-005-strict-strict.js
new file mode 100644
index 0000000000..de9a6d702b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-005-strict-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-7-s
+description: Strict Mode - octal extension (005) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+005;
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-01-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-01-strict-strict.js
new file mode 100644
index 0000000000..d7d62d64d3
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-01-strict-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-3-s
+description: Strict Mode - octal extension (01) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+01;
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-010-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-010-strict-strict.js
new file mode 100644
index 0000000000..41de0398b4
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-010-strict-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-1-s
+description: Strict Mode - octal extension (010) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+010;
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-06-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-06-strict-strict.js
new file mode 100644
index 0000000000..706920d538
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-06-strict-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-4-s
+description: Strict Mode - octal extension (06) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+06;
diff --git a/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-07-strict-strict.js b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-07-strict-strict.js
new file mode 100644
index 0000000000..0238a5d60f
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/legacy-octal-integery-07-strict-strict.js
@@ -0,0 +1,17 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 7.8.3-5-s
+description: Strict Mode - octal extension (07) is forbidden in strict mode
+negative:
+ phase: parse
+ type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+$DONOTEVALUATE();
+
+07;
diff --git a/js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer-strict-strict.js b/js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer-strict-strict.js
new file mode 100644
index 0000000000..59b0f802d6
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer-strict-strict.js
@@ -0,0 +1,41 @@
+// |reftest| error:SyntaxError
+'use strict';
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-literals-numeric-literals
+description: NonOctalDecimalIntegerLiteral is not enabled in strict mode code
+info: |
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigits[opt]
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit :: one of
+ 8 9
+
+ ## 12.8.3.1 Static Semantics: Early Errors
+
+ NumericLiteral :: LegacyOctalIntegerLiteral
+ DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral
+
+ - It is a Syntax Error if the source code matching this production is
+ strict mode code.
+flags: [onlyStrict]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+08;
diff --git a/js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer.js b/js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer.js
new file mode 100644
index 0000000000..e8ec539f21
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/non-octal-decimal-integer.js
@@ -0,0 +1,121 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-literals-numeric-literals
+description: Mathematical value for NonOctalDecimalIntegerLiteral
+info: |
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigits[opt]
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit :: one of
+ 8 9
+flags: [noStrict]
+---*/
+
+// NonOctalDecimalIntegerLiteral ::
+// 0 NonOctalDigit
+assert.sameValue(08, 8, '08');
+assert.sameValue(09, 9, '09');
+
+// NonOctalDecimalIntegerLiteral ::
+// LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+assert.sameValue(008, 8, '008');
+assert.sameValue(018, 18, '018');
+assert.sameValue(028, 28, '028');
+assert.sameValue(038, 38, '038');
+assert.sameValue(048, 48, '048');
+assert.sameValue(058, 58, '058');
+assert.sameValue(068, 68, '068');
+assert.sameValue(078, 78, '078');
+assert.sameValue(088, 88, '088');
+assert.sameValue(098, 98, '098');
+assert.sameValue(0708, 708, '708');
+assert.sameValue(0718, 718, '718');
+assert.sameValue(0728, 728, '728');
+assert.sameValue(0738, 738, '738');
+assert.sameValue(0748, 748, '748');
+assert.sameValue(0758, 758, '758');
+assert.sameValue(0768, 768, '768');
+assert.sameValue(0778, 778, '778');
+assert.sameValue(0788, 788, '788');
+assert.sameValue(0798, 798, '798');
+
+assert.sameValue(009, 9, '009');
+assert.sameValue(019, 19, '019');
+assert.sameValue(029, 29, '029');
+assert.sameValue(039, 39, '039');
+assert.sameValue(049, 49, '049');
+assert.sameValue(059, 59, '059');
+assert.sameValue(069, 69, '069');
+assert.sameValue(079, 79, '079');
+assert.sameValue(089, 89, '089');
+assert.sameValue(099, 99, '099');
+assert.sameValue(0709, 709, '0709');
+assert.sameValue(0719, 719, '0719');
+assert.sameValue(0729, 729, '0729');
+assert.sameValue(0739, 739, '0739');
+assert.sameValue(0749, 749, '0749');
+assert.sameValue(0759, 759, '0759');
+assert.sameValue(0769, 769, '0769');
+assert.sameValue(0779, 779, '0779');
+assert.sameValue(0789, 789, '0789');
+assert.sameValue(0799, 799, '0799');
+
+// NonOctalDecimalIntegerLiteral ::
+// NonOctalDecimalIntegerLiteral DecimalDigit
+assert.sameValue(080, 80, '080');
+assert.sameValue(081, 81, '081');
+assert.sameValue(082, 82, '082');
+assert.sameValue(083, 83, '083');
+assert.sameValue(084, 84, '084');
+assert.sameValue(085, 85, '085');
+assert.sameValue(086, 86, '086');
+assert.sameValue(087, 87, '087');
+assert.sameValue(088, 88, '088');
+assert.sameValue(089, 89, '089');
+
+assert.sameValue(0780, 780, '0780');
+assert.sameValue(0781, 781, '0781');
+assert.sameValue(0782, 782, '0782');
+assert.sameValue(0783, 783, '0783');
+assert.sameValue(0784, 784, '0784');
+assert.sameValue(0785, 785, '0785');
+assert.sameValue(0786, 786, '0786');
+assert.sameValue(0787, 787, '0787');
+assert.sameValue(0788, 788, '0788');
+assert.sameValue(0789, 789, '0789');
+
+assert.sameValue(090, 90, '090');
+assert.sameValue(091, 91, '091');
+assert.sameValue(092, 92, '092');
+assert.sameValue(093, 93, '093');
+assert.sameValue(094, 94, '094');
+assert.sameValue(095, 95, '095');
+assert.sameValue(096, 96, '096');
+assert.sameValue(097, 97, '097');
+assert.sameValue(098, 98, '098');
+assert.sameValue(099, 99, '099');
+
+assert.sameValue(0790, 790, '0790');
+assert.sameValue(0791, 791, '0791');
+assert.sameValue(0792, 792, '0792');
+assert.sameValue(0793, 793, '0793');
+assert.sameValue(0794, 794, '0794');
+assert.sameValue(0795, 795, '0795');
+assert.sameValue(0796, 796, '0796');
+assert.sameValue(0797, 797, '0797');
+assert.sameValue(0798, 798, '0798');
+assert.sameValue(0799, 799, '0799');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-followed-by-ident.js b/js/src/tests/test262/language/literals/numeric/numeric-followed-by-ident.js
new file mode 100644
index 0000000000..d4b0d41529
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-followed-by-ident.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2018 Mozilla. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-literals-numeric-literals
+description: >
+ NumericLiteral followed by IdentifierStart
+info: |
+ The source character immediately following a NumericLiteral must not be an IdentifierStart or DecimalDigit.
+
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+3in []
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/browser.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/browser.js
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd-err.js
new file mode 100644
index 0000000000..51787b6282
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the appear adjacent to `0b` | `0B` in a
+ BinaryIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0b_1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd.js
new file mode 100644
index 0000000000..f00a1b4244
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bd.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0b` | `0B` BinaryDigit NumericLiteralSeparator BinaryDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0b0_1, 0b01);
+assert.sameValue(0B0_1, 0B01);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bds.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bds.js
new file mode 100644
index 0000000000..c5bc6ceaa4
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bd-nsl-bds.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0b` | `0B` BinaryDigit NumericLiteralSeparator BinaryDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0b0_10, 0b010);
+assert.sameValue(0B0_10, 0B010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bd.js
new file mode 100644
index 0000000000..a1f65b2427
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bd.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0b` | `0B` BinaryDigits NumericLiteralSeparator BinaryDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0b01_0, 0b010);
+assert.sameValue(0B01_0, 0B010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bds.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bds.js
new file mode 100644
index 0000000000..13d7e59684
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-bds-nsl-bds.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0b` | `0B` BinaryDigits NumericLiteralSeparator BinaryDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0b01_00, 0b0100);
+assert.sameValue(0B01_00, 0B0100);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-dunder-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-dunder-err.js
new file mode 100644
index 0000000000..776f3f7479
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-dunder-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to another
+ NumericLiteralSeparator in a BinaryIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0b0__0
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-err.js
new file mode 100644
index 0000000000..2aa643f897
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-bil-nsl-bd-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character of a
+ BinaryIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ BinaryIntegerLiteral ::
+ 0b BinaryDigits
+ 0B BinaryDigits
+
+ BinaryDigits ::
+ BinaryDigit
+ BinaryDigits BinaryDigit
+ BinaryDigits NumericLiteralSeparator BinaryDigit
+
+ BinaryDigit :: one of
+ 0 1
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0b0_
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dd-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dd-nsl-dd.js
new file mode 100644
index 0000000000..1e73a38078
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dd-nsl-dd.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ DecimalDigits `.` DecimalDigits ExponentPart_opt `-` DecimalDigits
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ SignedInteger ::
+ ...
+ - DecimalDigits
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1.0e-1_0, 1.0e-10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dds-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dds-nsl-dd.js
new file mode 100644
index 0000000000..cffca45eb8
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-minus-dds-nsl-dd.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ DecimalDigits `.` DecimalDigits ExponentPart_opt `-` DecimalDigits
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ SignedInteger ::
+ ...
+ - DecimalDigits
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1.0e-10_0, 1.0e-100);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dd-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dd-nsl-dd.js
new file mode 100644
index 0000000000..116c8541f7
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dd-nsl-dd.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ DecimalDigits `.` DecimalDigits ExponentPart_opt `+` DecimalDigits
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ SignedInteger ::
+ ...
+ + DecimalDigits
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1.0e+1_0, 1.0e+10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dds-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dds-nsl-dd.js
new file mode 100644
index 0000000000..a80cc8dfab
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-dot-dd-ep-sign-plus-dds-nsl-dd.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ DecimalDigits `.` DecimalDigits ExponentPart_opt `+` DecimalDigits
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ SignedInteger ::
+ ...
+ + DecimalDigits
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1.0e+10_0, 1.0e+100);
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dd-one-of.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dd-one-of.js
new file mode 100644
index 0000000000..1de1863fc1
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dd-one-of.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: NonZeroDigit NumericLiteralSeparator DecimalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+
+ DecimalDigits ::
+ DecimalDigit
+ ...
+
+ DecimalDigit :: one of
+ 0 1 2 3 4 5 6 7 8 9
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1_0, 10);
+assert.sameValue(1_1, 11);
+assert.sameValue(1_2, 12);
+assert.sameValue(1_3, 13);
+assert.sameValue(1_4, 14);
+assert.sameValue(1_5, 15);
+assert.sameValue(1_6, 16);
+assert.sameValue(1_7, 17);
+assert.sameValue(1_8, 18);
+assert.sameValue(1_9, 19);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dds-dunder-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dds-dunder-err.js
new file mode 100644
index 0000000000..dacdaa8a01
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-dds-dunder-err.js
@@ -0,0 +1,27 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to another
+ NumericLiteralSeparator in a DecimalIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+1__0123456789
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-err.js
new file mode 100644
index 0000000000..131058047b
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dd-nsl-err.js
@@ -0,0 +1,29 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+1_
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-dot-dd-nsl-dd-ep-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-dot-dd-nsl-dd-ep-dd.js
new file mode 100644
index 0000000000..33c08b310c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-dot-dd-nsl-dd-ep-dd.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ DecimalDigits `.` DecimalDigits NumericLiteralSeparator DecimalDigits
+ ExponentPart SignedInteger
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(10.00_01e2, 10.0001e2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dd.js
new file mode 100644
index 0000000000..30f2f323ed
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dd.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: DecimalDigits NumericLiteralSeparator DecimalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(123456789_0, 1234567890);
+assert.sameValue(123456789_1, 1234567891);
+assert.sameValue(123456789_2, 1234567892);
+assert.sameValue(123456789_3, 1234567893);
+assert.sameValue(123456789_4, 1234567894);
+assert.sameValue(123456789_5, 1234567895);
+assert.sameValue(123456789_6, 1234567896);
+assert.sameValue(123456789_7, 1234567897);
+assert.sameValue(123456789_8, 1234567898);
+assert.sameValue(123456789_9, 1234567899);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dds-dunder-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dds-dunder-err.js
new file mode 100644
index 0000000000..226c3dd37c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-dds-dunder-err.js
@@ -0,0 +1,27 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to another
+ NumericLiteralSeparator in DecimalIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+10__0123456789
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-err.js
new file mode 100644
index 0000000000..85da0a51ee
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dds-nsl-err.js
@@ -0,0 +1,30 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character of a
+ DecimalLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+10_
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-dds-nsl-ep-dd-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-dds-nsl-ep-dd-err.js
new file mode 100644
index 0000000000..d5c9e826ae
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-dds-nsl-ep-dd-err.js
@@ -0,0 +1,29 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+10.0_e1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-dd-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-dd-err.js
new file mode 100644
index 0000000000..5edda2bb20
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-dd-err.js
@@ -0,0 +1,29 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be adjacent to `.`
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+10._1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-ep-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-ep-err.js
new file mode 100644
index 0000000000..983493cdcb
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-ep-err.js
@@ -0,0 +1,32 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear between `.` and ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+10._e1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-err.js
new file mode 100644
index 0000000000..945ff12dab
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dil-dot-nsl-err.js
@@ -0,0 +1,30 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character of a
+ DecimalLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ DecimalIntegerLiteral . DecimalDigits_opt ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+10._
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dd-ep.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dd-ep.js
new file mode 100644
index 0000000000..e5d762fe89
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dd-ep.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `.` DecimalDigit NumericLiteralSeparator DecimalDigit ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ DecimalDigit
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(.0_1e2, .01e2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dds-ep.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dds-ep.js
new file mode 100644
index 0000000000..79ff43a088
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dd-nsl-dds-ep.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `.` DecimalDigit NumericLiteralSeparator DecimalDigits ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ DecimalDigit
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(.1_01e2, .101e2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dd-ep.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dd-ep.js
new file mode 100644
index 0000000000..ebe3f3a1dd
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dd-ep.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `.` DecimalDigits NumericLiteralSeparator DecimalDigit ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ DecimalDigit
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(.10_1e2, .101e2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dds-ep.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dds-ep.js
new file mode 100644
index 0000000000..4b0183f351
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-dds-ep.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `.` DecimalDigits NumericLiteralSeparator DecimalDigits ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ DecimalDigit
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(.00_01e2, .0001e2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-ep-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-ep-err.js
new file mode 100644
index 0000000000..6b193eaaad
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-dds-nsl-ep-err.js
@@ -0,0 +1,31 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: NumericLiteralSeparator may not appear adjacent to ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+.0_e1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-ep-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-ep-err.js
new file mode 100644
index 0000000000..f47aa6ed58
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-ep-err.js
@@ -0,0 +1,32 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear between `.` and ExponentPart
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+ ExponentIndicator :: one of
+ e E
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+._e1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-err.js
new file mode 100644
index 0000000000..cc385aef6c
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-dot-nsl-err.js
@@ -0,0 +1,30 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character of a
+ DecimalLiteral, nor adjacent to `.`
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalLiteral ::
+ . DecimalDigits ExponentPart_opt
+
+ DecimalDigits ::
+ ...
+ DecimalDigits NumericLiteralSeparator DecimalDigit
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+._
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd-err.js
new file mode 100644
index 0000000000..ddbc8bfda1
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the appear adjacent to `0x` | `0X` in a
+ HexIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0x_1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd.js
new file mode 100644
index 0000000000..fa6449bf89
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hd.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0x` | `0X` HexDigit NumericLiteralSeparator HexDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0x0_1, 0x01);
+assert.sameValue(0X0_1, 0X01);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hds.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hds.js
new file mode 100644
index 0000000000..f9e409b746
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hd-nsl-hds.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0x` | `0X` HexDigit NumericLiteralSeparator HexDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0x0_10, 0x010);
+assert.sameValue(0X0_10, 0X010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hd.js
new file mode 100644
index 0000000000..8e24e295df
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hd.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0x` | `0X` HexDigits NumericLiteralSeparator HexDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0x01_0, 0x010);
+assert.sameValue(0X01_0, 0X010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hds.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hds.js
new file mode 100644
index 0000000000..a34be03180
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-hds-nsl-hds.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0x` | `0X` HexDigits NumericLiteralSeparator HexDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0x01_00, 0x0100);
+assert.sameValue(0X01_00, 0X0100);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-dunder-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-dunder-err.js
new file mode 100644
index 0000000000..5cccc79d08
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-dunder-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to another
+ NumericLiteralSeparator in a HexIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0x0__0
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-err.js
new file mode 100644
index 0000000000..4a60e15780
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-nsl-hd-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character of a
+ HexIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0x0_
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-od-nsl-od-one-of.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-od-nsl-od-one-of.js
new file mode 100644
index 0000000000..9778115bce
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-hil-od-nsl-od-one-of.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0x` | `0X` HexDigit NumericLiteralSeparator HexDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ HexIntegerLiteral ::
+ 0x HexDigits
+ 0X HexDigits
+
+ HexDigits ::
+ HexDigit
+ HexDigits HexDigit
+ HexDigits NumericLiteralSeparator HexDigit
+
+ HexDigit::one of
+ 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0x0_0, 0x00);
+assert.sameValue(0x1_1, 0x11);
+assert.sameValue(0x2_2, 0x22);
+assert.sameValue(0x3_3, 0x33);
+assert.sameValue(0x4_4, 0x44);
+assert.sameValue(0x5_5, 0x55);
+assert.sameValue(0x6_6, 0x66);
+assert.sameValue(0x7_7, 0x77);
+assert.sameValue(0x8_8, 0x88);
+assert.sameValue(0x9_9, 0x99);
+assert.sameValue(0xa_a, 0xaa);
+assert.sameValue(0xb_b, 0xbb);
+assert.sameValue(0xc_c, 0xcc);
+assert.sameValue(0xd_d, 0xdd);
+assert.sameValue(0xe_e, 0xee);
+assert.sameValue(0xf_f, 0xff);
+assert.sameValue(0xA_A, 0xAA);
+assert.sameValue(0xB_B, 0xBB);
+assert.sameValue(0xC_C, 0xCC);
+assert.sameValue(0xD_D, 0xDD);
+assert.sameValue(0xE_E, 0xEE);
+assert.sameValue(0xF_F, 0xFF);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-00-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-00-err.js
new file mode 100644
index 0000000000..cef8c58112
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-00-err.js
@@ -0,0 +1,42 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a LegacyOctalLikeDecimalIntegerLiteral (00_0)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+
+ OctalDigit::one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+00_0;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-01-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-01-err.js
new file mode 100644
index 0000000000..bcc260ee5a
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-01-err.js
@@ -0,0 +1,42 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a LegacyOctalLikeDecimalIntegerLiteral (01_0)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+
+ OctalDigit::one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+01_0;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-07-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-07-err.js
new file mode 100644
index 0000000000..3bb6753a59
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-07-err.js
@@ -0,0 +1,44 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a LegacyOctalLikeDecimalIntegerLiteral (07_0)
+ )
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+
+ OctalDigit::one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+07_0;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_0-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_0-err.js
new file mode 100644
index 0000000000..231d8a0fdf
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_0-err.js
@@ -0,0 +1,42 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a LegacyOctalLikeDecimalIntegerLiteral (0_0)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+
+ OctalDigit::one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0_0;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_1-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_1-err.js
new file mode 100644
index 0000000000..ccf0fae763
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_1-err.js
@@ -0,0 +1,42 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a LegacyOctalLikeDecimalIntegerLiteral (0_1)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+
+ OctalDigit::one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0_1;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_7-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_7-err.js
new file mode 100644
index 0000000000..f2c43e158a
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-lol-0_7-err.js
@@ -0,0 +1,43 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a LegacyOctalLikeDecimalIntegerLiteral (0_7)
+ )
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+
+ OctalDigit::one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0_7;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-08-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-08-err.js
new file mode 100644
index 0000000000..abde825447
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-08-err.js
@@ -0,0 +1,39 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a NonOctalDecimalIntegerLiteral (08)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+08_0;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-09-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-09-err.js
new file mode 100644
index 0000000000..2c297e87e7
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-09-err.js
@@ -0,0 +1,39 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a NonOctalDecimalIntegerLiteral (09)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+09_0;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_8-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_8-err.js
new file mode 100644
index 0000000000..e4a948f9ad
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_8-err.js
@@ -0,0 +1,39 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a NonOctalDecimalIntegerLiteral (0_8)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0_8;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_9-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_9-err.js
new file mode 100644
index 0000000000..a631aa1d4e
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nonoctal-0_9-err.js
@@ -0,0 +1,39 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator must not be in a NonOctalDecimalIntegerLiteral (0_9)
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ 0
+ NonZeroDigit DecimalDigitsopt
+ NonZeroDigit
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+ NonOctalDecimalIntegerLiteral
+
+ NonOctalDecimalIntegerLiteral ::
+ 0 NonOctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
+ NonOctalDecimalIntegerLiteral DecimalDigit
+
+ LegacyOctalLikeDecimalIntegerLiteral ::
+ 0 OctalDigit
+ LegacyOctalLikeDecimalIntegerLiteral OctalDigit
+
+ NonOctalDigit::one of
+ 8 9
+negative:
+ phase: parse
+ type: SyntaxError
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0_9;
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd-one-of.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd-one-of.js
new file mode 100644
index 0000000000..6aa81e7690
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd-one-of.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: NonZeroDigit NumericLiteralSeparator DecimalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+ NonZeroDigit :: one of
+ 1 2 3 4 5 6 7 8 9
+
+ DecimalDigits ::
+ DecimalDigit
+ ...
+
+ DecimalDigit :: one of
+ 0 1 2 3 4 5 6 7 8 9
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1_0, 10);
+assert.sameValue(1_1, 11);
+assert.sameValue(2_2, 22);
+assert.sameValue(3_3, 33);
+assert.sameValue(4_4, 44);
+assert.sameValue(5_5, 55);
+assert.sameValue(6_6, 66);
+assert.sameValue(7_7, 77);
+assert.sameValue(8_8, 88);
+assert.sameValue(9_9, 99);
+
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd.js
new file mode 100644
index 0000000000..8f77c5ad8a
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dd.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: NonZeroDigit NumericLiteralSeparator DecimalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+ NonZeroDigit :: one of
+ 1 2 3 4 5 6 7 8 9
+
+ DecimalDigits ::
+ ...
+ DecimalDigits DecimalDigit
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1_1, 11);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-dunder-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-dunder-err.js
new file mode 100644
index 0000000000..0b7fba0d11
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-dunder-err.js
@@ -0,0 +1,30 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to another
+ NumericLiteralSeparator in DecimalIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+ NonZeroDigit :: one of
+ 1 2 3 4 5 6 7 8 9
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0__0123456789
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-leading-zero-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-leading-zero-err.js
new file mode 100644
index 0000000000..9c90918f21
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds-leading-zero-err.js
@@ -0,0 +1,28 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: NonZeroDigit NumericLiteralSeparator DecimalDigits
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator DecimalDigits
+
+ NonZeroDigit :: one of
+ 1 2 3 4 5 6 7 8 9
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0_0123456789
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds.js
new file mode 100644
index 0000000000..f133c9ee81
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-nzd-nsl-dds.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: NonZeroDigit NumericLiteralSeparator DecimalDigits
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ DecimalIntegerLiteral ::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+ NonZeroDigit :: one of
+ 1 2 3 4 5 6 7 8 9
+
+ DecimalDigits ::
+ ...
+ DecimalDigits DecimalDigit
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(1_0123456789, 10123456789);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-dunder-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-dunder-err.js
new file mode 100644
index 0000000000..2aa07a7963
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-dunder-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not appear adjacent to another
+ NumericLiteralSeparator in a OctalIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0o0__0
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-err.js
new file mode 100644
index 0000000000..491f86a0b0
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-nsl-od-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the last digit character of an
+ OctalIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0o0_
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-err.js
new file mode 100644
index 0000000000..0ab03195cd
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-err.js
@@ -0,0 +1,35 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NumericLiteralSeparator may not be the appear adjacent to `0o` | `0O` in a
+ OctalIntegerLiteral
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+0o_1
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-one-of.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-one-of.js
new file mode 100644
index 0000000000..1beed1bd6e
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od-one-of.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0o` | `0O` OctalDigit NumericLiteralSeparator OctalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0o0_0, 0o00);
+assert.sameValue(0o1_1, 0o11);
+assert.sameValue(0o2_2, 0o22);
+assert.sameValue(0o3_3, 0o33);
+assert.sameValue(0o4_4, 0o44);
+assert.sameValue(0o5_5, 0o55);
+assert.sameValue(0o6_6, 0o66);
+assert.sameValue(0o7_7, 0o77);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od.js
new file mode 100644
index 0000000000..f6151df531
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-od.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0o` | `0O` OctalDigit NumericLiteralSeparator OctalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0o0_1, 0o01);
+assert.sameValue(0O0_1, 0O01);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-ods.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-ods.js
new file mode 100644
index 0000000000..10902300a4
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-od-nsl-ods.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0o` | `0O` OctalDigit NumericLiteralSeparator OctalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0o0_10, 0o010);
+assert.sameValue(0O0_10, 0O010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-od.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-od.js
new file mode 100644
index 0000000000..676194f917
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-od.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0o` | `0O` OctalDigits NumericLiteralSeparator OctalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0o01_0, 0o010);
+assert.sameValue(0O01_0, 0O010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-ods.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-ods.js
new file mode 100644
index 0000000000..0330fa6136
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-oil-ods-nsl-ods.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ `0o` | `0O` OctalDigits NumericLiteralSeparator OctalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigits NumericLiteralSeparator OctalDigit
+
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(0o01_00, 0o0100);
+assert.sameValue(0O01_00, 0O0100);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-minus-dds-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-minus-dds-nsl-dd.js
new file mode 100644
index 0000000000..683badcf54
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-minus-dds-nsl-dd.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: DecimalDigits NumericLiteralSeparator DecimalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ SignedInteger ::
+ ...
+ - DecimalDigits
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(-123456789_0, -1234567890);
+assert.sameValue(-123456789_1, -1234567891);
+assert.sameValue(-123456789_2, -1234567892);
+assert.sameValue(-123456789_3, -1234567893);
+assert.sameValue(-123456789_4, -1234567894);
+assert.sameValue(-123456789_5, -1234567895);
+assert.sameValue(-123456789_6, -1234567896);
+assert.sameValue(-123456789_7, -1234567897);
+assert.sameValue(-123456789_8, -1234567898);
+assert.sameValue(-123456789_9, -1234567899);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-plus-dds-nsl-dd.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-plus-dds-nsl-dd.js
new file mode 100644
index 0000000000..dcc9e845c1
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-sign-plus-dds-nsl-dd.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: DecimalDigits NumericLiteralSeparator DecimalDigit
+info: |
+ NumericLiteralSeparator ::
+ _
+
+ SignedInteger ::
+ ...
+ + DecimalDigits
+ ...
+
+features: [numeric-separator-literal]
+---*/
+
+assert.sameValue(+123456789_0, 1234567890);
+assert.sameValue(+123456789_1, 1234567891);
+assert.sameValue(+123456789_2, 1234567892);
+assert.sameValue(+123456789_3, 1234567893);
+assert.sameValue(+123456789_4, 1234567894);
+assert.sameValue(+123456789_5, 1234567895);
+assert.sameValue(+123456789_6, 1234567896);
+assert.sameValue(+123456789_7, 1234567897);
+assert.sameValue(+123456789_8, 1234567898);
+assert.sameValue(+123456789_9, 1234567899);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-unicode-err.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-unicode-err.js
new file mode 100644
index 0000000000..aa84c40f7d
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/numeric-separator-literal-unicode-err.js
@@ -0,0 +1,27 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-NumericLiteralSeparator
+description: >
+ NonZeroDigit NumericLiteralSeparator DecimalDigits sequence expressed with
+ unicode escape sequence
+info: |
+ NumericLiteralSeparator::
+ _
+
+ DecimalIntegerLiteral::
+ ...
+ NonZeroDigit NumericLiteralSeparator_opt DecimalDigits
+
+negative:
+ phase: parse
+ type: SyntaxError
+
+features: [numeric-separator-literal]
+---*/
+
+$DONOTEVALUATE();
+
+1\u005F0123456789
diff --git a/js/src/tests/test262/language/literals/numeric/numeric-separators/shell.js b/js/src/tests/test262/language/literals/numeric/numeric-separators/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/numeric-separators/shell.js
diff --git a/js/src/tests/test262/language/literals/numeric/octal-invalid-digit.js b/js/src/tests/test262/language/literals/numeric/octal-invalid-digit.js
new file mode 100644
index 0000000000..3121c6f866
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/octal-invalid-digit.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Octal-integer-literal-like sequence containing an invalid digit
+info: |
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+0o8;
diff --git a/js/src/tests/test262/language/literals/numeric/octal-invalid-leading.js b/js/src/tests/test262/language/literals/numeric/octal-invalid-leading.js
new file mode 100644
index 0000000000..bd632ba739
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/octal-invalid-leading.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Octal-integer-literal-like sequence with a leading 0
+info: |
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+00o0;
diff --git a/js/src/tests/test262/language/literals/numeric/octal-invalid-truncated.js b/js/src/tests/test262/language/literals/numeric/octal-invalid-truncated.js
new file mode 100644
index 0000000000..e915f7f2d6
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/octal-invalid-truncated.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Octal-integer-literal-like sequence without any digits
+info: |
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+0o;
diff --git a/js/src/tests/test262/language/literals/numeric/octal-invalid-unicode.js b/js/src/tests/test262/language/literals/numeric/octal-invalid-unicode.js
new file mode 100644
index 0000000000..7b7197149d
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/octal-invalid-unicode.js
@@ -0,0 +1,24 @@
+// |reftest| error:SyntaxError
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3
+description: Octal-integer-literal-like sequence expressed with unicode escape sequence
+info: |
+ OctalIntegerLiteral ::
+ 0o OctalDigits
+ 0O OctalDigits
+ OctalDigits ::
+ OctalDigit
+ OctalDigits OctalDigit
+ OctalDigit :: one of
+ 0 1 2 3 4 5 6 7
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+0\u006f0;
diff --git a/js/src/tests/test262/language/literals/numeric/octal.js b/js/src/tests/test262/language/literals/numeric/octal.js
new file mode 100644
index 0000000000..81fb91e432
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/octal.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 11.8.3.1
+description: Mathematical value of valid octal integer literals
+info: |
+ The MV of StrNumericLiteral ::: OctalIntegerLiteral is the MV of
+ OctalIntegerLiteral.
+ The MV of OctalIntegerLiteral :: 0o OctalDigits is the MV of OctalDigits.
+ The MV of OctalIntegerLiteral :: 0O OctalDigits is the MV of OctalDigits.
+ The MV of OctalDigits :: OctalDigit is the MV of OctalDigit.
+ The MV of OctalDigits :: OctalDigits OctalDigit is (the MV of OctalDigits ×
+ 8) plus the MV of OctalDigit.
+---*/
+
+assert.sameValue(0o0, 0, 'lower-case head');
+assert.sameValue(0O0, 0, 'upper-case head');
+assert.sameValue(0o00, 0, 'lower-case head with leading zeros');
+assert.sameValue(0O00, 0, 'upper-case head with leading zeros');
+
+assert.sameValue(0o1, 1, 'lower-case head');
+assert.sameValue(0O1, 1, 'upper-case head');
+assert.sameValue(0o01, 1, 'lower-case head with leading zeros');
+assert.sameValue(0O01, 1, 'upper-case head with leading zeros');
+
+assert.sameValue(0o7, 7, 'lower-case head');
+assert.sameValue(0O7, 7, 'upper-case head');
+assert.sameValue(0o07, 7, 'lower-case head with leading zeros');
+assert.sameValue(0O07, 7, 'upper-case head with leading zeros');
+
+assert.sameValue(0o10, 8, 'lower-case head');
+assert.sameValue(0O10, 8, 'upper-case head');
+assert.sameValue(0o010, 8, 'lower-case head with leading zeros');
+assert.sameValue(0O010, 8, 'upper-case head with leading zeros');
+
+assert.sameValue(0o11, 9, 'lower-case head');
+assert.sameValue(0O11, 9, 'upper-case head');
+assert.sameValue(0o011, 9, 'lower-case head with leading zeros');
+assert.sameValue(0O011, 9, 'upper-case head with leading zeros');
+
+assert.sameValue(0o77, 63, 'lower-case head');
+assert.sameValue(0O77, 63, 'upper-case head');
+assert.sameValue(0o077, 63, 'lower-case head with leading zeros');
+assert.sameValue(0O077, 63, 'upper-case head with leading zeros');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/language/literals/numeric/shell.js b/js/src/tests/test262/language/literals/numeric/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/language/literals/numeric/shell.js