| 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();
|
| }
|
|
|