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 1768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1779 const Operator* op = | 1779 const Operator* op = |
1780 javascript()->CreateLiteralObject(expr->ComputeFlags(true)); | 1780 javascript()->CreateLiteralObject(expr->ComputeFlags(true)); |
1781 Node* literal = NewNode(op, literals_array, literal_index, constants); | 1781 Node* literal = NewNode(op, literals_array, literal_index, constants); |
1782 PrepareFrameState(literal, expr->CreateLiteralId(), | 1782 PrepareFrameState(literal, expr->CreateLiteralId(), |
1783 OutputFrameStateCombine::Push()); | 1783 OutputFrameStateCombine::Push()); |
1784 | 1784 |
1785 // The object is expected on the operand stack during computation of the | 1785 // The object is expected on the operand stack during computation of the |
1786 // property values and is the value of the entire expression. | 1786 // property values and is the value of the entire expression. |
1787 environment()->Push(literal); | 1787 environment()->Push(literal); |
1788 | 1788 |
1789 // Mark all computed expressions that are bound to a key that is shadowed by | |
1790 // a later occurrence of the same key. For the marked expressions, no store | |
1791 // code is emitted. | |
1792 expr->CalculateEmitStore(zone()); | |
1793 | |
1794 // Create nodes to store computed values into the literal. | 1789 // Create nodes to store computed values into the literal. |
1795 int property_index = 0; | 1790 int property_index = 0; |
1796 AccessorTable accessor_table(zone()); | 1791 AccessorTable accessor_table(zone()); |
1797 for (; property_index < expr->properties()->length(); property_index++) { | 1792 for (; property_index < expr->properties()->length(); property_index++) { |
1798 ObjectLiteral::Property* property = expr->properties()->at(property_index); | 1793 ObjectLiteral::Property* property = expr->properties()->at(property_index); |
1799 if (property->is_computed_name()) break; | 1794 if (property->is_computed_name()) break; |
1800 if (property->IsCompileTimeValue()) continue; | 1795 if (property->IsCompileTimeValue()) continue; |
1801 | 1796 |
1802 Literal* key = property->key()->AsLiteral(); | 1797 Literal* key = property->key()->AsLiteral(); |
1803 switch (property->kind()) { | 1798 switch (property->kind()) { |
(...skipping 1973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3777 // Phi does not exist yet, introduce one. | 3772 // Phi does not exist yet, introduce one. |
3778 value = NewPhi(inputs, value, control); | 3773 value = NewPhi(inputs, value, control); |
3779 value->ReplaceInput(inputs - 1, other); | 3774 value->ReplaceInput(inputs - 1, other); |
3780 } | 3775 } |
3781 return value; | 3776 return value; |
3782 } | 3777 } |
3783 | 3778 |
3784 } // namespace compiler | 3779 } // namespace compiler |
3785 } // namespace internal | 3780 } // namespace internal |
3786 } // namespace v8 | 3781 } // namespace v8 |
OLD | NEW |