delete expression should not throw without a reference
authorross.kirsling@sony.com <ross.kirsling@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Oct 2018 17:31:21 +0000 (17:31 +0000)
committerross.kirsling@sony.com <ross.kirsling@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Oct 2018 17:31:21 +0000 (17:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190637

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseUnaryExpression):
Eliminate non-spec-compliant switch case.

LayoutTests:

* js/basic-strict-mode-expected.txt:
* js/script-tests/basic-strict-mode.js:
Update test cases.

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

LayoutTests/ChangeLog
LayoutTests/js/basic-strict-mode-expected.txt
LayoutTests/js/script-tests/basic-strict-mode.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/parser/Parser.cpp

index 122f479..60c7713 100644 (file)
@@ -1,3 +1,14 @@
+2018-10-18  Ross Kirsling  <ross.kirsling@sony.com>
+
+        delete expression should not throw without a reference
+        https://bugs.webkit.org/show_bug.cgi?id=190637
+
+        Reviewed by Yusuke Suzuki.
+
+        * js/basic-strict-mode-expected.txt:
+        * js/script-tests/basic-strict-mode.js:
+        Update test cases.
+
 2018-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         [GTK] fast/selectors/read-only-read-write-input-basics.html failing since r237245
index d5802e1..7316ad4 100644 (file)
@@ -153,12 +153,12 @@ PASS 'use strict'; function f() { --(1, arguments) } threw exception SyntaxError
 PASS (function(){'use strict'; function f() { --(1, arguments) }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
 PASS 'use strict'; function f() { (1, arguments)-- } threw exception SyntaxError: 'arguments' cannot be modified in strict mode..
 PASS (function(){'use strict'; function f() { (1, arguments)-- }}) threw exception SyntaxError: 'arguments' cannot be modified in strict mode..
-PASS 'use strict'; if (0) delete +a.b threw exception SyntaxError: The delete operator requires a reference expression..
-PASS (function(){'use strict'; if (0) delete +a.b}) threw exception SyntaxError: The delete operator requires a reference expression..
-PASS 'use strict'; if (0) delete ++a.b threw exception SyntaxError: The delete operator requires a reference expression..
-PASS (function(){'use strict'; if (0) delete ++a.b}) threw exception SyntaxError: The delete operator requires a reference expression..
-PASS 'use strict'; if (0) delete void a.b threw exception SyntaxError: The delete operator requires a reference expression..
-PASS (function(){'use strict'; if (0) delete void a.b}) threw exception SyntaxError: The delete operator requires a reference expression..
+PASS 'use strict'; if (0) delete +a.b did not throw exception.
+PASS (function(){'use strict'; if (0) delete +a.b}) did not throw exception.
+PASS 'use strict'; if (0) delete ++a.b did not throw exception.
+PASS (function(){'use strict'; if (0) delete ++a.b}) did not throw exception.
+PASS 'use strict'; if (0) delete void a.b did not throw exception.
+PASS (function(){'use strict'; if (0) delete void a.b}) did not throw exception.
 PASS (function (a){'use strict'; a = false; return a !== arguments[0]; })(true) is true
 PASS (function (a){'use strict'; arguments[0] = false; return a !== arguments[0]; })(true) is true
 PASS (function (a){'use strict'; a=false; return arguments; })(true)[0] is true
index 6a84528..9f617b2 100644 (file)
@@ -20,6 +20,10 @@ function shouldBeSyntaxError(str) {
     shouldThrow(str);
     shouldThrow("(function(){" + str + "})");
 }
+function shouldNotBeSyntaxError(str) {
+    shouldNotThrow(str);
+    shouldNotThrow("(function(){" + str + "})");
+}
 function testLineContinuation() {
     "use stric\
 t";
@@ -148,9 +152,9 @@ shouldBeSyntaxError("'use strict'; function f() { ++(1, arguments) }");
 shouldBeSyntaxError("'use strict'; function f() { (1, arguments)++ }");
 shouldBeSyntaxError("'use strict'; function f() { --(1, arguments) }");
 shouldBeSyntaxError("'use strict'; function f() { (1, arguments)-- }");
-shouldBeSyntaxError("'use strict'; if (0) delete +a.b");
-shouldBeSyntaxError("'use strict'; if (0) delete ++a.b");
-shouldBeSyntaxError("'use strict'; if (0) delete void a.b");
+shouldNotBeSyntaxError("'use strict'; if (0) delete +a.b");
+shouldNotBeSyntaxError("'use strict'; if (0) delete ++a.b");
+shouldNotBeSyntaxError("'use strict'; if (0) delete void a.b");
 
 shouldBeTrue("(function (a){'use strict'; a = false; return a !== arguments[0]; })(true)");
 shouldBeTrue("(function (a){'use strict'; arguments[0] = false; return a !== arguments[0]; })(true)");
index bf3d041..2576295 100644 (file)
@@ -1,3 +1,14 @@
+2018-10-18  Ross Kirsling  <ross.kirsling@sony.com>
+
+        delete expression should not throw without a reference
+        https://bugs.webkit.org/show_bug.cgi?id=190637
+
+        Reviewed by Yusuke Suzuki.
+
+        * parser/Parser.cpp:
+        (JSC::Parser<LexerType>::parseUnaryExpression):
+        Eliminate non-spec-compliant switch case.
+
 2018-10-18  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
 
         [JSC] JSC should have "parseFunction" to optimize Function constructor
index 935ad3f..224d761 100644 (file)
@@ -4943,10 +4943,6 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseUnaryExpress
                 modifiesExpr = true;
                 requiresLExpr = true;
                 break;
-            case DELETETOKEN:
-                semanticFailIfTrue(requiresLExpr, "The ", operatorString(true, lastOperator), " operator requires a reference expression");
-                requiresLExpr = true;
-                break;
             default:
                 semanticFailIfTrue(requiresLExpr, "The ", operatorString(true, lastOperator), " operator requires a reference expression");
                 break;