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/compiler/bytecode-branch-analysis.h" | 7 #include "src/compiler/bytecode-branch-analysis.h" |
8 #include "src/compiler/linkage.h" | 8 #include "src/compiler/linkage.h" |
9 #include "src/compiler/operator-properties.h" | 9 #include "src/compiler/operator-properties.h" |
10 #include "src/interpreter/bytecodes.h" | 10 #include "src/interpreter/bytecodes.h" |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 bytecode_iterator().GetConstantForIndexOperand(0)); | 988 bytecode_iterator().GetConstantForIndexOperand(0)); |
989 PretenureFlag tenured = | 989 PretenureFlag tenured = |
990 bytecode_iterator().GetImmediateOperand(1) ? TENURED : NOT_TENURED; | 990 bytecode_iterator().GetImmediateOperand(1) ? TENURED : NOT_TENURED; |
991 const Operator* op = javascript()->CreateClosure(shared_info, tenured); | 991 const Operator* op = javascript()->CreateClosure(shared_info, tenured); |
992 Node* closure = NewNode(op); | 992 Node* closure = NewNode(op); |
993 environment()->BindAccumulator(closure); | 993 environment()->BindAccumulator(closure); |
994 } | 994 } |
995 | 995 |
996 void BytecodeGraphBuilder::VisitCreateClosureWide() { VisitCreateClosure(); } | 996 void BytecodeGraphBuilder::VisitCreateClosureWide() { VisitCreateClosure(); } |
997 | 997 |
998 void BytecodeGraphBuilder::BuildCreateArguments( | 998 void BytecodeGraphBuilder::BuildCreateArguments(CreateArgumentsType type) { |
999 CreateArgumentsParameters::Type type, int rest_index) { | |
1000 FrameStateBeforeAndAfter states(this); | 999 FrameStateBeforeAndAfter states(this); |
1001 const Operator* op = javascript()->CreateArguments(type, rest_index); | 1000 const Operator* op = javascript()->CreateArguments(type); |
1002 Node* object = NewNode(op, GetFunctionClosure()); | 1001 Node* object = NewNode(op, GetFunctionClosure()); |
1003 environment()->BindAccumulator(object, &states); | 1002 environment()->BindAccumulator(object, &states); |
1004 } | 1003 } |
1005 | 1004 |
1006 void BytecodeGraphBuilder::VisitCreateMappedArguments() { | 1005 void BytecodeGraphBuilder::VisitCreateMappedArguments() { |
1007 BuildCreateArguments(CreateArgumentsParameters::kMappedArguments, 0); | 1006 BuildCreateArguments(CreateArgumentsType::kMappedArguments); |
1008 } | 1007 } |
1009 | 1008 |
1010 void BytecodeGraphBuilder::VisitCreateUnmappedArguments() { | 1009 void BytecodeGraphBuilder::VisitCreateUnmappedArguments() { |
1011 BuildCreateArguments(CreateArgumentsParameters::kUnmappedArguments, 0); | 1010 BuildCreateArguments(CreateArgumentsType::kUnmappedArguments); |
1012 } | 1011 } |
1013 | 1012 |
1014 void BytecodeGraphBuilder::VisitCreateRestArguments() { | 1013 void BytecodeGraphBuilder::VisitCreateRestParameter() { |
1015 int index = | 1014 BuildCreateArguments(CreateArgumentsType::kRestParameter); |
1016 Smi::cast(*bytecode_iterator().GetConstantForIndexOperand(0))->value(); | |
1017 BuildCreateArguments(CreateArgumentsParameters::kRestArray, index); | |
1018 } | 1015 } |
1019 | 1016 |
1020 void BytecodeGraphBuilder::BuildCreateLiteral(const Operator* op) { | 1017 void BytecodeGraphBuilder::BuildCreateLiteral(const Operator* op) { |
1021 FrameStateBeforeAndAfter states(this); | 1018 FrameStateBeforeAndAfter states(this); |
1022 Node* literal = NewNode(op, GetFunctionClosure()); | 1019 Node* literal = NewNode(op, GetFunctionClosure()); |
1023 environment()->BindAccumulator(literal, &states); | 1020 environment()->BindAccumulator(literal, &states); |
1024 } | 1021 } |
1025 | 1022 |
1026 void BytecodeGraphBuilder::BuildCreateRegExpLiteral() { | 1023 void BytecodeGraphBuilder::BuildCreateRegExpLiteral() { |
1027 Handle<String> constant_pattern = | 1024 Handle<String> constant_pattern = |
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1835 // Phi does not exist yet, introduce one. | 1832 // Phi does not exist yet, introduce one. |
1836 value = NewPhi(inputs, value, control); | 1833 value = NewPhi(inputs, value, control); |
1837 value->ReplaceInput(inputs - 1, other); | 1834 value->ReplaceInput(inputs - 1, other); |
1838 } | 1835 } |
1839 return value; | 1836 return value; |
1840 } | 1837 } |
1841 | 1838 |
1842 } // namespace compiler | 1839 } // namespace compiler |
1843 } // namespace internal | 1840 } // namespace internal |
1844 } // namespace v8 | 1841 } // namespace v8 |
OLD | NEW |