| 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 1054 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1065 void AstGraphBuilder::VisitForValues(ZoneList<Expression*>* exprs) { | 1065 void AstGraphBuilder::VisitForValues(ZoneList<Expression*>* exprs) { |
| 1066 for (int i = 0; i < exprs->length(); ++i) { | 1066 for (int i = 0; i < exprs->length(); ++i) { |
| 1067 VisitForValue(exprs->at(i)); | 1067 VisitForValue(exprs->at(i)); |
| 1068 } | 1068 } |
| 1069 } | 1069 } |
| 1070 | 1070 |
| 1071 | 1071 |
| 1072 void AstGraphBuilder::VisitForValue(Expression* expr) { | 1072 void AstGraphBuilder::VisitForValue(Expression* expr) { |
| 1073 AstValueContext for_value(this); | 1073 AstValueContext for_value(this); |
| 1074 if (!CheckStackOverflow()) { | 1074 if (!CheckStackOverflow()) { |
| 1075 expr->Accept(this); | 1075 AstVisitor<AstGraphBuilder>::Visit(expr); |
| 1076 } else { | 1076 } else { |
| 1077 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); | 1077 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); |
| 1078 } | 1078 } |
| 1079 } | 1079 } |
| 1080 | 1080 |
| 1081 | 1081 |
| 1082 void AstGraphBuilder::VisitForEffect(Expression* expr) { | 1082 void AstGraphBuilder::VisitForEffect(Expression* expr) { |
| 1083 AstEffectContext for_effect(this); | 1083 AstEffectContext for_effect(this); |
| 1084 if (!CheckStackOverflow()) { | 1084 if (!CheckStackOverflow()) { |
| 1085 expr->Accept(this); | 1085 AstVisitor<AstGraphBuilder>::Visit(expr); |
| 1086 } else { | 1086 } else { |
| 1087 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); | 1087 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); |
| 1088 } | 1088 } |
| 1089 } | 1089 } |
| 1090 | 1090 |
| 1091 | 1091 |
| 1092 void AstGraphBuilder::VisitForTest(Expression* expr) { | 1092 void AstGraphBuilder::VisitForTest(Expression* expr) { |
| 1093 AstTestContext for_condition(this, expr->test_id()); | 1093 AstTestContext for_condition(this, expr->test_id()); |
| 1094 if (!CheckStackOverflow()) { | 1094 if (!CheckStackOverflow()) { |
| 1095 expr->Accept(this); | 1095 AstVisitor<AstGraphBuilder>::Visit(expr); |
| 1096 } else { | 1096 } else { |
| 1097 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); | 1097 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); |
| 1098 } | 1098 } |
| 1099 } | 1099 } |
| 1100 | 1100 |
| 1101 | 1101 |
| 1102 void AstGraphBuilder::Visit(Expression* expr) { | 1102 void AstGraphBuilder::Visit(Expression* expr) { |
| 1103 // Reuses enclosing AstContext. | 1103 // Reuses enclosing AstContext. |
| 1104 if (!CheckStackOverflow()) { | 1104 if (!CheckStackOverflow()) { |
| 1105 expr->Accept(this); | 1105 AstVisitor<AstGraphBuilder>::Visit(expr); |
| 1106 } else { | 1106 } else { |
| 1107 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); | 1107 ast_context()->ProduceValue(expr, jsgraph()->UndefinedConstant()); |
| 1108 } | 1108 } |
| 1109 } | 1109 } |
| 1110 | 1110 |
| 1111 | 1111 |
| 1112 void AstGraphBuilder::VisitVariableDeclaration(VariableDeclaration* decl) { | 1112 void AstGraphBuilder::VisitVariableDeclaration(VariableDeclaration* decl) { |
| 1113 Variable* variable = decl->proxy()->var(); | 1113 Variable* variable = decl->proxy()->var(); |
| 1114 VariableMode mode = decl->mode(); | 1114 VariableMode mode = decl->mode(); |
| 1115 bool hole_init = mode == CONST || mode == LET; | 1115 bool hole_init = mode == CONST || mode == LET; |
| (...skipping 1815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2931 | 2931 |
| 2932 | 2932 |
| 2933 void AstGraphBuilder::VisitCaseClause(CaseClause* expr) { | 2933 void AstGraphBuilder::VisitCaseClause(CaseClause* expr) { |
| 2934 // Handled entirely in VisitSwitch. | 2934 // Handled entirely in VisitSwitch. |
| 2935 UNREACHABLE(); | 2935 UNREACHABLE(); |
| 2936 } | 2936 } |
| 2937 | 2937 |
| 2938 | 2938 |
| 2939 void AstGraphBuilder::VisitDeclarations(ZoneList<Declaration*>* declarations) { | 2939 void AstGraphBuilder::VisitDeclarations(ZoneList<Declaration*>* declarations) { |
| 2940 DCHECK(globals()->empty()); | 2940 DCHECK(globals()->empty()); |
| 2941 AstVisitor::VisitDeclarations(declarations); | 2941 AstVisitor<AstGraphBuilder>::VisitDeclarations(declarations); |
| 2942 if (globals()->empty()) return; | 2942 if (globals()->empty()) return; |
| 2943 int array_index = 0; | 2943 int array_index = 0; |
| 2944 Handle<FixedArray> data = isolate()->factory()->NewFixedArray( | 2944 Handle<FixedArray> data = isolate()->factory()->NewFixedArray( |
| 2945 static_cast<int>(globals()->size()), TENURED); | 2945 static_cast<int>(globals()->size()), TENURED); |
| 2946 for (Handle<Object> obj : *globals()) data->set(array_index++, *obj); | 2946 for (Handle<Object> obj : *globals()) data->set(array_index++, *obj); |
| 2947 int encoded_flags = info()->GetDeclareGlobalsFlags(); | 2947 int encoded_flags = info()->GetDeclareGlobalsFlags(); |
| 2948 Node* flags = jsgraph()->Constant(encoded_flags); | 2948 Node* flags = jsgraph()->Constant(encoded_flags); |
| 2949 Node* pairs = jsgraph()->Constant(data); | 2949 Node* pairs = jsgraph()->Constant(data); |
| 2950 const Operator* op = javascript()->CallRuntime(Runtime::kDeclareGlobals); | 2950 const Operator* op = javascript()->CallRuntime(Runtime::kDeclareGlobals); |
| 2951 Node* call = NewNode(op, pairs, flags); | 2951 Node* call = NewNode(op, pairs, flags); |
| (...skipping 1417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4369 // Phi does not exist yet, introduce one. | 4369 // Phi does not exist yet, introduce one. |
| 4370 value = NewPhi(inputs, value, control); | 4370 value = NewPhi(inputs, value, control); |
| 4371 value->ReplaceInput(inputs - 1, other); | 4371 value->ReplaceInput(inputs - 1, other); |
| 4372 } | 4372 } |
| 4373 return value; | 4373 return value; |
| 4374 } | 4374 } |
| 4375 | 4375 |
| 4376 } // namespace compiler | 4376 } // namespace compiler |
| 4377 } // namespace internal | 4377 } // namespace internal |
| 4378 } // namespace v8 | 4378 } // namespace v8 |
| OLD | NEW |