| OLD | NEW | 
|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/compiler/ast-graph-builder.h" | 5 #include "src/compiler/ast-graph-builder.h" | 
| 6 | 6 | 
| 7 #include "src/compiler.h" | 7 #include "src/compiler.h" | 
| 8 #include "src/compiler/ast-loop-assignment-analyzer.h" | 8 #include "src/compiler/ast-loop-assignment-analyzer.h" | 
| 9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" | 
| 10 #include "src/compiler/js-type-feedback.h" | 10 #include "src/compiler/js-type-feedback.h" | 
| (...skipping 1515 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1526 | 1526 | 
| 1527   // Create node to instantiate a new closure. | 1527   // Create node to instantiate a new closure. | 
| 1528   PretenureFlag pretenure = expr->pretenure() ? TENURED : NOT_TENURED; | 1528   PretenureFlag pretenure = expr->pretenure() ? TENURED : NOT_TENURED; | 
| 1529   const Operator* op = javascript()->CreateClosure(shared_info, pretenure); | 1529   const Operator* op = javascript()->CreateClosure(shared_info, pretenure); | 
| 1530   Node* value = NewNode(op); | 1530   Node* value = NewNode(op); | 
| 1531   ast_context()->ProduceValue(value); | 1531   ast_context()->ProduceValue(value); | 
| 1532 } | 1532 } | 
| 1533 | 1533 | 
| 1534 | 1534 | 
| 1535 void AstGraphBuilder::VisitClassLiteral(ClassLiteral* expr) { | 1535 void AstGraphBuilder::VisitClassLiteral(ClassLiteral* expr) { | 
| 1536   if (expr->scope() == NULL) { | 1536   // Visit declarations and class literal in a block scope. | 
| 1537     // Visit class literal in the same scope, no declarations. | 1537   if (expr->scope()->ContextLocalCount() > 0) { | 
|  | 1538     Node* context = BuildLocalBlockContext(expr->scope()); | 
|  | 1539     ContextScope scope(this, expr->scope(), context); | 
|  | 1540     VisitDeclarations(expr->scope()->declarations()); | 
| 1538     VisitClassLiteralContents(expr); | 1541     VisitClassLiteralContents(expr); | 
| 1539   } else { | 1542   } else { | 
| 1540     // Visit declarations and class literal in a block scope. | 1543     VisitDeclarations(expr->scope()->declarations()); | 
| 1541     if (expr->scope()->ContextLocalCount() > 0) { | 1544     VisitClassLiteralContents(expr); | 
| 1542       Node* context = BuildLocalBlockContext(expr->scope()); |  | 
| 1543       ContextScope scope(this, expr->scope(), context); |  | 
| 1544       VisitDeclarations(expr->scope()->declarations()); |  | 
| 1545       VisitClassLiteralContents(expr); |  | 
| 1546     } else { |  | 
| 1547       VisitDeclarations(expr->scope()->declarations()); |  | 
| 1548       VisitClassLiteralContents(expr); |  | 
| 1549     } |  | 
| 1550   } | 1545   } | 
| 1551 } | 1546 } | 
| 1552 | 1547 | 
| 1553 | 1548 | 
| 1554 void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) { | 1549 void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) { | 
| 1555   Node* class_name = expr->raw_name() ? jsgraph()->Constant(expr->name()) | 1550   Node* class_name = expr->raw_name() ? jsgraph()->Constant(expr->name()) | 
| 1556                                       : jsgraph()->UndefinedConstant(); | 1551                                       : jsgraph()->UndefinedConstant(); | 
| 1557 | 1552 | 
| 1558   // The class name is expected on the operand stack. | 1553   // The class name is expected on the operand stack. | 
| 1559   environment()->Push(class_name); | 1554   environment()->Push(class_name); | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1637 | 1632 | 
| 1638   // Set both the prototype and constructor to have fast properties, and also | 1633   // Set both the prototype and constructor to have fast properties, and also | 
| 1639   // freeze them in strong mode. | 1634   // freeze them in strong mode. | 
| 1640   environment()->Pop();  // proto | 1635   environment()->Pop();  // proto | 
| 1641   environment()->Pop();  // literal | 1636   environment()->Pop();  // literal | 
| 1642   const Operator* op = | 1637   const Operator* op = | 
| 1643       javascript()->CallRuntime(Runtime::kFinalizeClassDefinition, 2); | 1638       javascript()->CallRuntime(Runtime::kFinalizeClassDefinition, 2); | 
| 1644   literal = NewNode(op, literal, proto); | 1639   literal = NewNode(op, literal, proto); | 
| 1645 | 1640 | 
| 1646   // Assign to class variable. | 1641   // Assign to class variable. | 
| 1647   if (expr->scope() != NULL) { | 1642   if (expr->class_variable_proxy() != nullptr) { | 
| 1648     DCHECK_NOT_NULL(expr->class_variable_proxy()); |  | 
| 1649     Variable* var = expr->class_variable_proxy()->var(); | 1643     Variable* var = expr->class_variable_proxy()->var(); | 
| 1650     FrameStateBeforeAndAfter states(this, BailoutId::None()); | 1644     FrameStateBeforeAndAfter states(this, BailoutId::None()); | 
| 1651     VectorSlotPair feedback = CreateVectorSlotPair( | 1645     VectorSlotPair feedback = CreateVectorSlotPair( | 
| 1652         expr->NeedsProxySlot() ? expr->ProxySlot() | 1646         expr->NeedsProxySlot() ? expr->ProxySlot() | 
| 1653                                : FeedbackVectorSlot::Invalid()); | 1647                                : FeedbackVectorSlot::Invalid()); | 
| 1654     BuildVariableAssignment(var, literal, Token::INIT_CONST, feedback, | 1648     BuildVariableAssignment(var, literal, Token::INIT_CONST, feedback, | 
| 1655                             BailoutId::None(), states); | 1649                             BailoutId::None(), states); | 
| 1656   } | 1650   } | 
| 1657   ast_context()->ProduceValue(literal); | 1651   ast_context()->ProduceValue(literal); | 
| 1658 } | 1652 } | 
| (...skipping 2632 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4291     // Phi does not exist yet, introduce one. | 4285     // Phi does not exist yet, introduce one. | 
| 4292     value = NewPhi(inputs, value, control); | 4286     value = NewPhi(inputs, value, control); | 
| 4293     value->ReplaceInput(inputs - 1, other); | 4287     value->ReplaceInput(inputs - 1, other); | 
| 4294   } | 4288   } | 
| 4295   return value; | 4289   return value; | 
| 4296 } | 4290 } | 
| 4297 | 4291 | 
| 4298 }  // namespace compiler | 4292 }  // namespace compiler | 
| 4299 }  // namespace internal | 4293 }  // namespace internal | 
| 4300 }  // namespace v8 | 4294 }  // namespace v8 | 
| OLD | NEW | 
|---|