| OLD | NEW | 
|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/bytecode-graph-builder.h" | 5 #include "src/compiler/bytecode-graph-builder.h" | 
| 6 | 6 | 
| 7 #include "src/ast/ast.h" | 7 #include "src/ast/ast.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/bytecode-branch-analysis.h" | 10 #include "src/compiler/bytecode-branch-analysis.h" | 
| (...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 899   for (uint32_t d = 0; d < depth; d++) { | 899   for (uint32_t d = 0; d < depth; d++) { | 
| 900     Node* extension_slot = | 900     Node* extension_slot = | 
| 901         NewNode(javascript()->LoadContext(d, Context::EXTENSION_INDEX, false), | 901         NewNode(javascript()->LoadContext(d, Context::EXTENSION_INDEX, false), | 
| 902                 environment()->Context()); | 902                 environment()->Context()); | 
| 903 | 903 | 
| 904     Node* check_no_extension = | 904     Node* check_no_extension = | 
| 905         NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), | 905         NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), | 
| 906                 extension_slot, jsgraph()->TheHoleConstant()); | 906                 extension_slot, jsgraph()->TheHoleConstant()); | 
| 907 | 907 | 
| 908     NewBranch(check_no_extension); | 908     NewBranch(check_no_extension); | 
| 909     Environment* false_environment = environment(); |  | 
| 910     Environment* true_environment = environment()->CopyForConditional(); | 909     Environment* true_environment = environment()->CopyForConditional(); | 
| 911 | 910 | 
| 912     { | 911     { | 
| 913       set_environment(false_environment); |  | 
| 914       NewIfFalse(); | 912       NewIfFalse(); | 
| 915       // If there is an extension, merge into the slow path. | 913       // If there is an extension, merge into the slow path. | 
| 916       if (slow_environment == nullptr) { | 914       if (slow_environment == nullptr) { | 
| 917         slow_environment = false_environment; | 915         slow_environment = environment(); | 
| 918         NewMerge(); | 916         NewMerge(); | 
| 919       } else { | 917       } else { | 
| 920         slow_environment->Merge(false_environment); | 918         slow_environment->Merge(environment()); | 
| 921       } | 919       } | 
| 922     } | 920     } | 
| 923 | 921 | 
| 924     { | 922     { | 
| 925       set_environment(true_environment); | 923       set_environment(true_environment); | 
| 926       NewIfTrue(); | 924       NewIfTrue(); | 
| 927       // Do nothing on if there is no extension, eventually falling through to | 925       // Do nothing on if there is no extension, eventually falling through to | 
| 928       // the fast path. | 926       // the fast path. | 
| 929     } | 927     } | 
| 930   } | 928   } | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 949         jsgraph()->Constant(bytecode_iterator().GetConstantForIndexOperand(0)); | 947         jsgraph()->Constant(bytecode_iterator().GetConstantForIndexOperand(0)); | 
| 950 | 948 | 
| 951     const Operator* op = | 949     const Operator* op = | 
| 952         javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF | 950         javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF | 
| 953                                       ? Runtime::kLoadLookupSlot | 951                                       ? Runtime::kLoadLookupSlot | 
| 954                                       : Runtime::kLoadLookupSlotInsideTypeof); | 952                                       : Runtime::kLoadLookupSlotInsideTypeof); | 
| 955     Node* value = NewNode(op, name); | 953     Node* value = NewNode(op, name); | 
| 956     environment()->BindAccumulator(value, &states); | 954     environment()->BindAccumulator(value, &states); | 
| 957   } | 955   } | 
| 958 | 956 | 
| 959   fast_environment->Merge(slow_environment); | 957   fast_environment->Merge(environment()); | 
| 960   set_environment(fast_environment); | 958   set_environment(fast_environment); | 
| 961 } | 959 } | 
| 962 | 960 | 
| 963 void BytecodeGraphBuilder::VisitLdaLookupContextSlot() { | 961 void BytecodeGraphBuilder::VisitLdaLookupContextSlot() { | 
| 964   BuildLdaLookupContextSlot(TypeofMode::NOT_INSIDE_TYPEOF); | 962   BuildLdaLookupContextSlot(TypeofMode::NOT_INSIDE_TYPEOF); | 
| 965 } | 963 } | 
| 966 | 964 | 
| 967 void BytecodeGraphBuilder::VisitLdaLookupContextSlotInsideTypeof() { | 965 void BytecodeGraphBuilder::VisitLdaLookupContextSlotInsideTypeof() { | 
| 968   BuildLdaLookupContextSlot(TypeofMode::INSIDE_TYPEOF); | 966   BuildLdaLookupContextSlot(TypeofMode::INSIDE_TYPEOF); | 
| 969 } | 967 } | 
| (...skipping 1221 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2191     // Phi does not exist yet, introduce one. | 2189     // Phi does not exist yet, introduce one. | 
| 2192     value = NewPhi(inputs, value, control); | 2190     value = NewPhi(inputs, value, control); | 
| 2193     value->ReplaceInput(inputs - 1, other); | 2191     value->ReplaceInput(inputs - 1, other); | 
| 2194   } | 2192   } | 
| 2195   return value; | 2193   return value; | 
| 2196 } | 2194 } | 
| 2197 | 2195 | 
| 2198 }  // namespace compiler | 2196 }  // namespace compiler | 
| 2199 }  // namespace internal | 2197 }  // namespace internal | 
| 2200 }  // namespace v8 | 2198 }  // namespace v8 | 
| OLD | NEW | 
|---|