Title: [191037] trunk/Source/_javascript_Core
Revision
191037
Author
commit-qu...@webkit.org
Date
2015-10-14 00:08:54 -0700 (Wed, 14 Oct 2015)

Log Message

Unreviewed, rolling out r191030.
https://bugs.webkit.org/show_bug.cgi?id=150116

caused js/class-syntax-method-names.html to crash on debug
builds (Requested by alexchristensen_ on #webkit).

Reverted changeset:

"[ES6] Class _expression_ should have lexical environment that
has itself as an imutable binding"
https://bugs.webkit.org/show_bug.cgi?id=150089
http://trac.webkit.org/changeset/191030

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (191036 => 191037)


--- trunk/Source/_javascript_Core/ChangeLog	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-10-14 07:08:54 UTC (rev 191037)
@@ -1,3 +1,18 @@
+2015-10-14  Commit Queue  <commit-qu...@webkit.org>
+
+        Unreviewed, rolling out r191030.
+        https://bugs.webkit.org/show_bug.cgi?id=150116
+
+        caused js/class-syntax-method-names.html to crash on debug
+        builds (Requested by alexchristensen_ on #webkit).
+
+        Reverted changeset:
+
+        "[ES6] Class _expression_ should have lexical environment that
+        has itself as an imutable binding"
+        https://bugs.webkit.org/show_bug.cgi?id=150089
+        http://trac.webkit.org/changeset/191030
+
 2015-10-13  Yusuke Suzuki  <utatane....@gmail.com>
 
         [ES6] Class _expression_ should have lexical environment that has itself as an imutable binding

Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (191036 => 191037)


--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2015-10-14 07:08:54 UTC (rev 191037)
@@ -3010,9 +3010,6 @@
 
 RegisterID* ClassExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
 {
-    if (!m_name.isNull())
-        generator.pushLexicalScope(this, true);
-
     RefPtr<RegisterID> superclass;
     if (m_classHeritage) {
         superclass = generator.newTemporary();
@@ -3077,14 +3074,6 @@
     if (m_instanceMethods)
         generator.emitNode(prototype.get(), m_instanceMethods);
 
-    if (!m_name.isNull()) {
-        Variable classNameVar = generator.variable(m_name);
-        RELEASE_ASSERT(classNameVar.isResolved());
-        RefPtr<RegisterID> scope = generator.emitResolveScope(nullptr, classNameVar);
-        generator.emitPutToScope(scope.get(), classNameVar, constructor.get(), ThrowIfNotFound, Initialization);
-        generator.popLexicalScope(this);
-    }
-
     return generator.moveToDestinationIfNeeded(dst, constructor.get());
 }
 #endif

Modified: trunk/Source/_javascript_Core/parser/ASTBuilder.h (191036 => 191037)


--- trunk/Source/_javascript_Core/parser/ASTBuilder.h	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/parser/ASTBuilder.h	2015-10-14 07:08:54 UTC (rev 191037)
@@ -342,10 +342,10 @@
     }
 
 #if ENABLE(ES6_CLASS_SYNTAX)
-    ClassExprNode* createClassExpr(const JSTokenLocation& location, const Identifier& name, VariableEnvironment& classEnvironment, ExpressionNode* constructor,
+    ClassExprNode* createClassExpr(const JSTokenLocation& location, const Identifier& name, ExpressionNode* constructor,
         ExpressionNode* parentClass, PropertyListNode* instanceMethods, PropertyListNode* staticMethods)
     {
-        return new (m_parserArena) ClassExprNode(location, name, classEnvironment, constructor, parentClass, instanceMethods, staticMethods);
+        return new (m_parserArena) ClassExprNode(location, name, constructor, parentClass, instanceMethods, staticMethods);
     }
 #endif
 

Modified: trunk/Source/_javascript_Core/parser/NodeConstructors.h (191036 => 191037)


--- trunk/Source/_javascript_Core/parser/NodeConstructors.h	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/parser/NodeConstructors.h	2015-10-14 07:08:54 UTC (rev 191037)
@@ -922,9 +922,8 @@
     {
     }
 
-    inline ClassExprNode::ClassExprNode(const JSTokenLocation& location, const Identifier& name, VariableEnvironment& classEnvironment, ExpressionNode* constructorExpression, ExpressionNode* classHeritage, PropertyListNode* instanceMethods, PropertyListNode* staticMethods)
+    inline ClassExprNode::ClassExprNode(const JSTokenLocation& location, const Identifier& name, ExpressionNode* constructorExpression, ExpressionNode* classHeritage, PropertyListNode* instanceMethods, PropertyListNode* staticMethods)
         : ExpressionNode(location)
-        , VariableEnvironmentNode(classEnvironment)
         , m_name(name)
         , m_constructorExpression(constructorExpression)
         , m_classHeritage(classHeritage)

Modified: trunk/Source/_javascript_Core/parser/Nodes.h (191036 => 191037)


--- trunk/Source/_javascript_Core/parser/Nodes.h	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/parser/Nodes.h	2015-10-14 07:08:54 UTC (rev 191037)
@@ -1930,11 +1930,9 @@
     };
 
 #if ENABLE(ES6_CLASS_SYNTAX)
-    class ClassExprNode final : public ExpressionNode, public VariableEnvironmentNode {
+    class ClassExprNode final : public ExpressionNode {
     public:
-        using ParserArenaDeletable::operator new;
-
-        ClassExprNode(const JSTokenLocation&, const Identifier&, VariableEnvironment& classEnvironment, ExpressionNode* constructorExpresssion,
+        ClassExprNode(const JSTokenLocation&, const Identifier&, ExpressionNode* constructorExpresssion,
             ExpressionNode* parentClass, PropertyListNode* instanceMethods, PropertyListNode* staticMethods);
 
         const Identifier& name() { return m_name; }

Modified: trunk/Source/_javascript_Core/parser/Parser.cpp (191036 => 191037)


--- trunk/Source/_javascript_Core/parser/Parser.cpp	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/parser/Parser.cpp	2015-10-14 07:08:54 UTC (rev 191037)
@@ -1923,8 +1923,6 @@
     next();
 
     AutoPopScopeRef classScope(this, pushScope());
-    classScope->setIsLexicalScope();
-    classScope->preventVarDeclarations();
     classScope->setStrictMode();
 
     const Identifier* className = nullptr;
@@ -1932,7 +1930,7 @@
         className = m_token.m_data.ident;
         info.className = className;
         next();
-        failIfTrue(classScope->declareLexicalVariable(className, true) & DeclarationResult::InvalidStrictMode, "'", className->impl(), "' is not a valid class name");
+        failIfTrue(classScope->declareVariable(className) & DeclarationResult::InvalidStrictMode, "'", className->impl(), "' is not a valid class name");
     } else if (requirements == FunctionNeedsName) {
         if (match(OPENBRACE))
             semanticFail("Class statements must have a name");
@@ -2049,11 +2047,10 @@
         }
     }
 
+    popScope(classScope, TreeBuilder::NeedsFreeVariableInfo);
     consumeOrFail(CLOSEBRACE, "Expected a closing '}' after a class body");
 
-    auto classExpression = context.createClassExpr(location, *className, classScope->finalizeLexicalEnvironment(), constructor, parentClass, instanceMethods, staticMethods);
-    popScope(classScope, TreeBuilder::NeedsFreeVariableInfo);
-    return classExpression;
+    return context.createClassExpr(location, *className, constructor, parentClass, instanceMethods, staticMethods);
 }
 #endif
 

Modified: trunk/Source/_javascript_Core/parser/SyntaxChecker.h (191036 => 191037)


--- trunk/Source/_javascript_Core/parser/SyntaxChecker.h	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/parser/SyntaxChecker.h	2015-10-14 07:08:54 UTC (rev 191037)
@@ -183,7 +183,7 @@
     ExpressionType createEmptyVarExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
     ExpressionType createEmptyLetExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
 #if ENABLE(ES6_CLASS_SYNTAX)
-    ClassExpression createClassExpr(const JSTokenLocation&, const Identifier&, VariableEnvironment&, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; }
+    ClassExpression createClassExpr(const JSTokenLocation&, const Identifier&, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; }
 #endif
     ExpressionType createFunctionExpr(const JSTokenLocation&, const ParserFunctionInfo<SyntaxChecker>&) { return FunctionExpr; }
     int createFunctionMetadata(const JSTokenLocation&, const JSTokenLocation&, int, int, bool, int, int, int, ConstructorKind, unsigned, SourceParseMode, bool, bool) { return FunctionBodyResult; }

Modified: trunk/Source/_javascript_Core/tests/es6.yaml (191036 => 191037)


--- trunk/Source/_javascript_Core/tests/es6.yaml	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/tests/es6.yaml	2015-10-14 07:08:54 UTC (rev 191037)
@@ -86,8 +86,6 @@
   cmd: runES6 :normal
 - path: es6/class_class_expression.js
   cmd: runES6 :normal
-- path: es6/class_class_name_is_lexically_scoped.js
-  cmd: runES6 :normal
 - path: es6/class_class_statement.js
   cmd: runES6 :normal
 - path: es6/class_computed_accessor_properties.js
@@ -730,6 +728,8 @@
   cmd: runES6 :normal
 - path: es6/block-level_function_declaration.js
   cmd: runES6 :fail
+- path: es6/class_class_name_is_lexically_scoped.js
+  cmd: runES6 :fail
 - path: es6/destructuring_computed_properties.js
   cmd: runES6 :fail
 - path: es6/destructuring_defaults_in_parameters_separate_scope.js

Deleted: trunk/Source/_javascript_Core/tests/stress/class-_expression_-generates-environment.js (191036 => 191037)


--- trunk/Source/_javascript_Core/tests/stress/class-_expression_-generates-environment.js	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/tests/stress/class-_expression_-generates-environment.js	2015-10-14 07:08:54 UTC (rev 191037)
@@ -1,64 +0,0 @@
-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)}`);
-}
-
-(function () {
-    class A {
-        method() {
-            shouldBe(typeof A, 'function');
-        }
-
-        static staticMethod() {
-            shouldBe(typeof A, 'function');
-        }
-    }
-
-    let originalA = A;
-
-    originalA.staticMethod();
-    (new originalA()).method();
-    A = undefined;
-    originalA.staticMethod();
-    (new originalA()).method();
-}());
-
-
-(function () {
-    class A {
-        method() {
-            shouldThrow(() => {
-                A = 42;
-            }, `TypeError: Attempted to assign to readonly property.`);
-        }
-
-        static staticMethod() {
-            shouldThrow(() => {
-                A = 42;
-            }, `TypeError: Attempted to assign to readonly property.`);
-        }
-    }
-
-    let originalA = A;
-
-    originalA.staticMethod();
-    (new originalA()).method();
-    A = undefined;
-    originalA.staticMethod();
-    (new originalA()).method();
-}());

Deleted: trunk/Source/_javascript_Core/tests/stress/class-_expression_-should-be-tdz-in-heritage.js (191036 => 191037)


--- trunk/Source/_javascript_Core/tests/stress/class-_expression_-should-be-tdz-in-heritage.js	2015-10-14 06:26:11 UTC (rev 191036)
+++ trunk/Source/_javascript_Core/tests/stress/class-_expression_-should-be-tdz-in-heritage.js	2015-10-14 07:08:54 UTC (rev 191037)
@@ -1,20 +0,0 @@
-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)}`);
-}
-
-
-shouldThrow(function () {
-    class A extends A {
-    }
-}, `ReferenceError: Cannot access uninitialized variable.`);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to