Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index 16bed66fda226697f1239c2975666e91564e4d1d..4d682d822e502934ccb3ccb3be88cbbda002e41b 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -1639,121 +1639,6 @@ void AstGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) { |
} |
-void AstGraphBuilder::VisitClassLiteral(ClassLiteral* expr) { |
- // Visit declarations and class literal in a block scope. |
- if (expr->scope()->ContextLocalCount() > 0) { |
- Node* context = BuildLocalBlockContext(expr->scope()); |
- ContextScope scope(this, expr->scope(), context); |
- VisitDeclarations(expr->scope()->declarations()); |
- VisitClassLiteralContents(expr); |
- } else { |
- VisitDeclarations(expr->scope()->declarations()); |
- VisitClassLiteralContents(expr); |
- } |
-} |
- |
- |
-void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) { |
- VisitForValueOrTheHole(expr->extends()); |
- VisitForValue(expr->constructor()); |
- |
- // Create node to instantiate a new class. |
- Node* constructor = environment()->Pop(); |
- Node* extends = environment()->Pop(); |
- Node* start = jsgraph()->Constant(expr->start_position()); |
- Node* end = jsgraph()->Constant(expr->end_position()); |
- const Operator* opc = javascript()->CallRuntime(Runtime::kDefineClass); |
- Node* literal = NewNode(opc, extends, constructor, start, end); |
- PrepareFrameState(literal, expr->CreateLiteralId(), |
- OutputFrameStateCombine::Push()); |
- environment()->Push(literal); |
- |
- // Load the "prototype" from the constructor. |
- PrepareEagerCheckpoint(expr->CreateLiteralId()); |
- Handle<Name> name = isolate()->factory()->prototype_string(); |
- VectorSlotPair pair = CreateVectorSlotPair(expr->PrototypeSlot()); |
- Node* prototype = BuildNamedLoad(literal, name, pair); |
- PrepareFrameState(prototype, expr->PrototypeId(), |
- OutputFrameStateCombine::Push()); |
- environment()->Push(prototype); |
- |
- // Create nodes to store method values into the literal. |
- for (int i = 0; i < expr->properties()->length(); i++) { |
- ObjectLiteral::Property* property = expr->properties()->at(i); |
- environment()->Push(environment()->Peek(property->is_static() ? 1 : 0)); |
- |
- VisitForValue(property->key()); |
- Node* name = BuildToName(environment()->Pop(), expr->GetIdForProperty(i)); |
- environment()->Push(name); |
- |
- // The static prototype property is read only. We handle the non computed |
- // property name case in the parser. Since this is the only case where we |
- // need to check for an own read only property we special case this so we do |
- // not need to do this for every property. |
- if (property->is_static() && property->is_computed_name()) { |
- Node* check = BuildThrowIfStaticPrototype(environment()->Pop(), |
- expr->GetIdForProperty(i)); |
- environment()->Push(check); |
- } |
- |
- VisitForValue(property->value()); |
- Node* value = environment()->Pop(); |
- Node* key = environment()->Pop(); |
- Node* receiver = environment()->Pop(); |
- |
- BuildSetHomeObject(value, receiver, property); |
- |
- switch (property->kind()) { |
- case ObjectLiteral::Property::CONSTANT: |
- case ObjectLiteral::Property::MATERIALIZED_LITERAL: |
- case ObjectLiteral::Property::PROTOTYPE: |
- UNREACHABLE(); |
- case ObjectLiteral::Property::COMPUTED: { |
- Node* attr = jsgraph()->Constant(DONT_ENUM); |
- Node* set_function_name = |
- jsgraph()->Constant(property->NeedsSetFunctionName()); |
- const Operator* op = |
- javascript()->CallRuntime(Runtime::kDefineDataPropertyInLiteral); |
- Node* call = NewNode(op, receiver, key, value, attr, set_function_name); |
- PrepareFrameState(call, BailoutId::None()); |
- break; |
- } |
- case ObjectLiteral::Property::GETTER: { |
- Node* attr = jsgraph()->Constant(DONT_ENUM); |
- const Operator* op = javascript()->CallRuntime( |
- Runtime::kDefineGetterPropertyUnchecked, 4); |
- NewNode(op, receiver, key, value, attr); |
- break; |
- } |
- case ObjectLiteral::Property::SETTER: { |
- Node* attr = jsgraph()->Constant(DONT_ENUM); |
- const Operator* op = javascript()->CallRuntime( |
- Runtime::kDefineSetterPropertyUnchecked, 4); |
- NewNode(op, receiver, key, value, attr); |
- break; |
- } |
- } |
- } |
- |
- // Set the constructor to have fast properties. |
- prototype = environment()->Pop(); |
- literal = environment()->Pop(); |
- const Operator* op = javascript()->CallRuntime(Runtime::kToFastProperties); |
- literal = NewNode(op, literal); |
- |
- // Assign to class variable. |
- if (expr->class_variable_proxy() != nullptr) { |
- Variable* var = expr->class_variable_proxy()->var(); |
- VectorSlotPair feedback = CreateVectorSlotPair( |
- expr->NeedsProxySlot() ? expr->ProxySlot() |
- : FeedbackVectorSlot::Invalid()); |
- BuildVariableAssignment(var, literal, Token::INIT, feedback, |
- BailoutId::None()); |
- } |
- ast_context()->ProduceValue(expr, literal); |
-} |
- |
- |
void AstGraphBuilder::VisitNativeFunctionLiteral(NativeFunctionLiteral* expr) { |
UNREACHABLE(); |
} |