| 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/ast/compile-time-value.h" |     7 #include "src/ast/compile-time-value.h" | 
|     8 #include "src/ast/scopes.h" |     8 #include "src/ast/scopes.h" | 
|     9 #include "src/compilation-info.h" |     9 #include "src/compilation-info.h" | 
|    10 #include "src/compiler.h" |    10 #include "src/compiler.h" | 
| (...skipping 1641 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1652         NewNode(op, receiver, key, value, attr); |  1652         NewNode(op, receiver, key, value, attr); | 
|  1653         break; |  1653         break; | 
|  1654       } |  1654       } | 
|  1655       case ClassLiteral::Property::FIELD: { |  1655       case ClassLiteral::Property::FIELD: { | 
|  1656         UNREACHABLE(); |  1656         UNREACHABLE(); | 
|  1657         break; |  1657         break; | 
|  1658       } |  1658       } | 
|  1659     } |  1659     } | 
|  1660   } |  1660   } | 
|  1661  |  1661  | 
 |  1662   // ES6 section 14.5.16 class expression evaluation, step 5 | 
 |  1663   DCHECK(!expr->constructor()->name().is_null()); | 
 |  1664   // abort if 'name' is undefined | 
 |  1665   if (expr->constructor()->name()->length() != 0) { | 
 |  1666     // if "name" is already defined, exit | 
 |  1667     environment()->Push(environment()->Peek(1));  // literal | 
 |  1668     Node* receiver = environment()->Pop(); | 
 |  1669     Node* key = jsgraph()->Constant(isolate()->factory()->name_string()); | 
 |  1670     IfBuilder has_name(this); | 
 |  1671     const Operator* has_name_op = | 
 |  1672         javascript()->CallRuntime(Runtime::kObjectHasOwnProperty); | 
 |  1673     Node* has_name_call = NewNode(has_name_op, receiver, key); | 
 |  1674     PrepareFrameState(has_name_call, BailoutId::None()); | 
 |  1675     has_name.If(has_name_call, BranchHint::kFalse); | 
 |  1676     has_name.Then(); | 
 |  1677     has_name.Else(); | 
 |  1678     { | 
 |  1679       // define "name" property | 
 |  1680       environment()->Push(environment()->Peek(1));  // literal | 
 |  1681       Node* receiver = environment()->Pop(); | 
 |  1682       Node* key = jsgraph()->Constant(isolate()->factory()->name_string()); | 
 |  1683       Node* value = jsgraph()->Constant(expr->constructor()->name()); | 
 |  1684       Node* attr = jsgraph()->Constant(DONT_ENUM | READ_ONLY); | 
 |  1685       Node* set_function_name = jsgraph()->Constant(0); | 
 |  1686       const Operator* define_name_op = | 
 |  1687           javascript()->CallRuntime(Runtime::kDefineDataPropertyInLiteral); | 
 |  1688       Node* define_name_call = NewNode(define_name_op, receiver, key, value, | 
 |  1689                                        attr, set_function_name); | 
 |  1690       PrepareFrameState(define_name_call, BailoutId::None()); | 
 |  1691     } | 
 |  1692     has_name.End(); | 
 |  1693   } | 
 |  1694  | 
|  1662   // Set the constructor to have fast properties. |  1695   // Set the constructor to have fast properties. | 
|  1663   prototype = environment()->Pop(); |  1696   prototype = environment()->Pop(); | 
|  1664   literal = environment()->Pop(); |  1697   literal = environment()->Pop(); | 
|  1665   const Operator* op = javascript()->CallRuntime(Runtime::kToFastProperties); |  1698   const Operator* op = javascript()->CallRuntime(Runtime::kToFastProperties); | 
|  1666   literal = NewNode(op, literal); |  1699   literal = NewNode(op, literal); | 
|  1667  |  1700  | 
|  1668   // Assign to class variable. |  1701   // Assign to class variable. | 
|  1669   if (expr->class_variable_proxy() != nullptr) { |  1702   if (expr->class_variable_proxy() != nullptr) { | 
|  1670     Variable* var = expr->class_variable_proxy()->var(); |  1703     Variable* var = expr->class_variable_proxy()->var(); | 
|  1671     VectorSlotPair feedback = CreateVectorSlotPair( |  1704     VectorSlotPair feedback = CreateVectorSlotPair( | 
| (...skipping 2652 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4324     // Phi does not exist yet, introduce one. |  4357     // Phi does not exist yet, introduce one. | 
|  4325     value = NewPhi(inputs, value, control); |  4358     value = NewPhi(inputs, value, control); | 
|  4326     value->ReplaceInput(inputs - 1, other); |  4359     value->ReplaceInput(inputs - 1, other); | 
|  4327   } |  4360   } | 
|  4328   return value; |  4361   return value; | 
|  4329 } |  4362 } | 
|  4330  |  4363  | 
|  4331 }  // namespace compiler |  4364 }  // namespace compiler | 
|  4332 }  // namespace internal |  4365 }  // namespace internal | 
|  4333 }  // namespace v8 |  4366 }  // namespace v8 | 
| OLD | NEW |