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.`);