summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-label.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-label.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-label.js b/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-label.js
new file mode 100644
index 0000000000..0fe9f45fca
--- /dev/null
+++ b/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-label.js
@@ -0,0 +1,43 @@
+function expectSyntaxError(str) {
+ var threwSyntaxError;
+ try {
+ eval(str);
+ } catch (e) {
+ threwSyntaxError = e instanceof SyntaxError;
+ }
+ assertEq(threwSyntaxError, true);
+
+ try {
+ eval('"use strict";' + str);
+ } catch (e) {
+ threwSyntaxError = e instanceof SyntaxError;
+ }
+ assertEq(threwSyntaxError, true);
+}
+
+function expectSloppyPass(str) {
+ eval(str);
+
+ try {
+ eval('"use strict";' + str);
+ } catch (e) {
+ threwSyntaxError = e instanceof SyntaxError;
+ }
+ assertEq(threwSyntaxError, true);
+}
+
+expectSloppyPass(`l: function f1() {}`);
+expectSloppyPass(`l0: l: function f1() {}`);
+expectSloppyPass(`{ f1(); l: function f1() {} }`);
+expectSloppyPass(`{ f1(); l0: l: function f1() {} }`);
+expectSloppyPass(`{ f1(); l: function f1() { return 42; } } assertEq(f1(), 42);`);
+expectSloppyPass(`eval("fe(); l: function fe() {}")`);
+expectSyntaxError(`if (1) l: function f2() {}`);
+expectSyntaxError(`if (1) {} else l: function f3() {}`);
+expectSyntaxError(`do l: function f4() {} while (0)`);
+expectSyntaxError(`while (0) l: function f5() {}`);
+expectSyntaxError(`for (;;) l: function f6() {}`);
+expectSloppyPass(`switch (1) { case 1: l: function f7() {} }`);
+expectSloppyPass(`switch (1) { case 1: assertEq(f8(), 'f8'); case 2: l: function f8() { return 'f8'; } } assertEq(f8(), 'f8');`);
+
+reportCompare(0, 0);