Chromium Code Reviews| 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/scopes.h" | 7 #include "src/ast/scopes.h" |
| 8 #include "src/compiler.h" | 8 #include "src/compiler.h" |
| 9 #include "src/compiler/ast-loop-assignment-analyzer.h" | 9 #include "src/compiler/ast-loop-assignment-analyzer.h" |
| 10 #include "src/compiler/control-builders.h" | 10 #include "src/compiler/control-builders.h" |
| (...skipping 2222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2233 case VARIABLE: { | 2233 case VARIABLE: { |
| 2234 Variable* variable = expr->target()->AsVariableProxy()->var(); | 2234 Variable* variable = expr->target()->AsVariableProxy()->var(); |
| 2235 BuildVariableAssignment(variable, value, expr->op(), feedback, expr->id(), | 2235 BuildVariableAssignment(variable, value, expr->op(), feedback, expr->id(), |
| 2236 ast_context()->GetStateCombine()); | 2236 ast_context()->GetStateCombine()); |
| 2237 break; | 2237 break; |
| 2238 } | 2238 } |
| 2239 case NAMED_PROPERTY: { | 2239 case NAMED_PROPERTY: { |
| 2240 Node* object = environment()->Pop(); | 2240 Node* object = environment()->Pop(); |
| 2241 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); | 2241 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
| 2242 Node* store = BuildNamedStore(object, name, value, feedback); | 2242 Node* store = BuildNamedStore(object, name, value, feedback); |
| 2243 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); | 2243 PrepareFrameState(store, expr->AssignmentId(), |
| 2244 OutputFrameStateCombine::Push()); | |
| 2244 break; | 2245 break; |
| 2245 } | 2246 } |
| 2246 case KEYED_PROPERTY: { | 2247 case KEYED_PROPERTY: { |
| 2247 Node* key = environment()->Pop(); | 2248 Node* key = environment()->Pop(); |
| 2248 Node* object = environment()->Pop(); | 2249 Node* object = environment()->Pop(); |
| 2249 Node* store = BuildKeyedStore(object, key, value, feedback); | 2250 Node* store = BuildKeyedStore(object, key, value, feedback); |
| 2250 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); | 2251 PrepareFrameState(store, expr->AssignmentId(), |
| 2252 OutputFrameStateCombine::Push()); | |
| 2251 break; | 2253 break; |
| 2252 } | 2254 } |
| 2253 case NAMED_SUPER_PROPERTY: { | 2255 case NAMED_SUPER_PROPERTY: { |
| 2254 Node* home_object = environment()->Pop(); | 2256 Node* home_object = environment()->Pop(); |
| 2255 Node* receiver = environment()->Pop(); | 2257 Node* receiver = environment()->Pop(); |
| 2256 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); | 2258 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
| 2257 Node* store = BuildNamedSuperStore(receiver, home_object, name, value); | 2259 Node* store = BuildNamedSuperStore(receiver, home_object, name, value); |
| 2258 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); | 2260 PrepareFrameState(store, expr->id(), ast_context()->GetStateCombine()); |
| 2259 break; | 2261 break; |
| 2260 } | 2262 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2293 VectorSlotPair pair = CreateVectorSlotPair(expr->PropertyFeedbackSlot()); | 2295 VectorSlotPair pair = CreateVectorSlotPair(expr->PropertyFeedbackSlot()); |
| 2294 switch (property_kind) { | 2296 switch (property_kind) { |
| 2295 case VARIABLE: | 2297 case VARIABLE: |
| 2296 UNREACHABLE(); | 2298 UNREACHABLE(); |
| 2297 break; | 2299 break; |
| 2298 case NAMED_PROPERTY: { | 2300 case NAMED_PROPERTY: { |
| 2299 VisitForValue(expr->obj()); | 2301 VisitForValue(expr->obj()); |
| 2300 Node* object = environment()->Pop(); | 2302 Node* object = environment()->Pop(); |
| 2301 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); | 2303 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); |
| 2302 value = BuildNamedLoad(object, name, pair); | 2304 value = BuildNamedLoad(object, name, pair); |
| 2303 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); | 2305 PrepareFrameState(value, expr->LoadId(), |
| 2306 ast_context()->GetStateCombine()); | |
|
Jarin
2016/08/01 05:37:54
Should be Push (here and below). Could you write a
Benedikt Meurer
2016/08/01 06:16:06
Done.
| |
| 2304 break; | 2307 break; |
| 2305 } | 2308 } |
| 2306 case KEYED_PROPERTY: { | 2309 case KEYED_PROPERTY: { |
| 2307 VisitForValue(expr->obj()); | 2310 VisitForValue(expr->obj()); |
| 2308 VisitForValue(expr->key()); | 2311 VisitForValue(expr->key()); |
| 2309 Node* key = environment()->Pop(); | 2312 Node* key = environment()->Pop(); |
| 2310 Node* object = environment()->Pop(); | 2313 Node* object = environment()->Pop(); |
| 2311 value = BuildKeyedLoad(object, key, pair); | 2314 value = BuildKeyedLoad(object, key, pair); |
| 2312 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); | 2315 PrepareFrameState(value, expr->LoadId(), |
| 2316 ast_context()->GetStateCombine()); | |
| 2313 break; | 2317 break; |
| 2314 } | 2318 } |
| 2315 case NAMED_SUPER_PROPERTY: { | 2319 case NAMED_SUPER_PROPERTY: { |
| 2316 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); | 2320 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); |
| 2317 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); | 2321 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); |
| 2318 Node* home_object = environment()->Pop(); | 2322 Node* home_object = environment()->Pop(); |
| 2319 Node* receiver = environment()->Pop(); | 2323 Node* receiver = environment()->Pop(); |
| 2320 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); | 2324 Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); |
| 2321 value = BuildNamedSuperLoad(receiver, home_object, name, pair); | 2325 value = BuildNamedSuperLoad(receiver, home_object, name, pair); |
| 2322 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); | 2326 PrepareFrameState(value, expr->LoadId(), |
| 2327 ast_context()->GetStateCombine()); | |
| 2323 break; | 2328 break; |
| 2324 } | 2329 } |
| 2325 case KEYED_SUPER_PROPERTY: { | 2330 case KEYED_SUPER_PROPERTY: { |
| 2326 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); | 2331 VisitForValue(expr->obj()->AsSuperPropertyReference()->this_var()); |
| 2327 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); | 2332 VisitForValue(expr->obj()->AsSuperPropertyReference()->home_object()); |
| 2328 VisitForValue(expr->key()); | 2333 VisitForValue(expr->key()); |
| 2329 Node* key = environment()->Pop(); | 2334 Node* key = environment()->Pop(); |
| 2330 Node* home_object = environment()->Pop(); | 2335 Node* home_object = environment()->Pop(); |
| 2331 Node* receiver = environment()->Pop(); | 2336 Node* receiver = environment()->Pop(); |
| 2332 value = BuildKeyedSuperLoad(receiver, home_object, key, pair); | 2337 value = BuildKeyedSuperLoad(receiver, home_object, key, pair); |
| 2333 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); | 2338 PrepareFrameState(value, expr->LoadId(), |
| 2339 ast_context()->GetStateCombine()); | |
| 2334 break; | 2340 break; |
| 2335 } | 2341 } |
| 2336 } | 2342 } |
| 2337 ast_context()->ProduceValue(expr, value); | 2343 ast_context()->ProduceValue(expr, value); |
| 2338 } | 2344 } |
| 2339 | 2345 |
| 2340 | 2346 |
| 2341 void AstGraphBuilder::VisitCall(Call* expr) { | 2347 void AstGraphBuilder::VisitCall(Call* expr) { |
| 2342 Expression* callee = expr->expression(); | 2348 Expression* callee = expr->expression(); |
| 2343 Call::CallType call_type = expr->GetCallType(isolate()); | 2349 Call::CallType call_type = expr->GetCallType(isolate()); |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2747 environment()->Push(value); | 2753 environment()->Push(value); |
| 2748 BuildVariableAssignment(variable, value, expr->op(), feedback, | 2754 BuildVariableAssignment(variable, value, expr->op(), feedback, |
| 2749 expr->AssignmentId()); | 2755 expr->AssignmentId()); |
| 2750 environment()->Pop(); | 2756 environment()->Pop(); |
| 2751 break; | 2757 break; |
| 2752 } | 2758 } |
| 2753 case NAMED_PROPERTY: { | 2759 case NAMED_PROPERTY: { |
| 2754 Node* object = environment()->Pop(); | 2760 Node* object = environment()->Pop(); |
| 2755 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); | 2761 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
| 2756 Node* store = BuildNamedStore(object, name, value, feedback); | 2762 Node* store = BuildNamedStore(object, name, value, feedback); |
| 2757 environment()->Push(value); | |
| 2758 PrepareFrameState(store, expr->AssignmentId(), | 2763 PrepareFrameState(store, expr->AssignmentId(), |
| 2759 OutputFrameStateCombine::Ignore()); | 2764 OutputFrameStateCombine::Push()); |
| 2760 environment()->Pop(); | |
| 2761 break; | 2765 break; |
| 2762 } | 2766 } |
| 2763 case KEYED_PROPERTY: { | 2767 case KEYED_PROPERTY: { |
| 2764 Node* key = environment()->Pop(); | 2768 Node* key = environment()->Pop(); |
| 2765 Node* object = environment()->Pop(); | 2769 Node* object = environment()->Pop(); |
| 2766 Node* store = BuildKeyedStore(object, key, value, feedback); | 2770 Node* store = BuildKeyedStore(object, key, value, feedback); |
| 2767 environment()->Push(value); | |
| 2768 PrepareFrameState(store, expr->AssignmentId(), | 2771 PrepareFrameState(store, expr->AssignmentId(), |
| 2769 OutputFrameStateCombine::Ignore()); | 2772 OutputFrameStateCombine::Push()); |
| 2770 environment()->Pop(); | |
| 2771 break; | 2773 break; |
| 2772 } | 2774 } |
| 2773 case NAMED_SUPER_PROPERTY: { | 2775 case NAMED_SUPER_PROPERTY: { |
| 2774 Node* home_object = environment()->Pop(); | 2776 Node* home_object = environment()->Pop(); |
| 2775 Node* receiver = environment()->Pop(); | 2777 Node* receiver = environment()->Pop(); |
| 2776 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); | 2778 Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
| 2777 Node* store = BuildNamedSuperStore(receiver, home_object, name, value); | 2779 Node* store = BuildNamedSuperStore(receiver, home_object, name, value); |
| 2778 environment()->Push(value); | |
| 2779 PrepareFrameState(store, expr->AssignmentId(), | 2780 PrepareFrameState(store, expr->AssignmentId(), |
| 2780 OutputFrameStateCombine::Ignore()); | 2781 OutputFrameStateCombine::Push()); |
| 2781 environment()->Pop(); | |
| 2782 break; | 2782 break; |
| 2783 } | 2783 } |
| 2784 case KEYED_SUPER_PROPERTY: { | 2784 case KEYED_SUPER_PROPERTY: { |
| 2785 Node* key = environment()->Pop(); | 2785 Node* key = environment()->Pop(); |
| 2786 Node* home_object = environment()->Pop(); | 2786 Node* home_object = environment()->Pop(); |
| 2787 Node* receiver = environment()->Pop(); | 2787 Node* receiver = environment()->Pop(); |
| 2788 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value); | 2788 Node* store = BuildKeyedSuperStore(receiver, home_object, key, value); |
| 2789 environment()->Push(value); | |
| 2790 PrepareFrameState(store, expr->AssignmentId(), | 2789 PrepareFrameState(store, expr->AssignmentId(), |
| 2791 OutputFrameStateCombine::Ignore()); | 2790 OutputFrameStateCombine::Push()); |
| 2792 environment()->Pop(); | |
| 2793 break; | 2791 break; |
| 2794 } | 2792 } |
| 2795 } | 2793 } |
| 2796 | 2794 |
| 2797 // Restore old value for postfix expressions. | 2795 // Restore old value for postfix expressions. |
| 2798 if (is_postfix) value = environment()->Pop(); | 2796 if (is_postfix) value = environment()->Pop(); |
| 2799 | 2797 |
| 2800 ast_context()->ProduceValue(expr, value); | 2798 ast_context()->ProduceValue(expr, value); |
| 2801 } | 2799 } |
| 2802 | 2800 |
| (...skipping 1593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4396 // Phi does not exist yet, introduce one. | 4394 // Phi does not exist yet, introduce one. |
| 4397 value = NewPhi(inputs, value, control); | 4395 value = NewPhi(inputs, value, control); |
| 4398 value->ReplaceInput(inputs - 1, other); | 4396 value->ReplaceInput(inputs - 1, other); |
| 4399 } | 4397 } |
| 4400 return value; | 4398 return value; |
| 4401 } | 4399 } |
| 4402 | 4400 |
| 4403 } // namespace compiler | 4401 } // namespace compiler |
| 4404 } // namespace internal | 4402 } // namespace internal |
| 4405 } // namespace v8 | 4403 } // namespace v8 |
| OLD | NEW |