[ES6] Catch parameter should accept BindingPattern
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jan 2016 04:21:36 +0000 (04:21 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jan 2016 04:21:36 +0000 (04:21 +0000)
https://bugs.webkit.org/show_bug.cgi?id=152385

Reviewed by Saam Barati.

Source/JavaScriptCore:

This patch implements destructuring in catch parameter.
Catch parameter accepts binding pattern and binding identifier.
It creates lexical bindings. And "yield" and "let" are specially
handled as is the same to function parameters.

In addition to that, we make destructuring parsing errors more descriptive.

* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitPushCatchScope):
* bytecompiler/BytecodeGenerator.h:
* bytecompiler/NodesCodegen.cpp:
(JSC::TryNode::emitBytecode):
* parser/ASTBuilder.h:
(JSC::ASTBuilder::createTryStatement):
* parser/NodeConstructors.h:
(JSC::TryNode::TryNode):
* parser/Nodes.h:
* parser/Parser.cpp:
(JSC::Parser<LexerType>::createBindingPattern):
(JSC::Parser<LexerType>::tryParseDestructuringPatternExpression):
(JSC::Parser<LexerType>::parseBindingOrAssignmentElement):
(JSC::destructuringKindToVariableKindName):
(JSC::Parser<LexerType>::parseDestructuringPattern):
(JSC::Parser<LexerType>::parseTryStatement):
(JSC::Parser<LexerType>::parseFormalParameters):
(JSC::Parser<LexerType>::parseFunctionParameters):
* parser/Parser.h:
(JSC::Parser::destructuringKindFromDeclarationType):
* parser/SyntaxChecker.h:
(JSC::SyntaxChecker::createTryStatement):
* tests/es6.yaml:
* tests/es6/destructuring_in_catch_heads.js: Added.
(test):
* tests/stress/catch-parameter-destructuring.js: Added.
(shouldBe):
(shouldThrow):
(prototype.call):
(catch):
(shouldThrow.try.throw.get error):
(initialize):
(array):
(generator.gen):
(generator):
* tests/stress/catch-parameter-syntax.js: Added.
(testSyntax):
(testSyntaxError):
* tests/stress/reserved-word-with-escape.js:
(testSyntaxError.String.raw.a):
(String.raw.SyntaxError.Cannot.use.the.keyword.string_appeared_here.as.a.name):
* tests/stress/yield-named-variable.js:

LayoutTests:

* js/dom/reserved-words-as-property-expected.txt:
* js/let-syntax-expected.txt:
* js/mozilla/strict/12.14.1-expected.txt:
* js/mozilla/strict/script-tests/12.14.1.js:
* sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T10-expected.txt:
* sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13-expected.txt:
* sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T5-expected.txt:
* sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T7-expected.txt:
* sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T8-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195439 268f45cc-cd09-0410-ab3c-d52691b4dbfc

26 files changed:
LayoutTests/ChangeLog
LayoutTests/js/dom/reserved-words-as-property-expected.txt
LayoutTests/js/let-syntax-expected.txt
LayoutTests/js/mozilla/strict/12.14.1-expected.txt
LayoutTests/js/mozilla/strict/script-tests/12.14.1.js
LayoutTests/sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T10-expected.txt
LayoutTests/sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13-expected.txt
LayoutTests/sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T5-expected.txt
LayoutTests/sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T7-expected.txt
LayoutTests/sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T8-expected.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
Source/JavaScriptCore/parser/ASTBuilder.h
Source/JavaScriptCore/parser/NodeConstructors.h
Source/JavaScriptCore/parser/Nodes.h
Source/JavaScriptCore/parser/Parser.cpp
Source/JavaScriptCore/parser/Parser.h
Source/JavaScriptCore/parser/SyntaxChecker.h
Source/JavaScriptCore/tests/es6.yaml
Source/JavaScriptCore/tests/es6/destructuring_in_catch_heads.js [new file with mode: 0644]
Source/JavaScriptCore/tests/stress/catch-parameter-destructuring.js [new file with mode: 0644]
Source/JavaScriptCore/tests/stress/catch-parameter-syntax.js [new file with mode: 0644]
Source/JavaScriptCore/tests/stress/reserved-word-with-escape.js
Source/JavaScriptCore/tests/stress/yield-named-variable.js

index 423b1a5..1564047 100644 (file)
@@ -1,3 +1,20 @@
+2016-01-21  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [ES6] Catch parameter should accept BindingPattern
+        https://bugs.webkit.org/show_bug.cgi?id=152385
+
+        Reviewed by Saam Barati.
+
+        * js/dom/reserved-words-as-property-expected.txt:
+        * js/let-syntax-expected.txt:
+        * js/mozilla/strict/12.14.1-expected.txt:
+        * js/mozilla/strict/script-tests/12.14.1.js:
+        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T10-expected.txt:
+        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13-expected.txt:
+        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T5-expected.txt:
+        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T7-expected.txt:
+        * sputnik/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T8-expected.txt:
+
 2016-01-21  Andy VanWagoner  <andy@instructure.com>
 
         [INTL] Implement Array.prototype.toLocaleString in ECMA-402
index b7034b4..adb07c9 100644 (file)
@@ -7,12 +7,12 @@ PASS var true; true threw exception SyntaxError: Cannot use the keyword 'true' a
 PASS (function(){var true; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
 PASS var true = 42; true === 42 threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
 PASS (function(){var true = 42; true === 42}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS function g(true){  }; true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS (function(){function g(true){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS /true/.test(function g(true){  }) threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS (function(){/true/.test(function g(true){  })}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS try{}catch(true){}; true threw exception SyntaxError: Cannot use the keyword 'true' as a catch variable name..
-PASS (function(){try{}catch(true){}; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a catch variable name..
+PASS function g(true){  }; true threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS (function(){function g(true){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS /true/.test(function g(true){  }) threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS (function(){/true/.test(function g(true){  })}); true threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS try{}catch(true){}; true threw exception SyntaxError: Cannot use the keyword 'true' as a catch parameter name..
+PASS (function(){try{}catch(true){}; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a catch parameter name..
 PASS function true(){  }; true threw exception SyntaxError: Cannot use the keyword 'true' as a function name..
 PASS (function(){function true(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a function name..
 PASS ({ "true": 42 }.true === 42) is true
@@ -25,12 +25,12 @@ PASS "use strict";var true; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var true; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
 PASS "use strict";var true = 42; true === 42 threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
 PASS (function(){"use strict";var true = 42; true === 42}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS "use strict";function g(true){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS (function(){"use strict";function g(true){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS "use strict";/true/.test(function g(true){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS (function(){"use strict";/true/.test(function g(true){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'true' as a variable name..
-PASS "use strict";try{}catch(true){}; true threw exception SyntaxError: Cannot use the keyword 'true' as a catch variable name..
-PASS (function(){"use strict";try{}catch(true){}; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a catch variable name..
+PASS "use strict";function g(true){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS (function(){"use strict";function g(true){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS "use strict";/true/.test(function g(true){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS (function(){"use strict";/true/.test(function g(true){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'true' as a parameter name..
+PASS "use strict";try{}catch(true){}; true threw exception SyntaxError: Cannot use the keyword 'true' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(true){}; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a catch parameter name..
 PASS "use strict";function true(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'true' as a function name..
 PASS (function(){"use strict";function true(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'true' as a function name..
 PASS "use strict";({ "true": 42 }.true === 42) is true
@@ -43,12 +43,12 @@ PASS var false; true threw exception SyntaxError: Cannot use the keyword 'false'
 PASS (function(){var false; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
 PASS var false = 42; false === 42 threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
 PASS (function(){var false = 42; false === 42}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS function g(false){  }; true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS (function(){function g(false){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS /false/.test(function g(false){  }) threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS (function(){/false/.test(function g(false){  })}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS try{}catch(false){}; true threw exception SyntaxError: Cannot use the keyword 'false' as a catch variable name..
-PASS (function(){try{}catch(false){}; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a catch variable name..
+PASS function g(false){  }; true threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS (function(){function g(false){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS /false/.test(function g(false){  }) threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS (function(){/false/.test(function g(false){  })}); true threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS try{}catch(false){}; true threw exception SyntaxError: Cannot use the keyword 'false' as a catch parameter name..
+PASS (function(){try{}catch(false){}; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a catch parameter name..
 PASS function false(){  }; true threw exception SyntaxError: Cannot use the keyword 'false' as a function name..
 PASS (function(){function false(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a function name..
 PASS ({ "false": 42 }.false === 42) is true
@@ -61,12 +61,12 @@ PASS "use strict";var false; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var false; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
 PASS "use strict";var false = 42; false === 42 threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
 PASS (function(){"use strict";var false = 42; false === 42}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS "use strict";function g(false){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS (function(){"use strict";function g(false){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS "use strict";/false/.test(function g(false){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS (function(){"use strict";/false/.test(function g(false){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'false' as a variable name..
-PASS "use strict";try{}catch(false){}; true threw exception SyntaxError: Cannot use the keyword 'false' as a catch variable name..
-PASS (function(){"use strict";try{}catch(false){}; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a catch variable name..
+PASS "use strict";function g(false){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS (function(){"use strict";function g(false){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS "use strict";/false/.test(function g(false){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS (function(){"use strict";/false/.test(function g(false){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'false' as a parameter name..
+PASS "use strict";try{}catch(false){}; true threw exception SyntaxError: Cannot use the keyword 'false' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(false){}; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a catch parameter name..
 PASS "use strict";function false(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'false' as a function name..
 PASS (function(){"use strict";function false(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'false' as a function name..
 PASS "use strict";({ "false": 42 }.false === 42) is true
@@ -79,12 +79,12 @@ PASS var null; true threw exception SyntaxError: Cannot use the keyword 'null' a
 PASS (function(){var null; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
 PASS var null = 42; null === 42 threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
 PASS (function(){var null = 42; null === 42}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS function g(null){  }; true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS (function(){function g(null){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS /null/.test(function g(null){  }) threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS (function(){/null/.test(function g(null){  })}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS try{}catch(null){}; true threw exception SyntaxError: Cannot use the keyword 'null' as a catch variable name..
-PASS (function(){try{}catch(null){}; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a catch variable name..
+PASS function g(null){  }; true threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS (function(){function g(null){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS /null/.test(function g(null){  }) threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS (function(){/null/.test(function g(null){  })}); true threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS try{}catch(null){}; true threw exception SyntaxError: Cannot use the keyword 'null' as a catch parameter name..
+PASS (function(){try{}catch(null){}; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a catch parameter name..
 PASS function null(){  }; true threw exception SyntaxError: Cannot use the keyword 'null' as a function name..
 PASS (function(){function null(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a function name..
 PASS ({ "null": 42 }.null === 42) is true
@@ -97,12 +97,12 @@ PASS "use strict";var null; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var null; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
 PASS "use strict";var null = 42; null === 42 threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
 PASS (function(){"use strict";var null = 42; null === 42}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS "use strict";function g(null){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS (function(){"use strict";function g(null){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS "use strict";/null/.test(function g(null){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS (function(){"use strict";/null/.test(function g(null){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'null' as a variable name..
-PASS "use strict";try{}catch(null){}; true threw exception SyntaxError: Cannot use the keyword 'null' as a catch variable name..
-PASS (function(){"use strict";try{}catch(null){}; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a catch variable name..
+PASS "use strict";function g(null){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS (function(){"use strict";function g(null){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS "use strict";/null/.test(function g(null){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS (function(){"use strict";/null/.test(function g(null){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'null' as a parameter name..
+PASS "use strict";try{}catch(null){}; true threw exception SyntaxError: Cannot use the keyword 'null' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(null){}; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a catch parameter name..
 PASS "use strict";function null(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'null' as a function name..
 PASS (function(){"use strict";function null(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'null' as a function name..
 PASS "use strict";({ "null": 42 }.null === 42) is true
@@ -115,12 +115,12 @@ PASS var break; true threw exception SyntaxError: Cannot use the keyword 'break'
 PASS (function(){var break; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
 PASS var break = 42; break === 42 threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
 PASS (function(){var break = 42; break === 42}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS function g(break){  }; true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS (function(){function g(break){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS /break/.test(function g(break){  }) threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS (function(){/break/.test(function g(break){  })}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS try{}catch(break){}; true threw exception SyntaxError: Cannot use the keyword 'break' as a catch variable name..
-PASS (function(){try{}catch(break){}; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a catch variable name..
+PASS function g(break){  }; true threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS (function(){function g(break){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS /break/.test(function g(break){  }) threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS (function(){/break/.test(function g(break){  })}); true threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS try{}catch(break){}; true threw exception SyntaxError: Cannot use the keyword 'break' as a catch parameter name..
+PASS (function(){try{}catch(break){}; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a catch parameter name..
 PASS function break(){  }; true threw exception SyntaxError: Cannot use the keyword 'break' as a function name..
 PASS (function(){function break(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a function name..
 PASS ({ "break": 42 }.break === 42) is true
@@ -133,12 +133,12 @@ PASS "use strict";var break; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var break; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
 PASS "use strict";var break = 42; break === 42 threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
 PASS (function(){"use strict";var break = 42; break === 42}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS "use strict";function g(break){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS (function(){"use strict";function g(break){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS "use strict";/break/.test(function g(break){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS (function(){"use strict";/break/.test(function g(break){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'break' as a variable name..
-PASS "use strict";try{}catch(break){}; true threw exception SyntaxError: Cannot use the keyword 'break' as a catch variable name..
-PASS (function(){"use strict";try{}catch(break){}; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a catch variable name..
+PASS "use strict";function g(break){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS (function(){"use strict";function g(break){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS "use strict";/break/.test(function g(break){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS (function(){"use strict";/break/.test(function g(break){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'break' as a parameter name..
+PASS "use strict";try{}catch(break){}; true threw exception SyntaxError: Cannot use the keyword 'break' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(break){}; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a catch parameter name..
 PASS "use strict";function break(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'break' as a function name..
 PASS (function(){"use strict";function break(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'break' as a function name..
 PASS "use strict";({ "break": 42 }.break === 42) is true
@@ -151,12 +151,12 @@ PASS var case; true threw exception SyntaxError: Cannot use the keyword 'case' a
 PASS (function(){var case; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
 PASS var case = 42; case === 42 threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
 PASS (function(){var case = 42; case === 42}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS function g(case){  }; true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS (function(){function g(case){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS /case/.test(function g(case){  }) threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS (function(){/case/.test(function g(case){  })}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS try{}catch(case){}; true threw exception SyntaxError: Cannot use the keyword 'case' as a catch variable name..
-PASS (function(){try{}catch(case){}; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a catch variable name..
+PASS function g(case){  }; true threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS (function(){function g(case){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS /case/.test(function g(case){  }) threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS (function(){/case/.test(function g(case){  })}); true threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS try{}catch(case){}; true threw exception SyntaxError: Cannot use the keyword 'case' as a catch parameter name..
+PASS (function(){try{}catch(case){}; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a catch parameter name..
 PASS function case(){  }; true threw exception SyntaxError: Cannot use the keyword 'case' as a function name..
 PASS (function(){function case(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a function name..
 PASS ({ "case": 42 }.case === 42) is true
@@ -169,12 +169,12 @@ PASS "use strict";var case; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var case; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
 PASS "use strict";var case = 42; case === 42 threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
 PASS (function(){"use strict";var case = 42; case === 42}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS "use strict";function g(case){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS (function(){"use strict";function g(case){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS "use strict";/case/.test(function g(case){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS (function(){"use strict";/case/.test(function g(case){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'case' as a variable name..
-PASS "use strict";try{}catch(case){}; true threw exception SyntaxError: Cannot use the keyword 'case' as a catch variable name..
-PASS (function(){"use strict";try{}catch(case){}; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a catch variable name..
+PASS "use strict";function g(case){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS (function(){"use strict";function g(case){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS "use strict";/case/.test(function g(case){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS (function(){"use strict";/case/.test(function g(case){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'case' as a parameter name..
+PASS "use strict";try{}catch(case){}; true threw exception SyntaxError: Cannot use the keyword 'case' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(case){}; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a catch parameter name..
 PASS "use strict";function case(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'case' as a function name..
 PASS (function(){"use strict";function case(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'case' as a function name..
 PASS "use strict";({ "case": 42 }.case === 42) is true
@@ -187,12 +187,12 @@ PASS var catch; true threw exception SyntaxError: Cannot use the keyword 'catch'
 PASS (function(){var catch; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
 PASS var catch = 42; catch === 42 threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
 PASS (function(){var catch = 42; catch === 42}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS function g(catch){  }; true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS (function(){function g(catch){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS /catch/.test(function g(catch){  }) threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS (function(){/catch/.test(function g(catch){  })}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS try{}catch(catch){}; true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch variable name..
-PASS (function(){try{}catch(catch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch variable name..
+PASS function g(catch){  }; true threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS (function(){function g(catch){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS /catch/.test(function g(catch){  }) threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS (function(){/catch/.test(function g(catch){  })}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS try{}catch(catch){}; true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch parameter name..
+PASS (function(){try{}catch(catch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch parameter name..
 PASS function catch(){  }; true threw exception SyntaxError: Cannot use the keyword 'catch' as a function name..
 PASS (function(){function catch(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a function name..
 PASS ({ "catch": 42 }.catch === 42) is true
@@ -205,12 +205,12 @@ PASS "use strict";var catch; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var catch; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
 PASS "use strict";var catch = 42; catch === 42 threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
 PASS (function(){"use strict";var catch = 42; catch === 42}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS "use strict";function g(catch){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS (function(){"use strict";function g(catch){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS "use strict";/catch/.test(function g(catch){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS (function(){"use strict";/catch/.test(function g(catch){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a variable name..
-PASS "use strict";try{}catch(catch){}; true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch variable name..
-PASS (function(){"use strict";try{}catch(catch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch variable name..
+PASS "use strict";function g(catch){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS (function(){"use strict";function g(catch){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS "use strict";/catch/.test(function g(catch){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS (function(){"use strict";/catch/.test(function g(catch){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a parameter name..
+PASS "use strict";try{}catch(catch){}; true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(catch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a catch parameter name..
 PASS "use strict";function catch(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'catch' as a function name..
 PASS (function(){"use strict";function catch(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'catch' as a function name..
 PASS "use strict";({ "catch": 42 }.catch === 42) is true
@@ -223,12 +223,12 @@ PASS var continue; true threw exception SyntaxError: Cannot use the keyword 'con
 PASS (function(){var continue; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
 PASS var continue = 42; continue === 42 threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
 PASS (function(){var continue = 42; continue === 42}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS function g(continue){  }; true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS (function(){function g(continue){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS /continue/.test(function g(continue){  }) threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS (function(){/continue/.test(function g(continue){  })}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS try{}catch(continue){}; true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch variable name..
-PASS (function(){try{}catch(continue){}; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch variable name..
+PASS function g(continue){  }; true threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS (function(){function g(continue){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS /continue/.test(function g(continue){  }) threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS (function(){/continue/.test(function g(continue){  })}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS try{}catch(continue){}; true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch parameter name..
+PASS (function(){try{}catch(continue){}; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch parameter name..
 PASS function continue(){  }; true threw exception SyntaxError: Cannot use the keyword 'continue' as a function name..
 PASS (function(){function continue(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a function name..
 PASS ({ "continue": 42 }.continue === 42) is true
@@ -241,12 +241,12 @@ PASS "use strict";var continue; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var continue; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
 PASS "use strict";var continue = 42; continue === 42 threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
 PASS (function(){"use strict";var continue = 42; continue === 42}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS "use strict";function g(continue){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS (function(){"use strict";function g(continue){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS "use strict";/continue/.test(function g(continue){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS (function(){"use strict";/continue/.test(function g(continue){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a variable name..
-PASS "use strict";try{}catch(continue){}; true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch variable name..
-PASS (function(){"use strict";try{}catch(continue){}; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch variable name..
+PASS "use strict";function g(continue){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS (function(){"use strict";function g(continue){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS "use strict";/continue/.test(function g(continue){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS (function(){"use strict";/continue/.test(function g(continue){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a parameter name..
+PASS "use strict";try{}catch(continue){}; true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(continue){}; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a catch parameter name..
 PASS "use strict";function continue(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'continue' as a function name..
 PASS (function(){"use strict";function continue(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'continue' as a function name..
 PASS "use strict";({ "continue": 42 }.continue === 42) is true
@@ -259,12 +259,12 @@ PASS var debugger; true threw exception SyntaxError: Cannot use the keyword 'deb
 PASS (function(){var debugger; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
 PASS var debugger = 42; debugger === 42 threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
 PASS (function(){var debugger = 42; debugger === 42}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS function g(debugger){  }; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS (function(){function g(debugger){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS /debugger/.test(function g(debugger){  }) threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS (function(){/debugger/.test(function g(debugger){  })}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS try{}catch(debugger){}; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch variable name..
-PASS (function(){try{}catch(debugger){}; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch variable name..
+PASS function g(debugger){  }; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS (function(){function g(debugger){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS /debugger/.test(function g(debugger){  }) threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS (function(){/debugger/.test(function g(debugger){  })}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS try{}catch(debugger){}; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch parameter name..
+PASS (function(){try{}catch(debugger){}; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch parameter name..
 PASS function debugger(){  }; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a function name..
 PASS (function(){function debugger(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a function name..
 PASS ({ "debugger": 42 }.debugger === 42) is true
@@ -277,12 +277,12 @@ PASS "use strict";var debugger; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var debugger; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
 PASS "use strict";var debugger = 42; debugger === 42 threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
 PASS (function(){"use strict";var debugger = 42; debugger === 42}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS "use strict";function g(debugger){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS (function(){"use strict";function g(debugger){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS "use strict";/debugger/.test(function g(debugger){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS (function(){"use strict";/debugger/.test(function g(debugger){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a variable name..
-PASS "use strict";try{}catch(debugger){}; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch variable name..
-PASS (function(){"use strict";try{}catch(debugger){}; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch variable name..
+PASS "use strict";function g(debugger){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS (function(){"use strict";function g(debugger){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS "use strict";/debugger/.test(function g(debugger){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS (function(){"use strict";/debugger/.test(function g(debugger){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a parameter name..
+PASS "use strict";try{}catch(debugger){}; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(debugger){}; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a catch parameter name..
 PASS "use strict";function debugger(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'debugger' as a function name..
 PASS (function(){"use strict";function debugger(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'debugger' as a function name..
 PASS "use strict";({ "debugger": 42 }.debugger === 42) is true
@@ -295,12 +295,12 @@ PASS var default; true threw exception SyntaxError: Cannot use the keyword 'defa
 PASS (function(){var default; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
 PASS var default = 42; default === 42 threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
 PASS (function(){var default = 42; default === 42}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS function g(default){  }; true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS (function(){function g(default){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS /default/.test(function g(default){  }) threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS (function(){/default/.test(function g(default){  })}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS try{}catch(default){}; true threw exception SyntaxError: Cannot use the keyword 'default' as a catch variable name..
-PASS (function(){try{}catch(default){}; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a catch variable name..
+PASS function g(default){  }; true threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS (function(){function g(default){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS /default/.test(function g(default){  }) threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS (function(){/default/.test(function g(default){  })}); true threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS try{}catch(default){}; true threw exception SyntaxError: Cannot use the keyword 'default' as a catch parameter name..
+PASS (function(){try{}catch(default){}; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a catch parameter name..
 PASS function default(){  }; true threw exception SyntaxError: Cannot use the keyword 'default' as a function name..
 PASS (function(){function default(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a function name..
 PASS ({ "default": 42 }.default === 42) is true
@@ -313,12 +313,12 @@ PASS "use strict";var default; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var default; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
 PASS "use strict";var default = 42; default === 42 threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
 PASS (function(){"use strict";var default = 42; default === 42}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS "use strict";function g(default){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS (function(){"use strict";function g(default){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS "use strict";/default/.test(function g(default){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS (function(){"use strict";/default/.test(function g(default){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'default' as a variable name..
-PASS "use strict";try{}catch(default){}; true threw exception SyntaxError: Cannot use the keyword 'default' as a catch variable name..
-PASS (function(){"use strict";try{}catch(default){}; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a catch variable name..
+PASS "use strict";function g(default){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS (function(){"use strict";function g(default){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS "use strict";/default/.test(function g(default){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS (function(){"use strict";/default/.test(function g(default){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'default' as a parameter name..
+PASS "use strict";try{}catch(default){}; true threw exception SyntaxError: Cannot use the keyword 'default' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(default){}; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a catch parameter name..
 PASS "use strict";function default(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'default' as a function name..
 PASS (function(){"use strict";function default(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'default' as a function name..
 PASS "use strict";({ "default": 42 }.default === 42) is true
@@ -331,12 +331,12 @@ PASS var delete; true threw exception SyntaxError: Cannot use the keyword 'delet
 PASS (function(){var delete; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
 PASS var delete = 42; delete === 42 threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
 PASS (function(){var delete = 42; delete === 42}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS function g(delete){  }; true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS (function(){function g(delete){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS /delete/.test(function g(delete){  }) threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS (function(){/delete/.test(function g(delete){  })}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS try{}catch(delete){}; true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch variable name..
-PASS (function(){try{}catch(delete){}; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch variable name..
+PASS function g(delete){  }; true threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS (function(){function g(delete){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS /delete/.test(function g(delete){  }) threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS (function(){/delete/.test(function g(delete){  })}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS try{}catch(delete){}; true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch parameter name..
+PASS (function(){try{}catch(delete){}; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch parameter name..
 PASS function delete(){  }; true threw exception SyntaxError: Cannot use the keyword 'delete' as a function name..
 PASS (function(){function delete(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a function name..
 PASS ({ "delete": 42 }.delete === 42) is true
@@ -349,12 +349,12 @@ PASS "use strict";var delete; true threw exception SyntaxError: Cannot use the k
 PASS (function(){"use strict";var delete; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
 PASS "use strict";var delete = 42; delete === 42 threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
 PASS (function(){"use strict";var delete = 42; delete === 42}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS "use strict";function g(delete){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS (function(){"use strict";function g(delete){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS "use strict";/delete/.test(function g(delete){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS (function(){"use strict";/delete/.test(function g(delete){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a variable name..
-PASS "use strict";try{}catch(delete){}; true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch variable name..
-PASS (function(){"use strict";try{}catch(delete){}; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch variable name..
+PASS "use strict";function g(delete){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS (function(){"use strict";function g(delete){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS "use strict";/delete/.test(function g(delete){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS (function(){"use strict";/delete/.test(function g(delete){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a parameter name..
+PASS "use strict";try{}catch(delete){}; true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(delete){}; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a catch parameter name..
 PASS "use strict";function delete(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'delete' as a function name..
 PASS (function(){"use strict";function delete(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'delete' as a function name..
 PASS "use strict";({ "delete": 42 }.delete === 42) is true
@@ -367,12 +367,12 @@ PASS var do; true threw exception SyntaxError: Cannot use the keyword 'do' as a
 PASS (function(){var do; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
 PASS var do = 42; do === 42 threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
 PASS (function(){var do = 42; do === 42}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS function g(do){  }; true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS (function(){function g(do){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS /do/.test(function g(do){  }) threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS (function(){/do/.test(function g(do){  })}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS try{}catch(do){}; true threw exception SyntaxError: Cannot use the keyword 'do' as a catch variable name..
-PASS (function(){try{}catch(do){}; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a catch variable name..
+PASS function g(do){  }; true threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS (function(){function g(do){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS /do/.test(function g(do){  }) threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS (function(){/do/.test(function g(do){  })}); true threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS try{}catch(do){}; true threw exception SyntaxError: Cannot use the keyword 'do' as a catch parameter name..
+PASS (function(){try{}catch(do){}; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a catch parameter name..
 PASS function do(){  }; true threw exception SyntaxError: Cannot use the keyword 'do' as a function name..
 PASS (function(){function do(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a function name..
 PASS ({ "do": 42 }.do === 42) is true
@@ -385,12 +385,12 @@ PASS "use strict";var do; true threw exception SyntaxError: Cannot use the keywo
 PASS (function(){"use strict";var do; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
 PASS "use strict";var do = 42; do === 42 threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
 PASS (function(){"use strict";var do = 42; do === 42}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS "use strict";function g(do){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS (function(){"use strict";function g(do){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS "use strict";/do/.test(function g(do){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS (function(){"use strict";/do/.test(function g(do){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'do' as a variable name..
-PASS "use strict";try{}catch(do){}; true threw exception SyntaxError: Cannot use the keyword 'do' as a catch variable name..
-PASS (function(){"use strict";try{}catch(do){}; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a catch variable name..
+PASS "use strict";function g(do){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS (function(){"use strict";function g(do){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS "use strict";/do/.test(function g(do){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS (function(){"use strict";/do/.test(function g(do){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'do' as a parameter name..
+PASS "use strict";try{}catch(do){}; true threw exception SyntaxError: Cannot use the keyword 'do' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(do){}; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a catch parameter name..
 PASS "use strict";function do(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'do' as a function name..
 PASS (function(){"use strict";function do(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'do' as a function name..
 PASS "use strict";({ "do": 42 }.do === 42) is true
@@ -403,12 +403,12 @@ PASS var else; true threw exception SyntaxError: Cannot use the keyword 'else' a
 PASS (function(){var else; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
 PASS var else = 42; else === 42 threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
 PASS (function(){var else = 42; else === 42}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS function g(else){  }; true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS (function(){function g(else){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS /else/.test(function g(else){  }) threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS (function(){/else/.test(function g(else){  })}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS try{}catch(else){}; true threw exception SyntaxError: Cannot use the keyword 'else' as a catch variable name..
-PASS (function(){try{}catch(else){}; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a catch variable name..
+PASS function g(else){  }; true threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS (function(){function g(else){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS /else/.test(function g(else){  }) threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS (function(){/else/.test(function g(else){  })}); true threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS try{}catch(else){}; true threw exception SyntaxError: Cannot use the keyword 'else' as a catch parameter name..
+PASS (function(){try{}catch(else){}; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a catch parameter name..
 PASS function else(){  }; true threw exception SyntaxError: Cannot use the keyword 'else' as a function name..
 PASS (function(){function else(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a function name..
 PASS ({ "else": 42 }.else === 42) is true
@@ -421,12 +421,12 @@ PASS "use strict";var else; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var else; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
 PASS "use strict";var else = 42; else === 42 threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
 PASS (function(){"use strict";var else = 42; else === 42}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS "use strict";function g(else){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS (function(){"use strict";function g(else){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS "use strict";/else/.test(function g(else){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS (function(){"use strict";/else/.test(function g(else){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'else' as a variable name..
-PASS "use strict";try{}catch(else){}; true threw exception SyntaxError: Cannot use the keyword 'else' as a catch variable name..
-PASS (function(){"use strict";try{}catch(else){}; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a catch variable name..
+PASS "use strict";function g(else){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS (function(){"use strict";function g(else){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS "use strict";/else/.test(function g(else){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS (function(){"use strict";/else/.test(function g(else){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'else' as a parameter name..
+PASS "use strict";try{}catch(else){}; true threw exception SyntaxError: Cannot use the keyword 'else' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(else){}; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a catch parameter name..
 PASS "use strict";function else(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'else' as a function name..
 PASS (function(){"use strict";function else(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'else' as a function name..
 PASS "use strict";({ "else": 42 }.else === 42) is true
@@ -439,12 +439,12 @@ PASS var finally; true threw exception SyntaxError: Cannot use the keyword 'fina
 PASS (function(){var finally; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
 PASS var finally = 42; finally === 42 threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
 PASS (function(){var finally = 42; finally === 42}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS function g(finally){  }; true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS (function(){function g(finally){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS /finally/.test(function g(finally){  }) threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS (function(){/finally/.test(function g(finally){  })}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS try{}catch(finally){}; true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch variable name..
-PASS (function(){try{}catch(finally){}; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch variable name..
+PASS function g(finally){  }; true threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS (function(){function g(finally){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS /finally/.test(function g(finally){  }) threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS (function(){/finally/.test(function g(finally){  })}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS try{}catch(finally){}; true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch parameter name..
+PASS (function(){try{}catch(finally){}; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch parameter name..
 PASS function finally(){  }; true threw exception SyntaxError: Cannot use the keyword 'finally' as a function name..
 PASS (function(){function finally(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a function name..
 PASS ({ "finally": 42 }.finally === 42) is true
@@ -457,12 +457,12 @@ PASS "use strict";var finally; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var finally; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
 PASS "use strict";var finally = 42; finally === 42 threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
 PASS (function(){"use strict";var finally = 42; finally === 42}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS "use strict";function g(finally){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS (function(){"use strict";function g(finally){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS "use strict";/finally/.test(function g(finally){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS (function(){"use strict";/finally/.test(function g(finally){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a variable name..
-PASS "use strict";try{}catch(finally){}; true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch variable name..
-PASS (function(){"use strict";try{}catch(finally){}; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch variable name..
+PASS "use strict";function g(finally){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS (function(){"use strict";function g(finally){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS "use strict";/finally/.test(function g(finally){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS (function(){"use strict";/finally/.test(function g(finally){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a parameter name..
+PASS "use strict";try{}catch(finally){}; true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(finally){}; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a catch parameter name..
 PASS "use strict";function finally(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'finally' as a function name..
 PASS (function(){"use strict";function finally(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'finally' as a function name..
 PASS "use strict";({ "finally": 42 }.finally === 42) is true
@@ -475,12 +475,12 @@ PASS var for; true threw exception SyntaxError: Cannot use the keyword 'for' as
 PASS (function(){var for; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
 PASS var for = 42; for === 42 threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
 PASS (function(){var for = 42; for === 42}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS function g(for){  }; true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS (function(){function g(for){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS /for/.test(function g(for){  }) threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS (function(){/for/.test(function g(for){  })}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS try{}catch(for){}; true threw exception SyntaxError: Cannot use the keyword 'for' as a catch variable name..
-PASS (function(){try{}catch(for){}; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a catch variable name..
+PASS function g(for){  }; true threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS (function(){function g(for){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS /for/.test(function g(for){  }) threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS (function(){/for/.test(function g(for){  })}); true threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS try{}catch(for){}; true threw exception SyntaxError: Cannot use the keyword 'for' as a catch parameter name..
+PASS (function(){try{}catch(for){}; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a catch parameter name..
 PASS function for(){  }; true threw exception SyntaxError: Cannot use the keyword 'for' as a function name..
 PASS (function(){function for(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a function name..
 PASS ({ "for": 42 }.for === 42) is true
@@ -493,12 +493,12 @@ PASS "use strict";var for; true threw exception SyntaxError: Cannot use the keyw
 PASS (function(){"use strict";var for; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
 PASS "use strict";var for = 42; for === 42 threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
 PASS (function(){"use strict";var for = 42; for === 42}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS "use strict";function g(for){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS (function(){"use strict";function g(for){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS "use strict";/for/.test(function g(for){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS (function(){"use strict";/for/.test(function g(for){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'for' as a variable name..
-PASS "use strict";try{}catch(for){}; true threw exception SyntaxError: Cannot use the keyword 'for' as a catch variable name..
-PASS (function(){"use strict";try{}catch(for){}; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a catch variable name..
+PASS "use strict";function g(for){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS (function(){"use strict";function g(for){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS "use strict";/for/.test(function g(for){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS (function(){"use strict";/for/.test(function g(for){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'for' as a parameter name..
+PASS "use strict";try{}catch(for){}; true threw exception SyntaxError: Cannot use the keyword 'for' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(for){}; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a catch parameter name..
 PASS "use strict";function for(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'for' as a function name..
 PASS (function(){"use strict";function for(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'for' as a function name..
 PASS "use strict";({ "for": 42 }.for === 42) is true
@@ -511,12 +511,12 @@ PASS var function; true threw exception SyntaxError: Cannot use the keyword 'fun
 PASS (function(){var function; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
 PASS var function = 42; function === 42 threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
 PASS (function(){var function = 42; function === 42}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS function g(function){  }; true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS (function(){function g(function){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS /function/.test(function g(function){  }) threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS (function(){/function/.test(function g(function){  })}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS try{}catch(function){}; true threw exception SyntaxError: Cannot use the keyword 'function' as a catch variable name..
-PASS (function(){try{}catch(function){}; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a catch variable name..
+PASS function g(function){  }; true threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS (function(){function g(function){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS /function/.test(function g(function){  }) threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS (function(){/function/.test(function g(function){  })}); true threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS try{}catch(function){}; true threw exception SyntaxError: Cannot use the keyword 'function' as a catch parameter name..
+PASS (function(){try{}catch(function){}; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a catch parameter name..
 PASS function function(){  }; true threw exception SyntaxError: Cannot use the keyword 'function' as a function name..
 PASS (function(){function function(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a function name..
 PASS ({ "function": 42 }.function === 42) is true
@@ -529,12 +529,12 @@ PASS "use strict";var function; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var function; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
 PASS "use strict";var function = 42; function === 42 threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
 PASS (function(){"use strict";var function = 42; function === 42}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS "use strict";function g(function){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS (function(){"use strict";function g(function){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS "use strict";/function/.test(function g(function){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS (function(){"use strict";/function/.test(function g(function){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'function' as a variable name..
-PASS "use strict";try{}catch(function){}; true threw exception SyntaxError: Cannot use the keyword 'function' as a catch variable name..
-PASS (function(){"use strict";try{}catch(function){}; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a catch variable name..
+PASS "use strict";function g(function){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS (function(){"use strict";function g(function){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS "use strict";/function/.test(function g(function){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS (function(){"use strict";/function/.test(function g(function){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'function' as a parameter name..
+PASS "use strict";try{}catch(function){}; true threw exception SyntaxError: Cannot use the keyword 'function' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(function){}; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a catch parameter name..
 PASS "use strict";function function(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'function' as a function name..
 PASS (function(){"use strict";function function(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'function' as a function name..
 PASS "use strict";({ "function": 42 }.function === 42) is true
@@ -547,12 +547,12 @@ PASS var if; true threw exception SyntaxError: Cannot use the keyword 'if' as a
 PASS (function(){var if; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
 PASS var if = 42; if === 42 threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
 PASS (function(){var if = 42; if === 42}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS function g(if){  }; true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS (function(){function g(if){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS /if/.test(function g(if){  }) threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS (function(){/if/.test(function g(if){  })}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS try{}catch(if){}; true threw exception SyntaxError: Cannot use the keyword 'if' as a catch variable name..
-PASS (function(){try{}catch(if){}; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a catch variable name..
+PASS function g(if){  }; true threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS (function(){function g(if){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS /if/.test(function g(if){  }) threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS (function(){/if/.test(function g(if){  })}); true threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS try{}catch(if){}; true threw exception SyntaxError: Cannot use the keyword 'if' as a catch parameter name..
+PASS (function(){try{}catch(if){}; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a catch parameter name..
 PASS function if(){  }; true threw exception SyntaxError: Cannot use the keyword 'if' as a function name..
 PASS (function(){function if(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a function name..
 PASS ({ "if": 42 }.if === 42) is true
@@ -565,12 +565,12 @@ PASS "use strict";var if; true threw exception SyntaxError: Cannot use the keywo
 PASS (function(){"use strict";var if; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
 PASS "use strict";var if = 42; if === 42 threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
 PASS (function(){"use strict";var if = 42; if === 42}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS "use strict";function g(if){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS (function(){"use strict";function g(if){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS "use strict";/if/.test(function g(if){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS (function(){"use strict";/if/.test(function g(if){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'if' as a variable name..
-PASS "use strict";try{}catch(if){}; true threw exception SyntaxError: Cannot use the keyword 'if' as a catch variable name..
-PASS (function(){"use strict";try{}catch(if){}; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a catch variable name..
+PASS "use strict";function g(if){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS (function(){"use strict";function g(if){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS "use strict";/if/.test(function g(if){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS (function(){"use strict";/if/.test(function g(if){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'if' as a parameter name..
+PASS "use strict";try{}catch(if){}; true threw exception SyntaxError: Cannot use the keyword 'if' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(if){}; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a catch parameter name..
 PASS "use strict";function if(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'if' as a function name..
 PASS (function(){"use strict";function if(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'if' as a function name..
 PASS "use strict";({ "if": 42 }.if === 42) is true
@@ -583,12 +583,12 @@ PASS var in; true threw exception SyntaxError: Cannot use the keyword 'in' as a
 PASS (function(){var in; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
 PASS var in = 42; in === 42 threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
 PASS (function(){var in = 42; in === 42}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS function g(in){  }; true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS (function(){function g(in){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS /in/.test(function g(in){  }) threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS (function(){/in/.test(function g(in){  })}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS try{}catch(in){}; true threw exception SyntaxError: Cannot use the keyword 'in' as a catch variable name..
-PASS (function(){try{}catch(in){}; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a catch variable name..
+PASS function g(in){  }; true threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS (function(){function g(in){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS /in/.test(function g(in){  }) threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS (function(){/in/.test(function g(in){  })}); true threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS try{}catch(in){}; true threw exception SyntaxError: Cannot use the keyword 'in' as a catch parameter name..
+PASS (function(){try{}catch(in){}; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a catch parameter name..
 PASS function in(){  }; true threw exception SyntaxError: Cannot use the keyword 'in' as a function name..
 PASS (function(){function in(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a function name..
 PASS ({ "in": 42 }.in === 42) is true
@@ -601,12 +601,12 @@ PASS "use strict";var in; true threw exception SyntaxError: Cannot use the keywo
 PASS (function(){"use strict";var in; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
 PASS "use strict";var in = 42; in === 42 threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
 PASS (function(){"use strict";var in = 42; in === 42}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS "use strict";function g(in){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS (function(){"use strict";function g(in){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS "use strict";/in/.test(function g(in){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS (function(){"use strict";/in/.test(function g(in){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'in' as a variable name..
-PASS "use strict";try{}catch(in){}; true threw exception SyntaxError: Cannot use the keyword 'in' as a catch variable name..
-PASS (function(){"use strict";try{}catch(in){}; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a catch variable name..
+PASS "use strict";function g(in){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS (function(){"use strict";function g(in){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS "use strict";/in/.test(function g(in){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS (function(){"use strict";/in/.test(function g(in){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'in' as a parameter name..
+PASS "use strict";try{}catch(in){}; true threw exception SyntaxError: Cannot use the keyword 'in' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(in){}; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a catch parameter name..
 PASS "use strict";function in(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'in' as a function name..
 PASS (function(){"use strict";function in(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'in' as a function name..
 PASS "use strict";({ "in": 42 }.in === 42) is true
@@ -619,12 +619,12 @@ PASS var instanceof; true threw exception SyntaxError: Cannot use the keyword 'i
 PASS (function(){var instanceof; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
 PASS var instanceof = 42; instanceof === 42 threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
 PASS (function(){var instanceof = 42; instanceof === 42}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS function g(instanceof){  }; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS (function(){function g(instanceof){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS /instanceof/.test(function g(instanceof){  }) threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS (function(){/instanceof/.test(function g(instanceof){  })}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS try{}catch(instanceof){}; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch variable name..
-PASS (function(){try{}catch(instanceof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch variable name..
+PASS function g(instanceof){  }; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS (function(){function g(instanceof){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS /instanceof/.test(function g(instanceof){  }) threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS (function(){/instanceof/.test(function g(instanceof){  })}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS try{}catch(instanceof){}; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch parameter name..
+PASS (function(){try{}catch(instanceof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch parameter name..
 PASS function instanceof(){  }; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a function name..
 PASS (function(){function instanceof(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a function name..
 PASS ({ "instanceof": 42 }.instanceof === 42) is true
@@ -637,12 +637,12 @@ PASS "use strict";var instanceof; true threw exception SyntaxError: Cannot use t
 PASS (function(){"use strict";var instanceof; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
 PASS "use strict";var instanceof = 42; instanceof === 42 threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
 PASS (function(){"use strict";var instanceof = 42; instanceof === 42}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS "use strict";function g(instanceof){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS (function(){"use strict";function g(instanceof){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS "use strict";/instanceof/.test(function g(instanceof){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS (function(){"use strict";/instanceof/.test(function g(instanceof){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a variable name..
-PASS "use strict";try{}catch(instanceof){}; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch variable name..
-PASS (function(){"use strict";try{}catch(instanceof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch variable name..
+PASS "use strict";function g(instanceof){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS (function(){"use strict";function g(instanceof){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS "use strict";/instanceof/.test(function g(instanceof){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS (function(){"use strict";/instanceof/.test(function g(instanceof){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a parameter name..
+PASS "use strict";try{}catch(instanceof){}; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(instanceof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a catch parameter name..
 PASS "use strict";function instanceof(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a function name..
 PASS (function(){"use strict";function instanceof(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'instanceof' as a function name..
 PASS "use strict";({ "instanceof": 42 }.instanceof === 42) is true
@@ -655,12 +655,12 @@ PASS var new; true threw exception SyntaxError: Cannot use the keyword 'new' as
 PASS (function(){var new; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
 PASS var new = 42; new === 42 threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
 PASS (function(){var new = 42; new === 42}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS function g(new){  }; true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS (function(){function g(new){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS /new/.test(function g(new){  }) threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS (function(){/new/.test(function g(new){  })}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS try{}catch(new){}; true threw exception SyntaxError: Cannot use the keyword 'new' as a catch variable name..
-PASS (function(){try{}catch(new){}; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a catch variable name..
+PASS function g(new){  }; true threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS (function(){function g(new){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS /new/.test(function g(new){  }) threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS (function(){/new/.test(function g(new){  })}); true threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS try{}catch(new){}; true threw exception SyntaxError: Cannot use the keyword 'new' as a catch parameter name..
+PASS (function(){try{}catch(new){}; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a catch parameter name..
 PASS function new(){  }; true threw exception SyntaxError: Cannot use the keyword 'new' as a function name..
 PASS (function(){function new(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a function name..
 PASS ({ "new": 42 }.new === 42) is true
@@ -673,12 +673,12 @@ PASS "use strict";var new; true threw exception SyntaxError: Cannot use the keyw
 PASS (function(){"use strict";var new; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
 PASS "use strict";var new = 42; new === 42 threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
 PASS (function(){"use strict";var new = 42; new === 42}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS "use strict";function g(new){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS (function(){"use strict";function g(new){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS "use strict";/new/.test(function g(new){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS (function(){"use strict";/new/.test(function g(new){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'new' as a variable name..
-PASS "use strict";try{}catch(new){}; true threw exception SyntaxError: Cannot use the keyword 'new' as a catch variable name..
-PASS (function(){"use strict";try{}catch(new){}; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a catch variable name..
+PASS "use strict";function g(new){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS (function(){"use strict";function g(new){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS "use strict";/new/.test(function g(new){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS (function(){"use strict";/new/.test(function g(new){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'new' as a parameter name..
+PASS "use strict";try{}catch(new){}; true threw exception SyntaxError: Cannot use the keyword 'new' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(new){}; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a catch parameter name..
 PASS "use strict";function new(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'new' as a function name..
 PASS (function(){"use strict";function new(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'new' as a function name..
 PASS "use strict";({ "new": 42 }.new === 42) is true
@@ -691,12 +691,12 @@ PASS var return; true threw exception SyntaxError: Cannot use the keyword 'retur
 PASS (function(){var return; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
 PASS var return = 42; return === 42 threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
 PASS (function(){var return = 42; return === 42}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS function g(return){  }; true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS (function(){function g(return){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS /return/.test(function g(return){  }) threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS (function(){/return/.test(function g(return){  })}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS try{}catch(return){}; true threw exception SyntaxError: Cannot use the keyword 'return' as a catch variable name..
-PASS (function(){try{}catch(return){}; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a catch variable name..
+PASS function g(return){  }; true threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS (function(){function g(return){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS /return/.test(function g(return){  }) threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS (function(){/return/.test(function g(return){  })}); true threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS try{}catch(return){}; true threw exception SyntaxError: Cannot use the keyword 'return' as a catch parameter name..
+PASS (function(){try{}catch(return){}; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a catch parameter name..
 PASS function return(){  }; true threw exception SyntaxError: Cannot use the keyword 'return' as a function name..
 PASS (function(){function return(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a function name..
 PASS ({ "return": 42 }.return === 42) is true
@@ -709,12 +709,12 @@ PASS "use strict";var return; true threw exception SyntaxError: Cannot use the k
 PASS (function(){"use strict";var return; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
 PASS "use strict";var return = 42; return === 42 threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
 PASS (function(){"use strict";var return = 42; return === 42}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS "use strict";function g(return){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS (function(){"use strict";function g(return){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS "use strict";/return/.test(function g(return){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS (function(){"use strict";/return/.test(function g(return){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'return' as a variable name..
-PASS "use strict";try{}catch(return){}; true threw exception SyntaxError: Cannot use the keyword 'return' as a catch variable name..
-PASS (function(){"use strict";try{}catch(return){}; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a catch variable name..
+PASS "use strict";function g(return){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS (function(){"use strict";function g(return){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS "use strict";/return/.test(function g(return){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS (function(){"use strict";/return/.test(function g(return){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'return' as a parameter name..
+PASS "use strict";try{}catch(return){}; true threw exception SyntaxError: Cannot use the keyword 'return' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(return){}; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a catch parameter name..
 PASS "use strict";function return(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'return' as a function name..
 PASS (function(){"use strict";function return(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'return' as a function name..
 PASS "use strict";({ "return": 42 }.return === 42) is true
@@ -727,12 +727,12 @@ PASS var switch; true threw exception SyntaxError: Cannot use the keyword 'switc
 PASS (function(){var switch; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
 PASS var switch = 42; switch === 42 threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
 PASS (function(){var switch = 42; switch === 42}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS function g(switch){  }; true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS (function(){function g(switch){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS /switch/.test(function g(switch){  }) threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS (function(){/switch/.test(function g(switch){  })}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS try{}catch(switch){}; true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch variable name..
-PASS (function(){try{}catch(switch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch variable name..
+PASS function g(switch){  }; true threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS (function(){function g(switch){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS /switch/.test(function g(switch){  }) threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS (function(){/switch/.test(function g(switch){  })}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS try{}catch(switch){}; true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch parameter name..
+PASS (function(){try{}catch(switch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch parameter name..
 PASS function switch(){  }; true threw exception SyntaxError: Cannot use the keyword 'switch' as a function name..
 PASS (function(){function switch(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a function name..
 PASS ({ "switch": 42 }.switch === 42) is true
@@ -745,12 +745,12 @@ PASS "use strict";var switch; true threw exception SyntaxError: Cannot use the k
 PASS (function(){"use strict";var switch; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
 PASS "use strict";var switch = 42; switch === 42 threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
 PASS (function(){"use strict";var switch = 42; switch === 42}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS "use strict";function g(switch){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS (function(){"use strict";function g(switch){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS "use strict";/switch/.test(function g(switch){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS (function(){"use strict";/switch/.test(function g(switch){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a variable name..
-PASS "use strict";try{}catch(switch){}; true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch variable name..
-PASS (function(){"use strict";try{}catch(switch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch variable name..
+PASS "use strict";function g(switch){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS (function(){"use strict";function g(switch){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS "use strict";/switch/.test(function g(switch){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS (function(){"use strict";/switch/.test(function g(switch){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a parameter name..
+PASS "use strict";try{}catch(switch){}; true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(switch){}; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a catch parameter name..
 PASS "use strict";function switch(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'switch' as a function name..
 PASS (function(){"use strict";function switch(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'switch' as a function name..
 PASS "use strict";({ "switch": 42 }.switch === 42) is true
@@ -763,12 +763,12 @@ PASS var this; true threw exception SyntaxError: Cannot use the keyword 'this' a
 PASS (function(){var this; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
 PASS var this = 42; this === 42 threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
 PASS (function(){var this = 42; this === 42}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS function g(this){  }; true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS (function(){function g(this){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS /this/.test(function g(this){  }) threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS (function(){/this/.test(function g(this){  })}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS try{}catch(this){}; true threw exception SyntaxError: Cannot use the keyword 'this' as a catch variable name..
-PASS (function(){try{}catch(this){}; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a catch variable name..
+PASS function g(this){  }; true threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS (function(){function g(this){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS /this/.test(function g(this){  }) threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS (function(){/this/.test(function g(this){  })}); true threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS try{}catch(this){}; true threw exception SyntaxError: Cannot use the keyword 'this' as a catch parameter name..
+PASS (function(){try{}catch(this){}; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a catch parameter name..
 PASS function this(){  }; true threw exception SyntaxError: Cannot use the keyword 'this' as a function name..
 PASS (function(){function this(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a function name..
 PASS ({ "this": 42 }.this === 42) is true
@@ -781,12 +781,12 @@ PASS "use strict";var this; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var this; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
 PASS "use strict";var this = 42; this === 42 threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
 PASS (function(){"use strict";var this = 42; this === 42}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS "use strict";function g(this){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS (function(){"use strict";function g(this){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS "use strict";/this/.test(function g(this){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS (function(){"use strict";/this/.test(function g(this){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'this' as a variable name..
-PASS "use strict";try{}catch(this){}; true threw exception SyntaxError: Cannot use the keyword 'this' as a catch variable name..
-PASS (function(){"use strict";try{}catch(this){}; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a catch variable name..
+PASS "use strict";function g(this){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS (function(){"use strict";function g(this){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS "use strict";/this/.test(function g(this){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS (function(){"use strict";/this/.test(function g(this){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'this' as a parameter name..
+PASS "use strict";try{}catch(this){}; true threw exception SyntaxError: Cannot use the keyword 'this' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(this){}; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a catch parameter name..
 PASS "use strict";function this(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'this' as a function name..
 PASS (function(){"use strict";function this(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'this' as a function name..
 PASS "use strict";({ "this": 42 }.this === 42) is true
@@ -799,12 +799,12 @@ PASS var throw; true threw exception SyntaxError: Cannot use the keyword 'throw'
 PASS (function(){var throw; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
 PASS var throw = 42; throw === 42 threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
 PASS (function(){var throw = 42; throw === 42}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS function g(throw){  }; true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS (function(){function g(throw){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS /throw/.test(function g(throw){  }) threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS (function(){/throw/.test(function g(throw){  })}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS try{}catch(throw){}; true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch variable name..
-PASS (function(){try{}catch(throw){}; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch variable name..
+PASS function g(throw){  }; true threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS (function(){function g(throw){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS /throw/.test(function g(throw){  }) threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS (function(){/throw/.test(function g(throw){  })}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS try{}catch(throw){}; true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch parameter name..
+PASS (function(){try{}catch(throw){}; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch parameter name..
 PASS function throw(){  }; true threw exception SyntaxError: Cannot use the keyword 'throw' as a function name..
 PASS (function(){function throw(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a function name..
 PASS ({ "throw": 42 }.throw === 42) is true
@@ -817,12 +817,12 @@ PASS "use strict";var throw; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var throw; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
 PASS "use strict";var throw = 42; throw === 42 threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
 PASS (function(){"use strict";var throw = 42; throw === 42}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS "use strict";function g(throw){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS (function(){"use strict";function g(throw){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS "use strict";/throw/.test(function g(throw){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS (function(){"use strict";/throw/.test(function g(throw){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a variable name..
-PASS "use strict";try{}catch(throw){}; true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch variable name..
-PASS (function(){"use strict";try{}catch(throw){}; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch variable name..
+PASS "use strict";function g(throw){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS (function(){"use strict";function g(throw){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS "use strict";/throw/.test(function g(throw){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS (function(){"use strict";/throw/.test(function g(throw){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a parameter name..
+PASS "use strict";try{}catch(throw){}; true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(throw){}; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a catch parameter name..
 PASS "use strict";function throw(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'throw' as a function name..
 PASS (function(){"use strict";function throw(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'throw' as a function name..
 PASS "use strict";({ "throw": 42 }.throw === 42) is true
@@ -835,12 +835,12 @@ PASS var try; true threw exception SyntaxError: Cannot use the keyword 'try' as
 PASS (function(){var try; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
 PASS var try = 42; try === 42 threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
 PASS (function(){var try = 42; try === 42}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS function g(try){  }; true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS (function(){function g(try){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS /try/.test(function g(try){  }) threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS (function(){/try/.test(function g(try){  })}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS try{}catch(try){}; true threw exception SyntaxError: Cannot use the keyword 'try' as a catch variable name..
-PASS (function(){try{}catch(try){}; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a catch variable name..
+PASS function g(try){  }; true threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS (function(){function g(try){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS /try/.test(function g(try){  }) threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS (function(){/try/.test(function g(try){  })}); true threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS try{}catch(try){}; true threw exception SyntaxError: Cannot use the keyword 'try' as a catch parameter name..
+PASS (function(){try{}catch(try){}; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a catch parameter name..
 PASS function try(){  }; true threw exception SyntaxError: Cannot use the keyword 'try' as a function name..
 PASS (function(){function try(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a function name..
 PASS ({ "try": 42 }.try === 42) is true
@@ -853,12 +853,12 @@ PASS "use strict";var try; true threw exception SyntaxError: Cannot use the keyw
 PASS (function(){"use strict";var try; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
 PASS "use strict";var try = 42; try === 42 threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
 PASS (function(){"use strict";var try = 42; try === 42}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS "use strict";function g(try){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS (function(){"use strict";function g(try){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS "use strict";/try/.test(function g(try){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS (function(){"use strict";/try/.test(function g(try){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'try' as a variable name..
-PASS "use strict";try{}catch(try){}; true threw exception SyntaxError: Cannot use the keyword 'try' as a catch variable name..
-PASS (function(){"use strict";try{}catch(try){}; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a catch variable name..
+PASS "use strict";function g(try){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS (function(){"use strict";function g(try){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS "use strict";/try/.test(function g(try){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS (function(){"use strict";/try/.test(function g(try){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'try' as a parameter name..
+PASS "use strict";try{}catch(try){}; true threw exception SyntaxError: Cannot use the keyword 'try' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(try){}; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a catch parameter name..
 PASS "use strict";function try(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'try' as a function name..
 PASS (function(){"use strict";function try(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'try' as a function name..
 PASS "use strict";({ "try": 42 }.try === 42) is true
@@ -871,12 +871,12 @@ PASS var typeof; true threw exception SyntaxError: Cannot use the keyword 'typeo
 PASS (function(){var typeof; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
 PASS var typeof = 42; typeof === 42 threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
 PASS (function(){var typeof = 42; typeof === 42}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS function g(typeof){  }; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS (function(){function g(typeof){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS /typeof/.test(function g(typeof){  }) threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS (function(){/typeof/.test(function g(typeof){  })}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS try{}catch(typeof){}; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch variable name..
-PASS (function(){try{}catch(typeof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch variable name..
+PASS function g(typeof){  }; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS (function(){function g(typeof){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS /typeof/.test(function g(typeof){  }) threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS (function(){/typeof/.test(function g(typeof){  })}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS try{}catch(typeof){}; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch parameter name..
+PASS (function(){try{}catch(typeof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch parameter name..
 PASS function typeof(){  }; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a function name..
 PASS (function(){function typeof(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a function name..
 PASS ({ "typeof": 42 }.typeof === 42) is true
@@ -889,12 +889,12 @@ PASS "use strict";var typeof; true threw exception SyntaxError: Cannot use the k
 PASS (function(){"use strict";var typeof; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
 PASS "use strict";var typeof = 42; typeof === 42 threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
 PASS (function(){"use strict";var typeof = 42; typeof === 42}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS "use strict";function g(typeof){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS (function(){"use strict";function g(typeof){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS "use strict";/typeof/.test(function g(typeof){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS (function(){"use strict";/typeof/.test(function g(typeof){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a variable name..
-PASS "use strict";try{}catch(typeof){}; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch variable name..
-PASS (function(){"use strict";try{}catch(typeof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch variable name..
+PASS "use strict";function g(typeof){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS (function(){"use strict";function g(typeof){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS "use strict";/typeof/.test(function g(typeof){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS (function(){"use strict";/typeof/.test(function g(typeof){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a parameter name..
+PASS "use strict";try{}catch(typeof){}; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(typeof){}; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a catch parameter name..
 PASS "use strict";function typeof(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'typeof' as a function name..
 PASS (function(){"use strict";function typeof(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'typeof' as a function name..
 PASS "use strict";({ "typeof": 42 }.typeof === 42) is true
@@ -907,12 +907,12 @@ PASS var var; true threw exception SyntaxError: Cannot use the keyword 'var' as
 PASS (function(){var var; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
 PASS var var = 42; var === 42 threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
 PASS (function(){var var = 42; var === 42}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS function g(var){  }; true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS (function(){function g(var){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS /var/.test(function g(var){  }) threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS (function(){/var/.test(function g(var){  })}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS try{}catch(var){}; true threw exception SyntaxError: Cannot use the keyword 'var' as a catch variable name..
-PASS (function(){try{}catch(var){}; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a catch variable name..
+PASS function g(var){  }; true threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS (function(){function g(var){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS /var/.test(function g(var){  }) threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS (function(){/var/.test(function g(var){  })}); true threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS try{}catch(var){}; true threw exception SyntaxError: Cannot use the keyword 'var' as a catch parameter name..
+PASS (function(){try{}catch(var){}; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a catch parameter name..
 PASS function var(){  }; true threw exception SyntaxError: Cannot use the keyword 'var' as a function name..
 PASS (function(){function var(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a function name..
 PASS ({ "var": 42 }.var === 42) is true
@@ -925,12 +925,12 @@ PASS "use strict";var var; true threw exception SyntaxError: Cannot use the keyw
 PASS (function(){"use strict";var var; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
 PASS "use strict";var var = 42; var === 42 threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
 PASS (function(){"use strict";var var = 42; var === 42}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS "use strict";function g(var){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS (function(){"use strict";function g(var){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS "use strict";/var/.test(function g(var){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS (function(){"use strict";/var/.test(function g(var){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'var' as a variable name..
-PASS "use strict";try{}catch(var){}; true threw exception SyntaxError: Cannot use the keyword 'var' as a catch variable name..
-PASS (function(){"use strict";try{}catch(var){}; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a catch variable name..
+PASS "use strict";function g(var){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS (function(){"use strict";function g(var){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS "use strict";/var/.test(function g(var){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS (function(){"use strict";/var/.test(function g(var){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'var' as a parameter name..
+PASS "use strict";try{}catch(var){}; true threw exception SyntaxError: Cannot use the keyword 'var' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(var){}; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a catch parameter name..
 PASS "use strict";function var(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'var' as a function name..
 PASS (function(){"use strict";function var(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'var' as a function name..
 PASS "use strict";({ "var": 42 }.var === 42) is true
@@ -943,12 +943,12 @@ PASS var void; true threw exception SyntaxError: Cannot use the keyword 'void' a
 PASS (function(){var void; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
 PASS var void = 42; void === 42 threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
 PASS (function(){var void = 42; void === 42}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS function g(void){  }; true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS (function(){function g(void){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS /void/.test(function g(void){  }) threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS (function(){/void/.test(function g(void){  })}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS try{}catch(void){}; true threw exception SyntaxError: Cannot use the keyword 'void' as a catch variable name..
-PASS (function(){try{}catch(void){}; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a catch variable name..
+PASS function g(void){  }; true threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS (function(){function g(void){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS /void/.test(function g(void){  }) threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS (function(){/void/.test(function g(void){  })}); true threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS try{}catch(void){}; true threw exception SyntaxError: Cannot use the keyword 'void' as a catch parameter name..
+PASS (function(){try{}catch(void){}; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a catch parameter name..
 PASS function void(){  }; true threw exception SyntaxError: Cannot use the keyword 'void' as a function name..
 PASS (function(){function void(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a function name..
 PASS ({ "void": 42 }.void === 42) is true
@@ -961,12 +961,12 @@ PASS "use strict";var void; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var void; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
 PASS "use strict";var void = 42; void === 42 threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
 PASS (function(){"use strict";var void = 42; void === 42}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS "use strict";function g(void){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS (function(){"use strict";function g(void){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS "use strict";/void/.test(function g(void){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS (function(){"use strict";/void/.test(function g(void){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'void' as a variable name..
-PASS "use strict";try{}catch(void){}; true threw exception SyntaxError: Cannot use the keyword 'void' as a catch variable name..
-PASS (function(){"use strict";try{}catch(void){}; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a catch variable name..
+PASS "use strict";function g(void){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS (function(){"use strict";function g(void){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS "use strict";/void/.test(function g(void){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS (function(){"use strict";/void/.test(function g(void){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'void' as a parameter name..
+PASS "use strict";try{}catch(void){}; true threw exception SyntaxError: Cannot use the keyword 'void' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(void){}; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a catch parameter name..
 PASS "use strict";function void(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'void' as a function name..
 PASS (function(){"use strict";function void(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'void' as a function name..
 PASS "use strict";({ "void": 42 }.void === 42) is true
@@ -979,12 +979,12 @@ PASS var while; true threw exception SyntaxError: Cannot use the keyword 'while'
 PASS (function(){var while; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
 PASS var while = 42; while === 42 threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
 PASS (function(){var while = 42; while === 42}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS function g(while){  }; true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS (function(){function g(while){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS /while/.test(function g(while){  }) threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS (function(){/while/.test(function g(while){  })}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS try{}catch(while){}; true threw exception SyntaxError: Cannot use the keyword 'while' as a catch variable name..
-PASS (function(){try{}catch(while){}; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a catch variable name..
+PASS function g(while){  }; true threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS (function(){function g(while){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS /while/.test(function g(while){  }) threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS (function(){/while/.test(function g(while){  })}); true threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS try{}catch(while){}; true threw exception SyntaxError: Cannot use the keyword 'while' as a catch parameter name..
+PASS (function(){try{}catch(while){}; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a catch parameter name..
 PASS function while(){  }; true threw exception SyntaxError: Cannot use the keyword 'while' as a function name..
 PASS (function(){function while(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a function name..
 PASS ({ "while": 42 }.while === 42) is true
@@ -997,12 +997,12 @@ PASS "use strict";var while; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var while; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
 PASS "use strict";var while = 42; while === 42 threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
 PASS (function(){"use strict";var while = 42; while === 42}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS "use strict";function g(while){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS (function(){"use strict";function g(while){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS "use strict";/while/.test(function g(while){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS (function(){"use strict";/while/.test(function g(while){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'while' as a variable name..
-PASS "use strict";try{}catch(while){}; true threw exception SyntaxError: Cannot use the keyword 'while' as a catch variable name..
-PASS (function(){"use strict";try{}catch(while){}; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a catch variable name..
+PASS "use strict";function g(while){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS (function(){"use strict";function g(while){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS "use strict";/while/.test(function g(while){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS (function(){"use strict";/while/.test(function g(while){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'while' as a parameter name..
+PASS "use strict";try{}catch(while){}; true threw exception SyntaxError: Cannot use the keyword 'while' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(while){}; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a catch parameter name..
 PASS "use strict";function while(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'while' as a function name..
 PASS (function(){"use strict";function while(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'while' as a function name..
 PASS "use strict";({ "while": 42 }.while === 42) is true
@@ -1015,12 +1015,12 @@ PASS var with; true threw exception SyntaxError: Cannot use the keyword 'with' a
 PASS (function(){var with; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
 PASS var with = 42; with === 42 threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
 PASS (function(){var with = 42; with === 42}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS function g(with){  }; true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS (function(){function g(with){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS /with/.test(function g(with){  }) threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS (function(){/with/.test(function g(with){  })}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS try{}catch(with){}; true threw exception SyntaxError: Cannot use the keyword 'with' as a catch variable name..
-PASS (function(){try{}catch(with){}; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a catch variable name..
+PASS function g(with){  }; true threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS (function(){function g(with){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS /with/.test(function g(with){  }) threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS (function(){/with/.test(function g(with){  })}); true threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS try{}catch(with){}; true threw exception SyntaxError: Cannot use the keyword 'with' as a catch parameter name..
+PASS (function(){try{}catch(with){}; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a catch parameter name..
 PASS function with(){  }; true threw exception SyntaxError: Cannot use the keyword 'with' as a function name..
 PASS (function(){function with(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a function name..
 PASS ({ "with": 42 }.with === 42) is true
@@ -1033,12 +1033,12 @@ PASS "use strict";var with; true threw exception SyntaxError: Cannot use the key
 PASS (function(){"use strict";var with; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
 PASS "use strict";var with = 42; with === 42 threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
 PASS (function(){"use strict";var with = 42; with === 42}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS "use strict";function g(with){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS (function(){"use strict";function g(with){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS "use strict";/with/.test(function g(with){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS (function(){"use strict";/with/.test(function g(with){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'with' as a variable name..
-PASS "use strict";try{}catch(with){}; true threw exception SyntaxError: Cannot use the keyword 'with' as a catch variable name..
-PASS (function(){"use strict";try{}catch(with){}; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a catch variable name..
+PASS "use strict";function g(with){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS (function(){"use strict";function g(with){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS "use strict";/with/.test(function g(with){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS (function(){"use strict";/with/.test(function g(with){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'with' as a parameter name..
+PASS "use strict";try{}catch(with){}; true threw exception SyntaxError: Cannot use the keyword 'with' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(with){}; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a catch parameter name..
 PASS "use strict";function with(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'with' as a function name..
 PASS (function(){"use strict";function with(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'with' as a function name..
 PASS "use strict";({ "with": 42 }.with === 42) is true
@@ -1051,12 +1051,12 @@ PASS var class; true threw exception SyntaxError: Cannot use the keyword 'class'
 PASS (function(){var class; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
 PASS var class = 42; class === 42 threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
 PASS (function(){var class = 42; class === 42}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS function g(class){  }; true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS (function(){function g(class){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS /class/.test(function g(class){  }) threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS (function(){/class/.test(function g(class){  })}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS try{}catch(class){}; true threw exception SyntaxError: Cannot use the keyword 'class' as a catch variable name..
-PASS (function(){try{}catch(class){}; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a catch variable name..
+PASS function g(class){  }; true threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS (function(){function g(class){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS /class/.test(function g(class){  }) threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS (function(){/class/.test(function g(class){  })}); true threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS try{}catch(class){}; true threw exception SyntaxError: Cannot use the keyword 'class' as a catch parameter name..
+PASS (function(){try{}catch(class){}; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a catch parameter name..
 PASS function class(){  }; true threw exception SyntaxError: Cannot use the keyword 'class' as a function name..
 PASS (function(){function class(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a function name..
 PASS ({ "class": 42 }.class === 42) is true
@@ -1069,12 +1069,12 @@ PASS "use strict";var class; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var class; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
 PASS "use strict";var class = 42; class === 42 threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
 PASS (function(){"use strict";var class = 42; class === 42}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS "use strict";function g(class){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS (function(){"use strict";function g(class){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS "use strict";/class/.test(function g(class){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS (function(){"use strict";/class/.test(function g(class){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'class' as a variable name..
-PASS "use strict";try{}catch(class){}; true threw exception SyntaxError: Cannot use the keyword 'class' as a catch variable name..
-PASS (function(){"use strict";try{}catch(class){}; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a catch variable name..
+PASS "use strict";function g(class){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS (function(){"use strict";function g(class){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS "use strict";/class/.test(function g(class){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS (function(){"use strict";/class/.test(function g(class){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'class' as a parameter name..
+PASS "use strict";try{}catch(class){}; true threw exception SyntaxError: Cannot use the keyword 'class' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(class){}; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a catch parameter name..
 PASS "use strict";function class(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'class' as a function name..
 PASS (function(){"use strict";function class(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'class' as a function name..
 PASS "use strict";({ "class": 42 }.class === 42) is true
@@ -1087,12 +1087,12 @@ PASS var const; true threw exception SyntaxError: Cannot use the keyword 'const'
 PASS (function(){var const; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
 PASS var const = 42; const === 42 threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
 PASS (function(){var const = 42; const === 42}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS function g(const){  }; true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS (function(){function g(const){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS /const/.test(function g(const){  }) threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS (function(){/const/.test(function g(const){  })}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS try{}catch(const){}; true threw exception SyntaxError: Cannot use the keyword 'const' as a catch variable name..
-PASS (function(){try{}catch(const){}; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a catch variable name..
+PASS function g(const){  }; true threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS (function(){function g(const){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS /const/.test(function g(const){  }) threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS (function(){/const/.test(function g(const){  })}); true threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS try{}catch(const){}; true threw exception SyntaxError: Cannot use the keyword 'const' as a catch parameter name..
+PASS (function(){try{}catch(const){}; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a catch parameter name..
 PASS function const(){  }; true threw exception SyntaxError: Cannot use the keyword 'const' as a function name..
 PASS (function(){function const(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a function name..
 PASS ({ "const": 42 }.const === 42) is true
@@ -1105,12 +1105,12 @@ PASS "use strict";var const; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var const; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
 PASS "use strict";var const = 42; const === 42 threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
 PASS (function(){"use strict";var const = 42; const === 42}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS "use strict";function g(const){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS (function(){"use strict";function g(const){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS "use strict";/const/.test(function g(const){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS (function(){"use strict";/const/.test(function g(const){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'const' as a variable name..
-PASS "use strict";try{}catch(const){}; true threw exception SyntaxError: Cannot use the keyword 'const' as a catch variable name..
-PASS (function(){"use strict";try{}catch(const){}; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a catch variable name..
+PASS "use strict";function g(const){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS (function(){"use strict";function g(const){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS "use strict";/const/.test(function g(const){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS (function(){"use strict";/const/.test(function g(const){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'const' as a parameter name..
+PASS "use strict";try{}catch(const){}; true threw exception SyntaxError: Cannot use the keyword 'const' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(const){}; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a catch parameter name..
 PASS "use strict";function const(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'const' as a function name..
 PASS (function(){"use strict";function const(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'const' as a function name..
 PASS "use strict";({ "const": 42 }.const === 42) is true
@@ -1123,12 +1123,12 @@ PASS var enum; true threw exception SyntaxError: Cannot use the reserved word 'e
 PASS (function(){var enum; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
 PASS var enum = 42; enum === 42 threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
 PASS (function(){var enum = 42; enum === 42}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS function g(enum){  }; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS (function(){function g(enum){  }; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS /enum/.test(function g(enum){  }) threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS (function(){/enum/.test(function g(enum){  })}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS try{}catch(enum){}; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch variable name..
-PASS (function(){try{}catch(enum){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch variable name..
+PASS function g(enum){  }; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS (function(){function g(enum){  }; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS /enum/.test(function g(enum){  }) threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS (function(){/enum/.test(function g(enum){  })}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS try{}catch(enum){}; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch parameter name..
+PASS (function(){try{}catch(enum){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch parameter name..
 PASS function enum(){  }; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a function name..
 PASS (function(){function enum(){  }; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a function name..
 PASS ({ "enum": 42 }.enum === 42) is true
@@ -1141,12 +1141,12 @@ PASS "use strict";var enum; true threw exception SyntaxError: Cannot use the res
 PASS (function(){"use strict";var enum; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
 PASS "use strict";var enum = 42; enum === 42 threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
 PASS (function(){"use strict";var enum = 42; enum === 42}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS "use strict";function g(enum){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS (function(){"use strict";function g(enum){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS "use strict";/enum/.test(function g(enum){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS (function(){"use strict";/enum/.test(function g(enum){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a variable name..
-PASS "use strict";try{}catch(enum){}; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch variable name..
-PASS (function(){"use strict";try{}catch(enum){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch variable name..
+PASS "use strict";function g(enum){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS (function(){"use strict";function g(enum){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS "use strict";/enum/.test(function g(enum){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS (function(){"use strict";/enum/.test(function g(enum){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a parameter name..
+PASS "use strict";try{}catch(enum){}; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(enum){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a catch parameter name..
 PASS "use strict";function enum(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'enum' as a function name..
 PASS (function(){"use strict";function enum(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'enum' as a function name..
 PASS "use strict";({ "enum": 42 }.enum === 42) is true
@@ -1159,12 +1159,12 @@ PASS var export; true threw exception SyntaxError: Cannot use the keyword 'expor
 PASS (function(){var export; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
 PASS var export = 42; export === 42 threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
 PASS (function(){var export = 42; export === 42}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS function g(export){  }; true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS (function(){function g(export){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS /export/.test(function g(export){  }) threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS (function(){/export/.test(function g(export){  })}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS try{}catch(export){}; true threw exception SyntaxError: Cannot use the keyword 'export' as a catch variable name..
-PASS (function(){try{}catch(export){}; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a catch variable name..
+PASS function g(export){  }; true threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS (function(){function g(export){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS /export/.test(function g(export){  }) threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS (function(){/export/.test(function g(export){  })}); true threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS try{}catch(export){}; true threw exception SyntaxError: Cannot use the keyword 'export' as a catch parameter name..
+PASS (function(){try{}catch(export){}; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a catch parameter name..
 PASS function export(){  }; true threw exception SyntaxError: Cannot use the keyword 'export' as a function name..
 PASS (function(){function export(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a function name..
 PASS ({ "export": 42 }.export === 42) is true
@@ -1177,12 +1177,12 @@ PASS "use strict";var export; true threw exception SyntaxError: Cannot use the k
 PASS (function(){"use strict";var export; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
 PASS "use strict";var export = 42; export === 42 threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
 PASS (function(){"use strict";var export = 42; export === 42}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS "use strict";function g(export){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS (function(){"use strict";function g(export){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS "use strict";/export/.test(function g(export){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS (function(){"use strict";/export/.test(function g(export){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'export' as a variable name..
-PASS "use strict";try{}catch(export){}; true threw exception SyntaxError: Cannot use the keyword 'export' as a catch variable name..
-PASS (function(){"use strict";try{}catch(export){}; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a catch variable name..
+PASS "use strict";function g(export){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS (function(){"use strict";function g(export){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS "use strict";/export/.test(function g(export){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS (function(){"use strict";/export/.test(function g(export){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'export' as a parameter name..
+PASS "use strict";try{}catch(export){}; true threw exception SyntaxError: Cannot use the keyword 'export' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(export){}; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a catch parameter name..
 PASS "use strict";function export(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'export' as a function name..
 PASS (function(){"use strict";function export(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'export' as a function name..
 PASS "use strict";({ "export": 42 }.export === 42) is true
@@ -1195,12 +1195,12 @@ PASS var extends; true threw exception SyntaxError: Cannot use the keyword 'exte
 PASS (function(){var extends; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
 PASS var extends = 42; extends === 42 threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
 PASS (function(){var extends = 42; extends === 42}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS function g(extends){  }; true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS (function(){function g(extends){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS /extends/.test(function g(extends){  }) threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS (function(){/extends/.test(function g(extends){  })}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS try{}catch(extends){}; true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch variable name..
-PASS (function(){try{}catch(extends){}; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch variable name..
+PASS function g(extends){  }; true threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS (function(){function g(extends){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS /extends/.test(function g(extends){  }) threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS (function(){/extends/.test(function g(extends){  })}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS try{}catch(extends){}; true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch parameter name..
+PASS (function(){try{}catch(extends){}; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch parameter name..
 PASS function extends(){  }; true threw exception SyntaxError: Cannot use the keyword 'extends' as a function name..
 PASS (function(){function extends(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a function name..
 PASS ({ "extends": 42 }.extends === 42) is true
@@ -1213,12 +1213,12 @@ PASS "use strict";var extends; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var extends; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
 PASS "use strict";var extends = 42; extends === 42 threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
 PASS (function(){"use strict";var extends = 42; extends === 42}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS "use strict";function g(extends){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS (function(){"use strict";function g(extends){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS "use strict";/extends/.test(function g(extends){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS (function(){"use strict";/extends/.test(function g(extends){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a variable name..
-PASS "use strict";try{}catch(extends){}; true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch variable name..
-PASS (function(){"use strict";try{}catch(extends){}; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch variable name..
+PASS "use strict";function g(extends){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS (function(){"use strict";function g(extends){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS "use strict";/extends/.test(function g(extends){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS (function(){"use strict";/extends/.test(function g(extends){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a parameter name..
+PASS "use strict";try{}catch(extends){}; true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(extends){}; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a catch parameter name..
 PASS "use strict";function extends(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'extends' as a function name..
 PASS (function(){"use strict";function extends(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'extends' as a function name..
 PASS "use strict";({ "extends": 42 }.extends === 42) is true
@@ -1231,12 +1231,12 @@ PASS var import; true threw exception SyntaxError: Cannot use the keyword 'impor
 PASS (function(){var import; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
 PASS var import = 42; import === 42 threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
 PASS (function(){var import = 42; import === 42}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS function g(import){  }; true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS (function(){function g(import){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS /import/.test(function g(import){  }) threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS (function(){/import/.test(function g(import){  })}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS try{}catch(import){}; true threw exception SyntaxError: Cannot use the keyword 'import' as a catch variable name..
-PASS (function(){try{}catch(import){}; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a catch variable name..
+PASS function g(import){  }; true threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS (function(){function g(import){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS /import/.test(function g(import){  }) threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS (function(){/import/.test(function g(import){  })}); true threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS try{}catch(import){}; true threw exception SyntaxError: Cannot use the keyword 'import' as a catch parameter name..
+PASS (function(){try{}catch(import){}; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a catch parameter name..
 PASS function import(){  }; true threw exception SyntaxError: Cannot use the keyword 'import' as a function name..
 PASS (function(){function import(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a function name..
 PASS ({ "import": 42 }.import === 42) is true
@@ -1249,12 +1249,12 @@ PASS "use strict";var import; true threw exception SyntaxError: Cannot use the k
 PASS (function(){"use strict";var import; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
 PASS "use strict";var import = 42; import === 42 threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
 PASS (function(){"use strict";var import = 42; import === 42}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS "use strict";function g(import){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS (function(){"use strict";function g(import){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS "use strict";/import/.test(function g(import){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS (function(){"use strict";/import/.test(function g(import){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'import' as a variable name..
-PASS "use strict";try{}catch(import){}; true threw exception SyntaxError: Cannot use the keyword 'import' as a catch variable name..
-PASS (function(){"use strict";try{}catch(import){}; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a catch variable name..
+PASS "use strict";function g(import){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS (function(){"use strict";function g(import){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS "use strict";/import/.test(function g(import){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS (function(){"use strict";/import/.test(function g(import){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'import' as a parameter name..
+PASS "use strict";try{}catch(import){}; true threw exception SyntaxError: Cannot use the keyword 'import' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(import){}; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a catch parameter name..
 PASS "use strict";function import(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'import' as a function name..
 PASS (function(){"use strict";function import(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'import' as a function name..
 PASS "use strict";({ "import": 42 }.import === 42) is true
@@ -1267,12 +1267,12 @@ PASS var super; true threw exception SyntaxError: Cannot use the keyword 'super'
 PASS (function(){var super; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
 PASS var super = 42; super === 42 threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
 PASS (function(){var super = 42; super === 42}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS function g(super){  }; true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS (function(){function g(super){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS /super/.test(function g(super){  }) threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS (function(){/super/.test(function g(super){  })}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS try{}catch(super){}; true threw exception SyntaxError: Cannot use the keyword 'super' as a catch variable name..
-PASS (function(){try{}catch(super){}; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a catch variable name..
+PASS function g(super){  }; true threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS (function(){function g(super){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS /super/.test(function g(super){  }) threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS (function(){/super/.test(function g(super){  })}); true threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS try{}catch(super){}; true threw exception SyntaxError: Cannot use the keyword 'super' as a catch parameter name..
+PASS (function(){try{}catch(super){}; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a catch parameter name..
 PASS function super(){  }; true threw exception SyntaxError: Cannot use the keyword 'super' as a function name..
 PASS (function(){function super(){  }; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a function name..
 PASS ({ "super": 42 }.super === 42) is true
@@ -1285,12 +1285,12 @@ PASS "use strict";var super; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var super; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
 PASS "use strict";var super = 42; super === 42 threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
 PASS (function(){"use strict";var super = 42; super === 42}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS "use strict";function g(super){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS (function(){"use strict";function g(super){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS "use strict";/super/.test(function g(super){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS (function(){"use strict";/super/.test(function g(super){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'super' as a variable name..
-PASS "use strict";try{}catch(super){}; true threw exception SyntaxError: Cannot use the keyword 'super' as a catch variable name..
-PASS (function(){"use strict";try{}catch(super){}; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a catch variable name..
+PASS "use strict";function g(super){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS (function(){"use strict";function g(super){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS "use strict";/super/.test(function g(super){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS (function(){"use strict";/super/.test(function g(super){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'super' as a parameter name..
+PASS "use strict";try{}catch(super){}; true threw exception SyntaxError: Cannot use the keyword 'super' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(super){}; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a catch parameter name..
 PASS "use strict";function super(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'super' as a function name..
 PASS (function(){"use strict";function super(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'super' as a function name..
 PASS "use strict";({ "super": 42 }.super === 42) is true
@@ -1321,12 +1321,12 @@ PASS "use strict";var implements; true threw exception SyntaxError: Cannot use t
 PASS (function(){"use strict";var implements; true}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
 PASS "use strict";var implements = 42; implements === 42 threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
 PASS (function(){"use strict";var implements = 42; implements === 42}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
-PASS "use strict";function g(implements){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
-PASS (function(){"use strict";function g(implements){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
-PASS "use strict";/implements/.test(function g(implements){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
-PASS (function(){"use strict";/implements/.test(function g(implements){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a variable name in strict mode..
-PASS "use strict";try{}catch(implements){}; true threw exception SyntaxError: Cannot use the reserved word 'implements' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(implements){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a catch variable name in strict mode..
+PASS "use strict";function g(implements){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'implements' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(implements){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a parameter name in strict mode..
+PASS "use strict";/implements/.test(function g(implements){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'implements' as a parameter name in strict mode..
+PASS (function(){"use strict";/implements/.test(function g(implements){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a parameter name in strict mode..
+PASS "use strict";try{}catch(implements){}; true threw exception SyntaxError: Cannot use the reserved word 'implements' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(implements){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a catch parameter name in strict mode..
 PASS "use strict";function implements(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'implements' as a function name in strict mode..
 PASS (function(){"use strict";function implements(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'implements' as a function name in strict mode..
 PASS "use strict";({ "implements": 42 }.implements === 42) is true
@@ -1357,12 +1357,12 @@ PASS "use strict";var let; true threw exception SyntaxError: Cannot use the keyw
 PASS (function(){"use strict";var let; true}); true threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
 PASS "use strict";var let = 42; let === 42 threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
 PASS (function(){"use strict";var let = 42; let === 42}); true threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
-PASS "use strict";function g(let){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
-PASS (function(){"use strict";function g(let){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
-PASS "use strict";/let/.test(function g(let){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
-PASS (function(){"use strict";/let/.test(function g(let){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'let' as a variable name..
-PASS "use strict";try{}catch(let){}; true threw exception SyntaxError: Cannot use the keyword 'let' as a catch variable name..
-PASS (function(){"use strict";try{}catch(let){}; true}); true threw exception SyntaxError: Cannot use the keyword 'let' as a catch variable name..
+PASS "use strict";function g(let){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'let' as a parameter name..
+PASS (function(){"use strict";function g(let){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'let' as a parameter name..
+PASS "use strict";/let/.test(function g(let){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'let' as a parameter name..
+PASS (function(){"use strict";/let/.test(function g(let){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'let' as a parameter name..
+PASS "use strict";try{}catch(let){}; true threw exception SyntaxError: Cannot use the keyword 'let' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(let){}; true}); true threw exception SyntaxError: Cannot use the keyword 'let' as a catch parameter name..
 PASS "use strict";function let(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'let' as a function name..
 PASS (function(){"use strict";function let(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'let' as a function name..
 PASS "use strict";({ "let": 42 }.let === 42) is true
@@ -1393,12 +1393,12 @@ PASS "use strict";var private; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var private; true}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
 PASS "use strict";var private = 42; private === 42 threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
 PASS (function(){"use strict";var private = 42; private === 42}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
-PASS "use strict";function g(private){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
-PASS (function(){"use strict";function g(private){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
-PASS "use strict";/private/.test(function g(private){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
-PASS (function(){"use strict";/private/.test(function g(private){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a variable name in strict mode..
-PASS "use strict";try{}catch(private){}; true threw exception SyntaxError: Cannot use the reserved word 'private' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(private){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a catch variable name in strict mode..
+PASS "use strict";function g(private){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'private' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(private){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a parameter name in strict mode..
+PASS "use strict";/private/.test(function g(private){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'private' as a parameter name in strict mode..
+PASS (function(){"use strict";/private/.test(function g(private){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a parameter name in strict mode..
+PASS "use strict";try{}catch(private){}; true threw exception SyntaxError: Cannot use the reserved word 'private' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(private){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a catch parameter name in strict mode..
 PASS "use strict";function private(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'private' as a function name in strict mode..
 PASS (function(){"use strict";function private(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'private' as a function name in strict mode..
 PASS "use strict";({ "private": 42 }.private === 42) is true
@@ -1429,12 +1429,12 @@ PASS "use strict";var public; true threw exception SyntaxError: Cannot use the r
 PASS (function(){"use strict";var public; true}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
 PASS "use strict";var public = 42; public === 42 threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
 PASS (function(){"use strict";var public = 42; public === 42}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
-PASS "use strict";function g(public){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
-PASS (function(){"use strict";function g(public){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
-PASS "use strict";/public/.test(function g(public){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
-PASS (function(){"use strict";/public/.test(function g(public){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a variable name in strict mode..
-PASS "use strict";try{}catch(public){}; true threw exception SyntaxError: Cannot use the reserved word 'public' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(public){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a catch variable name in strict mode..
+PASS "use strict";function g(public){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'public' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(public){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a parameter name in strict mode..
+PASS "use strict";/public/.test(function g(public){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'public' as a parameter name in strict mode..
+PASS (function(){"use strict";/public/.test(function g(public){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a parameter name in strict mode..
+PASS "use strict";try{}catch(public){}; true threw exception SyntaxError: Cannot use the reserved word 'public' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(public){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a catch parameter name in strict mode..
 PASS "use strict";function public(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'public' as a function name in strict mode..
 PASS (function(){"use strict";function public(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'public' as a function name in strict mode..
 PASS "use strict";({ "public": 42 }.public === 42) is true
@@ -1465,12 +1465,12 @@ PASS "use strict";var yield; true threw exception SyntaxError: Cannot use the ke
 PASS (function(){"use strict";var yield; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
 PASS "use strict";var yield = 42; yield === 42 threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
 PASS (function(){"use strict";var yield = 42; yield === 42}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
-PASS "use strict";function g(yield){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
-PASS (function(){"use strict";function g(yield){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
-PASS "use strict";/yield/.test(function g(yield){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
-PASS (function(){"use strict";/yield/.test(function g(yield){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
-PASS "use strict";try{}catch(yield){}; true threw exception SyntaxError: Cannot use the keyword 'yield' as a catch variable name..
-PASS (function(){"use strict";try{}catch(yield){}; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a catch variable name..
+PASS "use strict";function g(yield){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'yield' as a parameter name..
+PASS (function(){"use strict";function g(yield){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a parameter name..
+PASS "use strict";/yield/.test(function g(yield){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'yield' as a parameter name..
+PASS (function(){"use strict";/yield/.test(function g(yield){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a parameter name..
+PASS "use strict";try{}catch(yield){}; true threw exception SyntaxError: Cannot use the keyword 'yield' as a catch parameter name..
+PASS (function(){"use strict";try{}catch(yield){}; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a catch parameter name..
 PASS "use strict";function yield(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'yield' as a function name..
 PASS (function(){"use strict";function yield(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a function name..
 PASS "use strict";({ "yield": 42 }.yield === 42) is true
@@ -1501,12 +1501,12 @@ PASS "use strict";var interface; true threw exception SyntaxError: Cannot use th
 PASS (function(){"use strict";var interface; true}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
 PASS "use strict";var interface = 42; interface === 42 threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
 PASS (function(){"use strict";var interface = 42; interface === 42}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
-PASS "use strict";function g(interface){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
-PASS (function(){"use strict";function g(interface){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
-PASS "use strict";/interface/.test(function g(interface){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
-PASS (function(){"use strict";/interface/.test(function g(interface){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a variable name in strict mode..
-PASS "use strict";try{}catch(interface){}; true threw exception SyntaxError: Cannot use the reserved word 'interface' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(interface){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a catch variable name in strict mode..
+PASS "use strict";function g(interface){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'interface' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(interface){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a parameter name in strict mode..
+PASS "use strict";/interface/.test(function g(interface){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'interface' as a parameter name in strict mode..
+PASS (function(){"use strict";/interface/.test(function g(interface){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a parameter name in strict mode..
+PASS "use strict";try{}catch(interface){}; true threw exception SyntaxError: Cannot use the reserved word 'interface' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(interface){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a catch parameter name in strict mode..
 PASS "use strict";function interface(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'interface' as a function name in strict mode..
 PASS (function(){"use strict";function interface(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'interface' as a function name in strict mode..
 PASS "use strict";({ "interface": 42 }.interface === 42) is true
@@ -1537,12 +1537,12 @@ PASS "use strict";var package; true threw exception SyntaxError: Cannot use the
 PASS (function(){"use strict";var package; true}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
 PASS "use strict";var package = 42; package === 42 threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
 PASS (function(){"use strict";var package = 42; package === 42}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
-PASS "use strict";function g(package){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
-PASS (function(){"use strict";function g(package){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
-PASS "use strict";/package/.test(function g(package){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
-PASS (function(){"use strict";/package/.test(function g(package){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a variable name in strict mode..
-PASS "use strict";try{}catch(package){}; true threw exception SyntaxError: Cannot use the reserved word 'package' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(package){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a catch variable name in strict mode..
+PASS "use strict";function g(package){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'package' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(package){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a parameter name in strict mode..
+PASS "use strict";/package/.test(function g(package){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'package' as a parameter name in strict mode..
+PASS (function(){"use strict";/package/.test(function g(package){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a parameter name in strict mode..
+PASS "use strict";try{}catch(package){}; true threw exception SyntaxError: Cannot use the reserved word 'package' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(package){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a catch parameter name in strict mode..
 PASS "use strict";function package(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'package' as a function name in strict mode..
 PASS (function(){"use strict";function package(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'package' as a function name in strict mode..
 PASS "use strict";({ "package": 42 }.package === 42) is true
@@ -1573,12 +1573,12 @@ PASS "use strict";var protected; true threw exception SyntaxError: Cannot use th
 PASS (function(){"use strict";var protected; true}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
 PASS "use strict";var protected = 42; protected === 42 threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
 PASS (function(){"use strict";var protected = 42; protected === 42}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
-PASS "use strict";function g(protected){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
-PASS (function(){"use strict";function g(protected){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
-PASS "use strict";/protected/.test(function g(protected){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
-PASS (function(){"use strict";/protected/.test(function g(protected){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a variable name in strict mode..
-PASS "use strict";try{}catch(protected){}; true threw exception SyntaxError: Cannot use the reserved word 'protected' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(protected){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a catch variable name in strict mode..
+PASS "use strict";function g(protected){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'protected' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(protected){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a parameter name in strict mode..
+PASS "use strict";/protected/.test(function g(protected){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'protected' as a parameter name in strict mode..
+PASS (function(){"use strict";/protected/.test(function g(protected){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a parameter name in strict mode..
+PASS "use strict";try{}catch(protected){}; true threw exception SyntaxError: Cannot use the reserved word 'protected' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(protected){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a catch parameter name in strict mode..
 PASS "use strict";function protected(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'protected' as a function name in strict mode..
 PASS (function(){"use strict";function protected(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'protected' as a function name in strict mode..
 PASS "use strict";({ "protected": 42 }.protected === 42) is true
@@ -1609,12 +1609,12 @@ PASS "use strict";var static; true threw exception SyntaxError: Cannot use the r
 PASS (function(){"use strict";var static; true}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
 PASS "use strict";var static = 42; static === 42 threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
 PASS (function(){"use strict";var static = 42; static === 42}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
-PASS "use strict";function g(static){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
-PASS (function(){"use strict";function g(static){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
-PASS "use strict";/static/.test(function g(static){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
-PASS (function(){"use strict";/static/.test(function g(static){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a variable name in strict mode..
-PASS "use strict";try{}catch(static){}; true threw exception SyntaxError: Cannot use the reserved word 'static' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(static){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a catch variable name in strict mode..
+PASS "use strict";function g(static){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'static' as a parameter name in strict mode..
+PASS (function(){"use strict";function g(static){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a parameter name in strict mode..
+PASS "use strict";/static/.test(function g(static){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'static' as a parameter name in strict mode..
+PASS (function(){"use strict";/static/.test(function g(static){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a parameter name in strict mode..
+PASS "use strict";try{}catch(static){}; true threw exception SyntaxError: Cannot use the reserved word 'static' as a catch parameter name in strict mode..
+PASS (function(){"use strict";try{}catch(static){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a catch parameter name in strict mode..
 PASS "use strict";function static(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'static' as a function name in strict mode..
 PASS (function(){"use strict";function static(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'static' as a function name in strict mode..
 PASS "use strict";({ "static": 42 }.static === 42) is true
index 2fdaed9..86afef1 100644 (file)
@@ -36,14 +36,14 @@ PASS Does not have syntax error: ''use strict'; function foo() { { let x; } var
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 PASS Has syntax error: 'let let;'
-SyntaxError: Cannot use the keyword 'let' as a variable name.
-SyntaxError: Cannot use the keyword 'let' as a variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
 PASS Has syntax error: ''use strict'; let let;'
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 PASS Has syntax error: 'const let;'
-SyntaxError: Cannot use the keyword 'let' as a variable name.
-SyntaxError: Cannot use the keyword 'let' as a variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
 PASS Has syntax error: ''use strict'; const let;'
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
@@ -54,8 +54,8 @@ PASS Has syntax error: ''use strict'; let {let};'
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 PASS Has syntax error: 'let {l: let};'
-SyntaxError: Cannot use the keyword 'let' as a variable name.
-SyntaxError: Cannot use the keyword 'let' as a variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
 PASS Has syntax error: ''use strict'; let {l: let};'
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
@@ -66,8 +66,8 @@ PASS Has syntax error: ''use strict'; let {l: {let}};'
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 PASS Has syntax error: 'let {l: [let]};'
-SyntaxError: Cannot use the keyword 'let' as a variable name.
-SyntaxError: Cannot use the keyword 'let' as a variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
 PASS Has syntax error: ''use strict'; let {l: [let]};'
 SyntaxError: Unexpected token ';'. Expected an initializer in destructuring variable declaration.
 SyntaxError: Unexpected token ';'. Expected an initializer in destructuring variable declaration.
@@ -141,11 +141,11 @@ PASS Has syntax error: 'let arr = []; for (let    of arr) {}'
 SyntaxError: Unexpected identifier 'arr'. Expected either 'in' or 'of' in enumeration syntax.
 SyntaxError: Unexpected identifier 'arr'. Expected either 'in' or 'of' in enumeration syntax.
 PASS Has syntax error: ''use strict'; let arr = []; for (let    of arr) {}'
-SyntaxError: Cannot use the keyword 'in' as a variable name.
-SyntaxError: Cannot use the keyword 'in' as a variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
 PASS Has syntax error: 'let obj = {}; for (let    in arr) {}'
-SyntaxError: Cannot use the keyword 'in' as a variable name.
-SyntaxError: Cannot use the keyword 'in' as a variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
 PASS Has syntax error: ''use strict'; let obj = {}; for (let    in arr) {}'
 SyntaxError: Cannot declare a let variable twice: 'i'.
 SyntaxError: Cannot declare a let variable twice: 'i'.
@@ -204,8 +204,8 @@ PASS Has syntax error: ''use strict'; function foo() {}; function bar(){} let ba
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
 PASS Has syntax error: 'for (let let = 0; let < 10; let++) {}'
-SyntaxError: Cannot use the keyword 'let' as a variable name.
-SyntaxError: Cannot use the keyword 'let' as a variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'let' as a lexical variable name.
 PASS Has syntax error: ''use strict'; for (let let = 0; let < 10; let++) {}'
 SyntaxError: Unexpected token '['. Expected either 'in' or 'of' in enumeration syntax.
 SyntaxError: Unexpected token '['. Expected either 'in' or 'of' in enumeration syntax.
@@ -213,11 +213,11 @@ PASS Has syntax error: 'for (let of []) {}'
 SyntaxError: Unexpected token '['. Expected either 'in' or 'of' in enumeration syntax.
 SyntaxError: Unexpected token '['. Expected either 'in' or 'of' in enumeration syntax.
 PASS Has syntax error: ''use strict'; for (let of []) {}'
-SyntaxError: Cannot use the keyword 'in' as a variable name.
-SyntaxError: Cannot use the keyword 'in' as a variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
 PASS Has syntax error: 'for (let in {}) {}'
-SyntaxError: Cannot use the keyword 'in' as a variable name.
-SyntaxError: Cannot use the keyword 'in' as a variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
+SyntaxError: Cannot use the keyword 'in' as a lexical variable name.
 PASS Has syntax error: ''use strict'; for (let in {}) {}'
 SyntaxError: Cannot declare a var variable that shadows a let/const/class variable: 'x'.
 SyntaxError: Cannot declare a var variable that shadows a let/const/class variable: 'x'.
@@ -374,8 +374,8 @@ SyntaxError: Cannot use the keyword 'let' as a variable name.
 SyntaxError: Cannot use the keyword 'let' as a variable name.
 PASS Has syntax error: ''use strict'; var {p: let} = 40;'
 PASS Does not have syntax error: '(function test(let){});'
-SyntaxError: Cannot use the keyword 'let' as a variable name.
-SyntaxError: Cannot use the keyword 'let' as a variable name.
+SyntaxError: Cannot use the keyword 'let' as a parameter name.
+SyntaxError: Cannot use the keyword 'let' as a parameter name.
 PASS Has syntax error: ''use strict'; (function test(let){});'
 PASS Does not have syntax error: 'let: for (v of []) break let;'
 SyntaxError: Unexpected token ':'. Expected a parameter pattern or a ')' in parameter list.
@@ -398,8 +398,8 @@ SyntaxError: Unexpected token ':'. Expected a parameter pattern or a ')' in para
 SyntaxError: Unexpected token ':'. Expected a parameter pattern or a ')' in parameter list.
 PASS Has syntax error: ''use strict'; let: for (var v = 0; false; ) {};'
 PASS Does not have syntax error: 'try { } catch(let) {}'
-SyntaxError: Cannot use the keyword 'let' as a catch variable name.
-SyntaxError: Cannot use the keyword 'let' as a catch variable name.
+SyntaxError: Cannot use the keyword 'let' as a catch parameter name.
+SyntaxError: Cannot use the keyword 'let' as a catch parameter name.
 PASS Has syntax error: ''use strict'; try { } catch(let) {}'
 PASS successfullyParsed is true
 
index bb3e1bc..f020ca7 100644 (file)
@@ -2,19 +2,19 @@ PASS Function("'use strict'; try{}catch(eval){}") threw exception of type Syntax
 PASS !!Function("try{}catch(eval){}") is true
 PASS true === true
 PASS Function("'use strict'; try{}catch([eval]){}") threw exception of type SyntaxError.
-PASS Function("try{}catch([eval]){}") threw exception of type SyntaxError.
+PASS !!Function("try{}catch([eval]){}") is true
 PASS true === true
 PASS Function("'use strict'; try{}catch({x:eval}){}") threw exception of type SyntaxError.
-PASS Function("try{}catch({x:eval}){}") threw exception of type SyntaxError.
+PASS !!Function("try{}catch({x:eval}){}") is true
 PASS true === true
 PASS Function("'use strict'; try{}catch(arguments){}") threw exception of type SyntaxError.
 PASS !!Function("try{}catch(arguments){}") is true
 PASS true === true
 PASS Function("'use strict'; try{}catch([arguments]){}") threw exception of type SyntaxError.
-PASS Function("try{}catch([arguments]){}") threw exception of type SyntaxError.
+PASS !!Function("try{}catch([arguments]){}") is true
 PASS true === true
 PASS Function("'use strict'; try{}catch({x:arguments}){}") threw exception of type SyntaxError.
-PASS Function("try{}catch({x:arguments}){}") threw exception of type SyntaxError.
+PASS !!Function("try{}catch({x:arguments}){}") is true
 PASS true === true
  PASSED! 
 PASS successfullyParsed is true
index d75a9da..3012e88 100644 (file)
@@ -14,11 +14,11 @@ assertEq(testLenientAndStrict('try{}catch(eval){}',
                               parseRaisesException(SyntaxError)),
          true);
 assertEq(testLenientAndStrict('try{}catch([eval]){}',
-                              parseRaisesException(SyntaxError),
+                              parsesSuccessfully,
                               parseRaisesException(SyntaxError)),
          true);
 assertEq(testLenientAndStrict('try{}catch({x:eval}){}',
-                              parseRaisesException(SyntaxError),
+                              parsesSuccessfully,
                               parseRaisesException(SyntaxError)),
          true);
 assertEq(testLenientAndStrict('try{}catch(arguments){}',
@@ -26,11 +26,11 @@ assertEq(testLenientAndStrict('try{}catch(arguments){}',
                               parseRaisesException(SyntaxError)),
          true);
 assertEq(testLenientAndStrict('try{}catch([arguments]){}',
-                              parseRaisesException(SyntaxError),
+                              parsesSuccessfully,
                               parseRaisesException(SyntaxError)),
          true);
 assertEq(testLenientAndStrict('try{}catch({x:arguments}){}',
-                              parseRaisesException(SyntaxError),
+                              parsesSuccessfully,
                               parseRaisesException(SyntaxError)),
          true);
 
index 1c73b6a..686304a 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected identifier name as catch target.
+CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected a parameter pattern or a ')' in parameter list.
 S12.14_A16_T10
 
 PASS Expected parsing failure
index 1d250be..f097248 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 80: SyntaxError: Unexpected string literal "22". Expected identifier name as catch target.
+CONSOLE MESSAGE: line 80: SyntaxError: Unexpected string literal "22". Expected a parameter pattern or a ')' in parameter list.
 S12.14_A16_T13
 
 PASS Expected parsing failure
index fcf7538..35c28f0 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected identifier name as catch target.
+CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected a parameter pattern or a ')' in parameter list.
 S12.14_A16_T5
 
 PASS Expected parsing failure
index f6d8897..aef36a7 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected identifier name as catch target.
+CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected a parameter pattern or a ')' in parameter list.
 S12.14_A16_T7
 
 PASS Expected parsing failure
index facc601..4b2c59d 100644 (file)
@@ -1,4 +1,4 @@
-CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected identifier name as catch target.
+CONSOLE MESSAGE: line 78: SyntaxError: Unexpected token ')'. Expected a parameter pattern or a ')' in parameter list.
 S12.14_A16_T8
 
 PASS Expected parsing failure
index 602389f..e623013 100644 (file)
@@ -1,3 +1,61 @@
+2016-01-21  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [ES6] Catch parameter should accept BindingPattern
+        https://bugs.webkit.org/show_bug.cgi?id=152385
+
+        Reviewed by Saam Barati.
+
+        This patch implements destructuring in catch parameter.
+        Catch parameter accepts binding pattern and binding identifier.
+        It creates lexical bindings. And "yield" and "let" are specially
+        handled as is the same to function parameters.
+
+        In addition to that, we make destructuring parsing errors more descriptive.
+
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::emitPushCatchScope):
+        * bytecompiler/BytecodeGenerator.h:
+        * bytecompiler/NodesCodegen.cpp:
+        (JSC::TryNode::emitBytecode):
+        * parser/ASTBuilder.h:
+        (JSC::ASTBuilder::createTryStatement):
+        * parser/NodeConstructors.h:
+        (JSC::TryNode::TryNode):
+        * parser/Nodes.h:
+        * parser/Parser.cpp:
+        (JSC::Parser<LexerType>::createBindingPattern):
+        (JSC::Parser<LexerType>::tryParseDestructuringPatternExpression):
+        (JSC::Parser<LexerType>::parseBindingOrAssignmentElement):
+        (JSC::destructuringKindToVariableKindName):
+        (JSC::Parser<LexerType>::parseDestructuringPattern):
+        (JSC::Parser<LexerType>::parseTryStatement):
+        (JSC::Parser<LexerType>::parseFormalParameters):
+        (JSC::Parser<LexerType>::parseFunctionParameters):
+        * parser/Parser.h:
+        (JSC::Parser::destructuringKindFromDeclarationType):
+        * parser/SyntaxChecker.h:
+        (JSC::SyntaxChecker::createTryStatement):
+        * tests/es6.yaml:
+        * tests/es6/destructuring_in_catch_heads.js: Added.
+        (test):
+        * tests/stress/catch-parameter-destructuring.js: Added.
+        (shouldBe):
+        (shouldThrow):
+        (prototype.call):
+        (catch):
+        (shouldThrow.try.throw.get error):
+        (initialize):
+        (array):
+        (generator.gen):
+        (generator):
+        * tests/stress/catch-parameter-syntax.js: Added.
+        (testSyntax):
+        (testSyntaxError):
+        * tests/stress/reserved-word-with-escape.js:
+        (testSyntaxError.String.raw.a):
+        (String.raw.SyntaxError.Cannot.use.the.keyword.string_appeared_here.as.a.name):
+        * tests/stress/yield-named-variable.js:
+
 2016-01-21  Filip Pizlo  <fpizlo@apple.com>
 
         Unreviewed, fix build.
index d15e224..f889985 100644 (file)
@@ -3588,14 +3588,9 @@ void BytecodeGenerator::popScopedControlFlowContext()
     m_localScopeDepth--;
 }
 
-void BytecodeGenerator::emitPushCatchScope(const Identifier& property, RegisterID* exceptionValue, VariableEnvironment& environment)
+void BytecodeGenerator::emitPushCatchScope(VariableEnvironment& environment)
 {
-    RELEASE_ASSERT(environment.contains(property.impl()));
     pushLexicalScopeInternal(environment, TDZCheckOptimization::Optimize, NestedScopeType::IsNotNested, nullptr, TDZRequirement::NotUnderTDZ, ScopeType::CatchScope, ScopeRegisterType::Block);
-    Variable exceptionVar = variable(property);
-    RELEASE_ASSERT(exceptionVar.isResolved());
-    RefPtr<RegisterID> scope = emitResolveScope(nullptr, exceptionVar);
-    emitPutToScope(scope.get(), exceptionVar, exceptionValue, ThrowIfNotFound, NotInitialization);
 }
 
 void BytecodeGenerator::emitPopCatchScope(VariableEnvironment& environment) 
index 7d0c20b..5e3845b 100644 (file)
@@ -639,7 +639,7 @@ namespace JSC {
         void emitThrowReferenceError(const String& message);
         void emitThrowTypeError(const String& message);
 
-        void emitPushCatchScope(const Identifier& property, RegisterID* exceptionValue, VariableEnvironment&);
+        void emitPushCatchScope(VariableEnvironment&);
         void emitPopCatchScope(VariableEnvironment&);
 
         void emitGetScope();
index 3c4f20b..a390371 100644 (file)
@@ -2927,7 +2927,8 @@ void TryNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
             tryData = generator.pushTry(here.get());
         }
 
-        generator.emitPushCatchScope(m_thrownValueIdent, thrownValueRegister.get(), m_lexicalVariables);
+        generator.emitPushCatchScope(m_lexicalVariables);
+        m_catchPattern->bindValue(generator, thrownValueRegister.get());
         generator.emitProfileControlFlow(m_tryBlock->endOffset() + 1);
         if (m_finallyBlock)
             generator.emitNode(dst, m_catchBlock);
index 4331942..104989d 100644 (file)
@@ -591,9 +591,9 @@ public:
         return result;
     }
 
-    StatementNode* createTryStatement(const JSTokenLocation& location, StatementNode* tryBlock, const Identifier* ident, StatementNode* catchBlock, StatementNode* finallyBlock, int startLine, int endLine, VariableEnvironment& catchEnvironment)
+    StatementNode* createTryStatement(const JSTokenLocation& location, StatementNode* tryBlock, DestructuringPatternNode* catchPattern, StatementNode* catchBlock, StatementNode* finallyBlock, int startLine, int endLine, VariableEnvironment& catchEnvironment)
     {
-        TryNode* result = new (m_parserArena) TryNode(location, tryBlock, *ident, catchBlock, catchEnvironment, finallyBlock);
+        TryNode* result = new (m_parserArena) TryNode(location, tryBlock, catchPattern, catchBlock, catchEnvironment, finallyBlock);
         result->setLoc(startLine, endLine, location.startOffset, location.lineStartOffset);
         return result;
     }
index 2ab5370..38d6266 100644 (file)
@@ -874,11 +874,11 @@ namespace JSC {
     {
     }
 
-    inline TryNode::TryNode(const JSTokenLocation& location, StatementNode* tryBlock, const Identifier& thrownValueIdent, StatementNode* catchBlock, VariableEnvironment& catchEnvironment, StatementNode* finallyBlock)
+    inline TryNode::TryNode(const JSTokenLocation& location, StatementNode* tryBlock, DestructuringPatternNode* catchPattern, StatementNode* catchBlock, VariableEnvironment& catchEnvironment, StatementNode* finallyBlock)
         : StatementNode(location)
         , VariableEnvironmentNode(catchEnvironment)
         , m_tryBlock(tryBlock)
-        , m_thrownValueIdent(thrownValueIdent)
+        , m_catchPattern(catchPattern)
         , m_catchBlock(catchBlock)
         , m_finallyBlock(finallyBlock)
     {
index 9a9345a..ebad68d 100644 (file)
@@ -1526,13 +1526,13 @@ namespace JSC {
     public:
         using ParserArenaDeletable::operator new;
 
-        TryNode(const JSTokenLocation&, StatementNode* tryBlock, const Identifier& exceptionIdent, StatementNode* catchBlock, VariableEnvironment& catchEnvironment, StatementNode* finallyBlock);
+        TryNode(const JSTokenLocation&, StatementNode* tryBlock, DestructuringPatternNode* catchPattern, StatementNode* catchBlock, VariableEnvironment& catchEnvironment, StatementNode* finallyBlock);
 
     private:
         virtual void emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
 
         StatementNode* m_tryBlock;
-        const Identifier& m_thrownValueIdent;
+        DestructuringPatternNode* m_catchPattern;
         StatementNode* m_catchBlock;
         StatementNode* m_finallyBlock;
     };
index e00d800..56e3ff9 100644 (file)
@@ -795,20 +795,35 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::createB
     
     ASSERT(name.impl()->isAtomic() || name.impl()->isSymbol());
 
-    if (kind == DestructureToVariables) {
+    switch (kind) {
+    case DestructuringKind::DestructureToVariables: {
         DeclarationResultMask declarationResult = declareVariable(&name);
         failIfTrueIfStrict(declarationResult & DeclarationResult::InvalidStrictMode, "Cannot declare a variable named '", name.impl(), "' in strict mode");
         if (declarationResult & DeclarationResult::InvalidDuplicateDeclaration)
             internalFailWithMessage(false, "Cannot declare a var variable that shadows a let/const/class variable: '", name.impl(), "'");
-    } else if (kind == DestructureToLet || kind == DestructureToConst) {
-        DeclarationResultMask declarationResult = declareVariable(&name, kind == DestructureToLet ? DeclarationType::LetDeclaration : DeclarationType::ConstDeclaration);
+        break;
+    }
+
+    case DestructuringKind::DestructureToLet:
+    case DestructuringKind::DestructureToConst:
+    case DestructuringKind::DestructureToCatchParameters: {
+        DeclarationResultMask declarationResult = declareVariable(&name, kind == DestructuringKind::DestructureToConst ? DeclarationType::ConstDeclaration : DeclarationType::LetDeclaration);
         if (declarationResult != DeclarationResult::Valid) {
             failIfTrueIfStrict(declarationResult & DeclarationResult::InvalidStrictMode, "Cannot destructure to a variable named '", name.impl(), "' in strict mode");
             failIfTrue(declarationResult & DeclarationResult::InvalidDuplicateDeclaration, "Cannot declare a lexical variable twice: '", name.impl(), "'");
         }
-    } else if (kind == DestructureToParameters) {
+        break;
+    }
+
+    case DestructuringKind::DestructureToParameters: {
         declareRestOrNormalParameter(name, duplicateIdentifier);
         propagateError();
+        break;
+    }
+
+    case DestructuringKind::DestructureToExpressions: {
+        break;
+    }
     }
 
     if (exportType == ExportType::Exported) {
@@ -856,13 +871,13 @@ template <class TreeBuilder> TreeSourceElements Parser<LexerType>::parseArrowFun
 template <typename LexerType>
 template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::tryParseDestructuringPatternExpression(TreeBuilder& context, AssignmentContext bindingContext)
 {
-    return parseDestructuringPattern(context, DestructureToExpressions, ExportType::NotExported, nullptr, nullptr, bindingContext);
+    return parseDestructuringPattern(context, DestructuringKind::DestructureToExpressions, ExportType::NotExported, nullptr, nullptr, bindingContext);
 }
 
 template <typename LexerType>
 template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseBindingOrAssignmentElement(TreeBuilder& context, DestructuringKind kind, ExportType exportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth)
 {
-    if (kind == DestructureToExpressions)
+    if (kind == DestructuringKind::DestructureToExpressions)
         return parseAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth);
     return parseDestructuringPattern(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth);
 }
@@ -893,6 +908,25 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseAs
     return createAssignmentElement(context, element, startPosition, lastTokenEndPosition());
 }
 
+static const char* destructuringKindToVariableKindName(DestructuringKind kind)
+{
+    switch (kind) {
+    case DestructuringKind::DestructureToLet:
+    case DestructuringKind::DestructureToConst:
+        return "lexical variable name";
+    case DestructuringKind::DestructureToVariables:
+        return "variable name";
+    case DestructuringKind::DestructureToParameters:
+        return "parameter name";
+    case DestructuringKind::DestructureToCatchParameters:
+        return "catch parameter name";
+    case DestructuringKind::DestructureToExpressions:
+        return "expression name";
+    }
+    RELEASE_ASSERT_NOT_REACHED();
+    return "invalid";
+}
+
 template <typename LexerType>
 template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDestructuringPattern(TreeBuilder& context, DestructuringKind kind, ExportType exportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth)
 {
@@ -924,11 +958,11 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
                 JSTokenLocation location = m_token.m_location;
                 next();
                 auto innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
-                if (kind == DestructureToExpressions && !innerPattern)
+                if (kind == DestructuringKind::DestructureToExpressions && !innerPattern)
                     return 0;
                 failIfFalse(innerPattern, "Cannot parse this destructuring pattern");
 
-                failIfTrue(kind != DestructureToExpressions && !context.isBindingNode(innerPattern),  "Expected identifier for a rest element destructuring pattern");
+                failIfTrue(kind != DestructuringKind::DestructureToExpressions && !context.isBindingNode(innerPattern),  "Expected identifier for a rest element destructuring pattern");
 
                 context.appendArrayPatternRestEntry(arrayPattern, location, innerPattern);
                 restElementWasFound = true;
@@ -937,7 +971,7 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
 
             JSTokenLocation location = m_token.m_location;
             auto innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
-            if (kind == DestructureToExpressions && !innerPattern)
+            if (kind == DestructuringKind::DestructureToExpressions && !innerPattern)
                 return 0;
             failIfFalse(innerPattern, "Cannot parse this destructuring pattern");
             TreeExpression defaultValue = parseDefaultValueForDestructuringPattern(context);
@@ -967,14 +1001,14 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
             TreeDestructuringPattern innerPattern = 0;
             JSTokenLocation location = m_token.m_location;
             if (matchSpecIdentifier()) {
-                failIfTrue(match(LET) && (kind == DestructureToLet || kind == DestructureToConst), "Can't use 'let' as an identifier name for a LexicalDeclaration");
+                failIfTrue(match(LET) && (kind == DestructuringKind::DestructureToLet || kind == DestructuringKind::DestructureToConst), "Can't use 'let' as an identifier name for a LexicalDeclaration");
                 propertyName = m_token.m_data.ident;
                 JSToken identifierToken = m_token;
                 next();
                 if (consume(COLON))
                     innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
                 else {
-                    if (kind == DestructureToExpressions) {
+                    if (kind == DestructuringKind::DestructureToExpressions) {
                         bool isEvalOrArguments = m_vm->propertyNames->eval == *propertyName || m_vm->propertyNames->arguments == *propertyName;
                         if (isEvalOrArguments && strictMode())
                             reclassifyExpressionError(ErrorIndicatesPattern, ErrorIndicatesNothing);
@@ -1001,7 +1035,7 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
                     break;
                 default:
                     if (m_token.m_type != RESERVED && m_token.m_type != RESERVED_IF_STRICT && !(m_token.m_type & KeywordTokenFlag)) {
-                        if (kind == DestructureToExpressions)
+                        if (kind == DestructuringKind::DestructureToExpressions)
                             return 0;
                         failWithMessage("Expected a property name");
                     }
@@ -1010,7 +1044,7 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
                 }
                 next();
                 if (!consume(COLON)) {
-                    if (kind == DestructureToExpressions)
+                    if (kind == DestructuringKind::DestructureToExpressions)
                         return 0;
                     semanticFailIfTrue(tokenType == RESERVED, "Cannot use abbreviated destructuring syntax for reserved name '", propertyName->impl(), "'");
                     semanticFailIfTrue(tokenType == RESERVED_IF_STRICT, "Cannot use abbreviated destructuring syntax for reserved name '", propertyName->impl(), "' in strict mode");
@@ -1020,7 +1054,7 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
                 }
                 innerPattern = parseBindingOrAssignmentElement(context, kind, exportType, duplicateIdentifier, hasDestructuringPattern, bindingContext, depth + 1);
             }
-            if (kind == DestructureToExpressions && !innerPattern)
+            if (kind == DestructuringKind::DestructureToExpressions && !innerPattern)
                 return 0;
             failIfFalse(innerPattern, "Cannot parse this destructuring pattern");
             TreeExpression defaultValue = parseDefaultValueForDestructuringPattern(context);
@@ -1032,7 +1066,7 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
             }
         } while (consume(COMMA));
 
-        if (kind == DestructureToExpressions && !match(CLOSEBRACE))
+        if (kind == DestructuringKind::DestructureToExpressions && !match(CLOSEBRACE))
             return 0;
         consumeOrFail(CLOSEBRACE, "Expected either a closing '}' or an ',' after a property destructuring pattern");
         pattern = objectPattern;
@@ -1041,12 +1075,12 @@ template <class TreeBuilder> TreeDestructuringPattern Parser<LexerType>::parseDe
 
     default: {
         if (!matchSpecIdentifier()) {
-            if (kind == DestructureToExpressions)
+            if (kind == DestructuringKind::DestructureToExpressions)
                 return 0;
-            semanticFailureDueToKeyword("variable name");
+            semanticFailureDueToKeyword(destructuringKindToVariableKindName(kind));
             failWithMessage("Expected a parameter pattern or a ')' in parameter list");
         }
-        failIfTrue(match(LET) && (kind == DestructureToLet || kind == DestructureToConst), "Can't use 'let' as an identifier name for a LexicalDeclaration");
+        failIfTrue(match(LET) && (kind == DestructuringKind::DestructureToLet || kind == DestructuringKind::DestructureToConst), "Can't use 'let' as an identifier name for a LexicalDeclaration");
         pattern = createBindingPattern(context, kind, exportType, *m_token.m_data.ident, m_token, bindingContext, duplicateIdentifier);
         next();
         break;
@@ -1466,7 +1500,7 @@ template <class TreeBuilder> TreeStatement Parser<LexerType>::parseTryStatement(
     ASSERT(match(TRY));
     JSTokenLocation location(tokenLocation());
     TreeStatement tryBlock = 0;
-    const Identifier* ident = &m_vm->propertyNames->nullIdentifier;
+    TreeDestructuringPattern catchPattern = 0;
     TreeStatement catchBlock = 0;
     TreeStatement finallyBlock = 0;
     int firstLine = tokenLine();
@@ -1481,22 +1515,25 @@ template <class TreeBuilder> TreeStatement Parser<LexerType>::parseTryStatement(
         next();
         
         handleProductionOrFail(OPENPAREN, "(", "start", "'catch' target");
-        if (!matchSpecIdentifier()) {
-            semanticFailureDueToKeyword("catch variable name");
-            failWithMessage("Expected identifier name as catch target");
-        }
-        ident = m_token.m_data.ident;
-        next();
         AutoPopScopeRef catchScope(this, pushScope());
         catchScope->setIsLexicalScope();
         catchScope->preventVarDeclarations();
-        failIfTrueIfStrict(catchScope->declareLexicalVariable(ident, false) & DeclarationResult::InvalidStrictMode, "Cannot declare a catch variable named '", ident->impl(), "' in strict mode");
+        const Identifier* ident = nullptr;
+        if (matchSpecIdentifier()) {
+            ident = m_token.m_data.ident;
+            catchPattern = context.createBindingLocation(m_token.m_location, *ident, m_token.m_startPosition, m_token.m_endPosition, AssignmentContext::DeclarationStatement);
+            next();
+            failIfTrueIfStrict(catchScope->declareLexicalVariable(ident, false) & DeclarationResult::InvalidStrictMode, "Cannot declare a catch variable named '", ident->impl(), "' in strict mode");
+        } else {
+            catchPattern = parseDestructuringPattern(context, DestructuringKind::DestructureToCatchParameters, ExportType::NotExported);
+            failIfFalse(catchPattern, "Cannot parse this destructuring pattern");
+        }
         handleProductionOrFail(CLOSEPAREN, ")", "end", "'catch' target");
         matchOrFail(OPENBRACE, "Expected exception handler to be a block statement");
         catchBlock = parseBlockStatement(context);
         failIfFalse(catchBlock, "Unable to parse 'catch' block");
         catchEnvironment = catchScope->finalizeLexicalEnvironment();
-        RELEASE_ASSERT(catchEnvironment.size() == 1 && catchEnvironment.contains(ident->impl()));
+        RELEASE_ASSERT(!ident || (catchEnvironment.size() == 1 && catchEnvironment.contains(ident->impl())));
         popScope(catchScope, TreeBuilder::NeedsFreeVariableInfo);
     }
     
@@ -1507,7 +1544,7 @@ template <class TreeBuilder> TreeStatement Parser<LexerType>::parseTryStatement(
         failIfFalse(finallyBlock, "Cannot parse finally body");
     }
     failIfFalse(catchBlock || finallyBlock, "Try statements must have at least a catch or finally block");
-    return context.createTryStatement(location, tryBlock, ident, catchBlock, finallyBlock, firstLine, lastLine, catchEnvironment);
+    return context.createTryStatement(location, tryBlock, catchPattern, catchBlock, finallyBlock, firstLine, lastLine, catchEnvironment);
 }
 
 template <typename LexerType>
@@ -1691,7 +1728,7 @@ template <class TreeBuilder> bool Parser<LexerType>::parseFormalParameters(TreeB
             failIfTrue(match(COMMA), "Rest parameter should be the last parameter in a function declaration"); // Let's have a good error message for this common case.
             isRestParameter = true;
         } else
-            parameter = parseDestructuringPattern(context, DestructureToParameters, ExportType::NotExported, &duplicateParameter, &hasDestructuringPattern);
+            parameter = parseDestructuringPattern(context, DestructuringKind::DestructureToParameters, ExportType::NotExported, &duplicateParameter, &hasDestructuringPattern);
         failIfFalse(parameter, "Cannot parse parameter pattern");
         if (!isRestParameter)
             defaultValue = parseDefaultValueForDestructuringPattern(context);
@@ -1783,7 +1820,7 @@ template <typename LexerType> template <class TreeBuilder> int Parser<LexerType>
                 consumeOrFail(CLOSEPAREN, "Expected a ')' or a ',' after a parameter declaration");
             } else {
                 functionInfo.parameterCount = 1;
-                auto parameter = parseDestructuringPattern(context, DestructureToParameters, ExportType::NotExported);
+                auto parameter = parseDestructuringPattern(context, DestructuringKind::DestructureToParameters, ExportType::NotExported);
                 failIfFalse(parameter, "Cannot parse parameter pattern");
                 context.appendParameter(parameterList, parameter, 0);
             }
@@ -1803,7 +1840,7 @@ template <typename LexerType> template <class TreeBuilder> int Parser<LexerType>
     } else if (mode == SourceParseMode::SetterMode) {
         failIfTrue(match(CLOSEPAREN), "setter functions must have one parameter");
         const Identifier* duplicateParameter = nullptr;
-        auto parameter = parseDestructuringPattern(context, DestructureToParameters, ExportType::NotExported, &duplicateParameter);
+        auto parameter = parseDestructuringPattern(context, DestructuringKind::DestructureToParameters, ExportType::NotExported, &duplicateParameter);
         failIfFalse(parameter, "setter functions must have one parameter");
         auto defaultValue = parseDefaultValueForDestructuringPattern(context);
         propagateError();
index 329edbe..3050c55 100644 (file)
@@ -81,10 +81,11 @@ enum SourceElementsMode { CheckForStrictMode, DontCheckForStrictMode };
 enum FunctionBodyType { ArrowFunctionBodyExpression, ArrowFunctionBodyBlock, StandardFunctionBodyBlock };
 enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName };
 
-enum DestructuringKind {
+enum class DestructuringKind {
     DestructureToVariables,
     DestructureToLet,
     DestructureToConst,
+    DestructureToCatchParameters,
     DestructureToParameters,
     DestructureToExpressions
 };
@@ -801,15 +802,15 @@ private:
     {
         switch (type) {
         case DeclarationType::VarDeclaration:
-            return DestructureToVariables;
+            return DestructuringKind::DestructureToVariables;
         case DeclarationType::LetDeclaration:
-            return DestructureToLet;
+            return DestructuringKind::DestructureToLet;
         case DeclarationType::ConstDeclaration:
-            return DestructureToConst;
+            return DestructuringKind::DestructureToConst;
         }
 
         RELEASE_ASSERT_NOT_REACHED();
-        return DestructureToVariables;
+        return DestructuringKind::DestructureToVariables;
     }
 
     ALWAYS_INLINE AssignmentContext assignmentContextFromDeclarationType(DeclarationType type)
index 2c77285..91480bb 100644 (file)
@@ -243,7 +243,7 @@ public:
     int createBreakStatement(const JSTokenLocation&, const Identifier*, int, int) { return StatementResult; }
     int createContinueStatement(const JSTokenLocation&, int, int) { return StatementResult; }
     int createContinueStatement(const JSTokenLocation&, const Identifier*, int, int) { return StatementResult; }
-    int createTryStatement(const JSTokenLocation&, int, const Identifier*, int, int, int, int, VariableEnvironment&) { return StatementResult; }
+    int createTryStatement(const JSTokenLocation&, int, int, int, int, int, int, VariableEnvironment&) { return StatementResult; }
     int createSwitchStatement(const JSTokenLocation&, int, int, int, int, int, int, VariableEnvironment&) { return StatementResult; }
     int createWhileStatement(const JSTokenLocation&, int, int, int, int) { return StatementResult; }
     int createWithStatement(const JSTokenLocation&, int, int, int, int, int, int) { return StatementResult; }
index f9ab3a1..fcc24ef 100644 (file)
   cmd: runES6 :normal
 - path: es6/destructuring_empty_patterns_in_parameters.js
   cmd: runES6 :normal
+- path: es6/destructuring_in_catch_heads.js
+  cmd: runES6 :normal
 - path: es6/destructuring_in_for-in_loop_heads.js
   cmd: runES6 :normal
 - path: es6/destructuring_in_for-of_loop_heads.js
diff --git a/Source/JavaScriptCore/tests/es6/destructuring_in_catch_heads.js b/Source/JavaScriptCore/tests/es6/destructuring_in_catch_heads.js
new file mode 100644 (file)
index 0000000..6468ed7
--- /dev/null
@@ -0,0 +1,17 @@
+function test() {
+
+try {
+  throw [1,2];
+} catch([i,j]) {
+  try {
+    throw { k: 3, l: 4 };
+  } catch({k, l}) {
+    return i === 1 && j === 2 && k === 3 && l === 4;
+  }
+}
+
+}
+
+if (!test())
+    throw new Error("Test failed");
+
diff --git a/Source/JavaScriptCore/tests/stress/catch-parameter-destructuring.js b/Source/JavaScriptCore/tests/stress/catch-parameter-destructuring.js
new file mode 100644 (file)
index 0000000..50d225e
--- /dev/null
@@ -0,0 +1,146 @@
+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error('bad value: ' + actual);
+}
+
+function shouldThrow(func, errorMessage) {
+    var errorThrown = false;
+    var error = null;
+    try {
+        func();
+    } catch (e) {
+        errorThrown = true;
+        error = e;
+    }
+    if (!errorThrown)
+        throw new Error('not thrown');
+    if (String(error) !== errorMessage)
+        throw new Error(`bad error: ${String(error)}`);
+}
+
+class CallGuard {
+    constructor()
+    {
+        this.called = false;
+    }
+
+    call()
+    {
+        this.called = true;
+    }
+}
+
+(function () {
+    let guard = new CallGuard();
+    try {
+        throw { value: 42, done: false };
+    } catch ({ value, done }) {
+        shouldBe(value, 42);
+        shouldBe(done, false);
+        guard.call();
+    }
+    shouldBe(guard.called, true);
+}());
+
+(function () {
+    let guard = new CallGuard();
+    try {
+        throw { value: 42, done: false };
+    } catch ({ value: v, done: d }) {
+        shouldBe(v, 42);
+        shouldBe(d, false);
+        guard.call();
+    }
+    shouldBe(guard.called, true);
+    // lexical
+    shouldBe(typeof v, "undefined");
+    shouldBe(typeof d, "undefined");
+}());
+
+shouldThrow(function () {
+    try {
+        throw { get error() { throw new Error("OK"); } };
+    } catch ({ error }) {
+    }
+}, `Error: OK`);
+
+let guard = new CallGuard();
+shouldThrow(function () {
+    try {
+        throw { get error() { throw new Error("OK"); } };
+    } catch ({ error }) {
+    } finally {
+        guard.call();
+    }
+}, `Error: OK`);
+shouldBe(guard.called, true);
+
+(function initialize() {
+    let guard = new CallGuard();
+    try {
+        throw { value: 42, done: false };
+    } catch ({ value, done, hello = 44 }) {
+        shouldBe(value, 42);
+        shouldBe(done, false);
+        shouldBe(hello, 44);
+        guard.call();
+    }
+    shouldBe(guard.called, true);
+}());
+
+(function array() {
+    let guard = new CallGuard();
+    try {
+        throw [0, 1, 2, 3, 4, 5];
+    } catch ([ a, b, c, ...d ]) {
+        shouldBe(a, 0);
+        shouldBe(b, 1);
+        shouldBe(c, 2);
+        shouldBe(JSON.stringify(d), `[3,4,5]`);
+        guard.call();
+    }
+    shouldBe(guard.called, true);
+}());
+
+(function generator() {
+    function *gen(v) {
+        try {
+            throw v;
+        } catch ({ value = yield 42 }) {
+            yield value;
+        }
+    }
+
+    {
+        let g = gen({});
+        {
+            let { value, done } = g.next();
+            shouldBe(value, 42);
+            shouldBe(done, false);
+        }
+        {
+            let { value, done } = g.next("OK");
+            shouldBe(value, "OK");
+            shouldBe(done, false);
+        }
+        {
+            let { value, done } = g.next("OK");
+            shouldBe(value, undefined);
+            shouldBe(done, true);
+        }
+    }
+
+    {
+        let g = gen({value: 400});
+        {
+            let { value, done } = g.next();
+            shouldBe(value, 400);
+            shouldBe(done, false);
+        }
+        {
+            let { value, done } = g.next("OK");
+            shouldBe(value, undefined);
+            shouldBe(done, true);
+        }
+    }
+}());
diff --git a/Source/JavaScriptCore/tests/stress/catch-parameter-syntax.js b/Source/JavaScriptCore/tests/stress/catch-parameter-syntax.js
new file mode 100644 (file)
index 0000000..d76457a
--- /dev/null
@@ -0,0 +1,171 @@
+function testSyntax(script) {
+    try {
+        eval(script);
+    } catch (error) {
+        if (error instanceof SyntaxError)
+            throw new Error("Bad error: " + String(error));
+    }
+}
+
+function testSyntaxError(script, message) {
+    var error = null;
+    try {
+        eval(script);
+    } catch (e) {
+        error = e;
+    }
+    if (!error)
+        throw new Error("Expected syntax error not thrown");
+
+    if (String(error) !== message)
+        throw new Error("Bad error: " + String(error));
+}
+
+testSyntaxError(`
+(function () {
+    try {
+    } catch ([a, a]) {
+    }
+})
+`, `SyntaxError: Unexpected identifier 'a'. Cannot declare a lexical variable twice: 'a'.`);
+
+testSyntaxError(`
+(function () {
+    try {
+    } catch ({ a, b:a }) {
+    }
+})
+`, `SyntaxError: Unexpected identifier 'a'. Cannot declare a lexical variable twice: 'a'.`);
+
+testSyntax(`
+(function () {
+    try {
+    } catch (let) {
+    }
+})
+`, ``);
+
+testSyntax(`
+(function () {
+    try {
+    } catch ([let]) {
+    }
+})
+`, ``);
+
+testSyntaxError(`
+(function () {
+    'use strict';
+    try {
+    } catch (let) {
+    }
+})
+`, `SyntaxError: Cannot use the keyword 'let' as a catch parameter name.`);
+
+testSyntaxError(`
+(function () {
+    'use strict';
+    try {
+    } catch ([let]) {
+    }
+})
+`, `SyntaxError: Cannot use the keyword 'let' as a catch parameter name.`);
+
+
+testSyntax(`
+(function () {
+    try {
+    } catch (yield) {
+    }
+})
+`);
+
+testSyntax(`
+(function () {
+    try {
+    } catch ([yield]) {
+    }
+})
+`);
+
+testSyntaxError(`
+(function () {
+    'use strict';
+    try {
+    } catch (yield) {
+    }
+})
+`, `SyntaxError: Cannot use the keyword 'yield' as a catch parameter name.`);
+
+testSyntaxError(`
+(function () {
+    'use strict';
+    try {
+    } catch ([yield]) {
+    }
+})
+`, `SyntaxError: Cannot use the keyword 'yield' as a catch parameter name.`);
+
+testSyntaxError(`
+(function () {
+    try {
+    } catch (yield = 20) {
+    }
+})
+`, `SyntaxError: Unexpected token '='. Expected ')' to end a 'catch' target.`);
+
+testSyntax(`
+(function () {
+    try {
+    } catch ([...yield]) {
+    }
+})
+`);
+
+testSyntax(`
+(function () {
+    try {
+    } catch ([yield = 30]) {
+    }
+})
+`);
+
+testSyntax(`
+(function () {
+    try {
+    } catch ({ yield = 30 }) {
+    }
+})
+`);
+
+testSyntaxError(`
+(function () {
+    try {
+    } catch (...Hello) {
+    }
+})
+`, `SyntaxError: Unexpected token '...'. Expected a parameter pattern or a ')' in parameter list.`);
+
+testSyntaxError(`
+(function *() {
+    try {
+    } catch (yield) {
+    }
+})
+`, `SyntaxError: Cannot use the keyword 'yield' as a catch parameter name.`);
+
+testSyntax(`
+(function *() {
+    try {
+    } catch ({ value = yield 42 }) {
+    }
+})
+`);
+
+testSyntax(`
+(function *() {
+    try {
+    } catch ({ value = yield }) {
+    }
+})
+`);
index 60335f2..f52dc4e 100644 (file)
@@ -52,85 +52,85 @@ testSyntaxError(String.raw`function var() { }`, String.raw`SyntaxError: Cannot u
 testSyntaxError(String.raw`function v\u0061r() { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a function name.`);
 testSyntaxError(String.raw`function v\u{0061}r() { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a function name.`);
 
-testSyntaxError(String.raw`function a(var) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`function a(v\u0061r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`function a(v\u{0061}r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`function a(var) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`function a(v\u0061r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`function a(v\u{0061}r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
 testSyntaxError(String.raw`function a({var}) { }`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`function a({v\u0061r}) { }`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`function a({v\u{0061}r}) { }`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 
-testSyntaxError(String.raw`function a({var:var}) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`function a({var:v\u0061r}) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`function a({var:v\u{0061}r}) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`function a({var:var}) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`function a({var:v\u0061r}) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`function a({var:v\u{0061}r}) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`function a([var]) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`function a([v\u0061r]) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`function a([v\u{0061}r]) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`function a([var]) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`function a([v\u0061r]) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`function a([v\u{0061}r]) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
 testSyntaxError(String.raw`(function var() { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a function name.`);
 testSyntaxError(String.raw`(function v\u0061r() { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a function name.`);
 testSyntaxError(String.raw`(function v\u{0061}r() { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a function name.`);
 
-testSyntaxError(String.raw`(function a(var) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a(v\u0061r) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a(v\u{0061}r) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a(var) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a(v\u0061r) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a(v\u{0061}r) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
 testSyntaxError(String.raw`(function a({var}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a({v\u0061r}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a({v\u{0061}r}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 
-testSyntaxError(String.raw`(function a({var:var}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a({var:v\u0061r}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a({var:v\u{0061}r}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a({var:var}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a({var:v\u0061r}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a({var:v\u{0061}r}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`(function a([var]) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a([v\u0061r]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a([v\u{0061}r]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a([var]) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a([v\u0061r]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a([v\u{0061}r]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
 testSyntaxError(String.raw`(function a([{var}]) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a([{v\u0061r}]) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a([{v\u{0061}r}]) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 
-testSyntaxError(String.raw`(function a([{var:var}]) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a([{var:v\u0061r}]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a([{var:v\u{0061}r}]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a([{var:var}]) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a([{var:v\u0061r}]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a([{var:v\u{0061}r}]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`(function a([[var]]) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a([[v\u0061r]]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a([[v\u{0061}r]]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a([[var]]) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a([[v\u0061r]]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a([[v\u{0061}r]]) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
 testSyntaxError(String.raw`(function a({ hello: {var}}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a({ hello: {v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a({ hello: {v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 
-testSyntaxError(String.raw`(function a({ hello: {var:var}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a({ hello: {var:v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a({ hello: {var:v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a({ hello: {var:var}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ hello: {var:v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ hello: {var:v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`(function a({ hello: [var]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a({ hello: [v\u0061r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a({ hello: [v\u{0061}r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a({ hello: [var]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ hello: [v\u0061r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ hello: [v\u{0061}r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
 testSyntaxError(String.raw`(function a({ 0: {var} }) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a({ 0: {v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 testSyntaxError(String.raw`(function a({ 0: {v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'var'.`);
 
-testSyntaxError(String.raw`(function a({ 0: {var:var}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a({ 0: {var:v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a({ 0: {var:v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a({ 0: {var:var}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ 0: {var:v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ 0: {var:v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`(function a({ 0: {value:var}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a({ 0: {value:v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a({ 0: {value:v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a({ 0: {value:var}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ 0: {value:v\u0061r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ 0: {value:v\u{0061}r}}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`(function a({ 0: [var]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a variable name.`);
-testSyntaxError(String.raw`(function a({ 0: [v\u0061r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a variable name.`);
-testSyntaxError(String.raw`(function a({ 0: [v\u{0061}r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a variable name.`);
+testSyntaxError(String.raw`(function a({ 0: [var]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'var' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ 0: [v\u0061r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a parameter name.`);
+testSyntaxError(String.raw`(function a({ 0: [v\u{0061}r]}) { })`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a parameter name.`);
 
-testSyntaxError(String.raw`try { } catch(var) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a catch variable name.`);
-testSyntaxError(String.raw`try { } catch(v\u0061r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a catch variable name.`);
-testSyntaxError(String.raw`try { } catch(v\u{0061}r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a catch variable name.`);
+testSyntaxError(String.raw`try { } catch(var) { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a catch parameter name.`);
+testSyntaxError(String.raw`try { } catch(v\u0061r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a catch parameter name.`);
+testSyntaxError(String.raw`try { } catch(v\u{0061}r) { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u{0061}r' as a catch parameter name.`);
 
 testSyntaxError(String.raw`class var { }`, String.raw`SyntaxError: Cannot use the keyword 'var' as a class name.`);
 testSyntaxError(String.raw`class v\u0061r { }`, String.raw`SyntaxError: Cannot use the keyword 'v\u0061r' as a class name.`);
index 51b4921..38bf6f8 100644 (file)
@@ -48,13 +48,13 @@ function t1() {
     "use strict";
     let yield = 20;
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a lexical variable name.`);
 testSyntaxError(`
 function t1() {
     "use strict";
     const yield = 20;
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a lexical variable name.`);
 
 testSyntax(`
 function t1() {
@@ -118,13 +118,13 @@ function t1() {
     "use strict";
     let { i: yield } = 20;
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a lexical variable name.`);
 testSyntaxError(`
 function t1() {
     "use strict";
     const { i: yield } = 20;
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a lexical variable name.`);
 
 testSyntax(`
 function t1() {
@@ -153,13 +153,13 @@ function t1() {
     "use strict";
     let [ yield ] = 20;
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a lexical variable name.`);
 testSyntaxError(`
 function t1() {
     "use strict";
     const [ yield ] = 20;
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a lexical variable name.`);
 
 testSyntax(`
 function t1() {
@@ -187,7 +187,7 @@ function t1() {
     } catch (yield) {
     }
 }
-`, `SyntaxError: Cannot use the keyword 'yield' as a catch variable name.`);
+`, `SyntaxError: Cannot use the keyword 'yield' as a catch parameter name.`);
 
 testSyntax(`
 function t1() {