Index: src/parsing/parameter-initializer-rewriter.cc |
diff --git a/src/parsing/parameter-initializer-rewriter.cc b/src/parsing/parameter-initializer-rewriter.cc |
index 4bb367d7d08ba91dae3ac67a42a4a3705455f179..27c4d7a8d05f29b05658020201d0edec70ff1674 100644 |
--- a/src/parsing/parameter-initializer-rewriter.cc |
+++ b/src/parsing/parameter-initializer-rewriter.cc |
@@ -33,7 +33,6 @@ class Rewriter final : public AstExpressionVisitor { |
void VisitExpression(Expression* expr) override {} |
void VisitFunctionLiteral(FunctionLiteral* expr) override; |
- void VisitClassLiteral(ClassLiteral* expr) override; |
void VisitVariableProxy(VariableProxy* expr) override; |
void VisitBlock(Block* stmt) override; |
@@ -66,26 +65,8 @@ Rewriter::~Rewriter() { |
} |
void Rewriter::VisitFunctionLiteral(FunctionLiteral* function_literal) { |
- function_literal->scope()->ReplaceOuterScope(new_scope_); |
-} |
- |
- |
-void Rewriter::VisitClassLiteral(ClassLiteral* class_literal) { |
- class_literal->scope()->ReplaceOuterScope(new_scope_); |
- if (class_literal->extends() != nullptr) { |
- Visit(class_literal->extends()); |
- } |
- // No need to visit the constructor since it will have the class |
- // scope on its scope chain. |
- ZoneList<ObjectLiteralProperty*>* props = class_literal->properties(); |
- for (int i = 0; i < props->length(); ++i) { |
- ObjectLiteralProperty* prop = props->at(i); |
- if (!prop->key()->IsLiteral()) { |
- Visit(prop->key()); |
- } |
- // No need to visit the values, since all values are functions with |
- // the class scope on their scope chain. |
- DCHECK(prop->value()->IsFunctionLiteral()); |
+ if (function_literal->scope()->outer_scope() == old_scope_) { |
+ function_literal->scope()->ReplaceOuterScope(new_scope_); |
} |
} |
@@ -109,22 +90,26 @@ void Rewriter::VisitVariableProxy(VariableProxy* proxy) { |
void Rewriter::VisitBlock(Block* stmt) { |
- if (stmt->scope() != nullptr) |
+ if (stmt->scope() != nullptr && stmt->scope()->outer_scope() == old_scope_) { |
stmt->scope()->ReplaceOuterScope(new_scope_); |
- else |
- VisitStatements(stmt->statements()); |
+ } |
+ VisitStatements(stmt->statements()); |
} |
void Rewriter::VisitTryCatchStatement(TryCatchStatement* stmt) { |
Visit(stmt->try_block()); |
- stmt->scope()->ReplaceOuterScope(new_scope_); |
+ if (stmt->scope()->outer_scope() == old_scope_) { |
+ stmt->scope()->ReplaceOuterScope(new_scope_); |
+ } |
} |
void Rewriter::VisitWithStatement(WithStatement* stmt) { |
Visit(stmt->expression()); |
- stmt->scope()->ReplaceOuterScope(new_scope_); |
+ if (stmt->scope()->outer_scope() == old_scope_) { |
+ stmt->scope()->ReplaceOuterScope(new_scope_); |
+ } |
} |