Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 473263004: Towards removing dependency from generic lowering on compilation info. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Using flags in compilation info. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/control-builders.h" 8 #include "src/compiler/control-builders.h"
9 #include "src/compiler/machine-operator.h" 9 #include "src/compiler/machine-operator.h"
10 #include "src/compiler/node-properties.h" 10 #include "src/compiler/node-properties.h"
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 // Fall through. 892 // Fall through.
893 case ObjectLiteral::Property::COMPUTED: { 893 case ObjectLiteral::Property::COMPUTED: {
894 // It is safe to use [[Put]] here because the boilerplate already 894 // It is safe to use [[Put]] here because the boilerplate already
895 // contains computed properties with an uninitialized value. 895 // contains computed properties with an uninitialized value.
896 if (key->value()->IsInternalizedString()) { 896 if (key->value()->IsInternalizedString()) {
897 if (property->emit_store()) { 897 if (property->emit_store()) {
898 VisitForValue(property->value()); 898 VisitForValue(property->value());
899 Node* value = environment()->Pop(); 899 Node* value = environment()->Pop();
900 PrintableUnique<Name> name = MakeUnique(key->AsPropertyName()); 900 PrintableUnique<Name> name = MakeUnique(key->AsPropertyName());
901 Node* store = 901 Node* store =
902 NewNode(javascript()->StoreNamed(name), literal, value); 902 NewNode(javascript()->StoreNamed(info()->strict_mode(), name),
Michael Starzinger 2014/08/27 13:26:18 nit: Please s/info()->strict_mode()/strict_mode()/
sigurds 2014/08/27 13:48:49 Done.
903 literal, value);
903 PrepareFrameState(store, key->id()); 904 PrepareFrameState(store, key->id());
904 } else { 905 } else {
905 VisitForEffect(property->value()); 906 VisitForEffect(property->value());
906 } 907 }
907 break; 908 break;
908 } 909 }
909 environment()->Push(literal); // Duplicate receiver. 910 environment()->Push(literal); // Duplicate receiver.
910 VisitForValue(property->key()); 911 VisitForValue(property->key());
911 VisitForValue(property->value()); 912 VisitForValue(property->value());
912 Node* value = environment()->Pop(); 913 Node* value = environment()->Pop();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 986
986 // Create nodes to evaluate all the non-constant subexpressions and to store 987 // Create nodes to evaluate all the non-constant subexpressions and to store
987 // them into the newly cloned array. 988 // them into the newly cloned array.
988 for (int i = 0; i < expr->values()->length(); i++) { 989 for (int i = 0; i < expr->values()->length(); i++) {
989 Expression* subexpr = expr->values()->at(i); 990 Expression* subexpr = expr->values()->at(i);
990 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; 991 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
991 992
992 VisitForValue(subexpr); 993 VisitForValue(subexpr);
993 Node* value = environment()->Pop(); 994 Node* value = environment()->Pop();
994 Node* index = jsgraph()->Constant(i); 995 Node* index = jsgraph()->Constant(i);
995 Node* store = NewNode(javascript()->StoreProperty(), literal, index, value); 996 Node* store = NewNode(javascript()->StoreProperty(info()->strict_mode()),
997 literal, index, value);
996 PrepareFrameState(store, expr->GetIdForElement(i)); 998 PrepareFrameState(store, expr->GetIdForElement(i));
997 } 999 }
998 1000
999 environment()->Pop(); // Array literal index. 1001 environment()->Pop(); // Array literal index.
1000 ast_context()->ProduceValue(environment()->Pop()); 1002 ast_context()->ProduceValue(environment()->Pop());
1001 } 1003 }
1002 1004
1003 1005
1004 void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value) { 1006 void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value) {
1005 DCHECK(expr->IsValidReferenceExpression()); 1007 DCHECK(expr->IsValidReferenceExpression());
(...skipping 10 matching lines...) Expand all
1016 BuildVariableAssignment(var, value, Token::ASSIGN, BailoutId::None()); 1018 BuildVariableAssignment(var, value, Token::ASSIGN, BailoutId::None());
1017 break; 1019 break;
1018 } 1020 }
1019 case NAMED_PROPERTY: { 1021 case NAMED_PROPERTY: {
1020 environment()->Push(value); 1022 environment()->Push(value);
1021 VisitForValue(property->obj()); 1023 VisitForValue(property->obj());
1022 Node* object = environment()->Pop(); 1024 Node* object = environment()->Pop();
1023 value = environment()->Pop(); 1025 value = environment()->Pop();
1024 PrintableUnique<Name> name = 1026 PrintableUnique<Name> name =
1025 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1027 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1026 Node* store = NewNode(javascript()->StoreNamed(name), object, value); 1028 Node* store = NewNode(
1029 javascript()->StoreNamed(info()->strict_mode(), name), object, value);
1027 // TODO(jarin) Fill in the correct bailout id. 1030 // TODO(jarin) Fill in the correct bailout id.
1028 PrepareFrameState(store, BailoutId::None()); 1031 PrepareFrameState(store, BailoutId::None());
1029 break; 1032 break;
1030 } 1033 }
1031 case KEYED_PROPERTY: { 1034 case KEYED_PROPERTY: {
1032 environment()->Push(value); 1035 environment()->Push(value);
1033 VisitForValue(property->obj()); 1036 VisitForValue(property->obj());
1034 VisitForValue(property->key()); 1037 VisitForValue(property->key());
1035 Node* key = environment()->Pop(); 1038 Node* key = environment()->Pop();
1036 Node* object = environment()->Pop(); 1039 Node* object = environment()->Pop();
1037 value = environment()->Pop(); 1040 value = environment()->Pop();
1038 Node* store = NewNode(javascript()->StoreProperty(), object, key, value); 1041 Node* store = NewNode(javascript()->StoreProperty(info()->strict_mode()),
1042 object, key, value);
1039 // TODO(jarin) Fill in the correct bailout id. 1043 // TODO(jarin) Fill in the correct bailout id.
1040 PrepareFrameState(store, BailoutId::None()); 1044 PrepareFrameState(store, BailoutId::None());
1041 break; 1045 break;
1042 } 1046 }
1043 } 1047 }
1044 } 1048 }
1045 1049
1046 1050
1047 void AstGraphBuilder::VisitAssignment(Assignment* expr) { 1051 void AstGraphBuilder::VisitAssignment(Assignment* expr) {
1048 DCHECK(expr->target()->IsValidReferenceExpression()); 1052 DCHECK(expr->target()->IsValidReferenceExpression());
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 case VARIABLE: { 1113 case VARIABLE: {
1110 Variable* variable = expr->target()->AsVariableProxy()->var(); 1114 Variable* variable = expr->target()->AsVariableProxy()->var();
1111 BuildVariableAssignment(variable, value, expr->op(), 1115 BuildVariableAssignment(variable, value, expr->op(),
1112 expr->AssignmentId()); 1116 expr->AssignmentId());
1113 break; 1117 break;
1114 } 1118 }
1115 case NAMED_PROPERTY: { 1119 case NAMED_PROPERTY: {
1116 Node* object = environment()->Pop(); 1120 Node* object = environment()->Pop();
1117 PrintableUnique<Name> name = 1121 PrintableUnique<Name> name =
1118 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1122 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1119 Node* store = NewNode(javascript()->StoreNamed(name), object, value); 1123 Node* store = NewNode(
1124 javascript()->StoreNamed(info()->strict_mode(), name), object, value);
1120 PrepareFrameState(store, expr->AssignmentId()); 1125 PrepareFrameState(store, expr->AssignmentId());
1121 break; 1126 break;
1122 } 1127 }
1123 case KEYED_PROPERTY: { 1128 case KEYED_PROPERTY: {
1124 Node* key = environment()->Pop(); 1129 Node* key = environment()->Pop();
1125 Node* object = environment()->Pop(); 1130 Node* object = environment()->Pop();
1126 Node* store = NewNode(javascript()->StoreProperty(), object, key, value); 1131 Node* store = NewNode(javascript()->StoreProperty(info()->strict_mode()),
1132 object, key, value);
1127 PrepareFrameState(store, expr->AssignmentId()); 1133 PrepareFrameState(store, expr->AssignmentId());
1128 break; 1134 break;
1129 } 1135 }
1130 } 1136 }
1131 1137
1132 ast_context()->ProduceValue(value); 1138 ast_context()->ProduceValue(value);
1133 } 1139 }
1134 1140
1135 1141
1136 void AstGraphBuilder::VisitYield(Yield* expr) { 1142 void AstGraphBuilder::VisitYield(Yield* expr) {
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 case VARIABLE: { 1420 case VARIABLE: {
1415 Variable* variable = expr->expression()->AsVariableProxy()->var(); 1421 Variable* variable = expr->expression()->AsVariableProxy()->var();
1416 BuildVariableAssignment(variable, value, expr->op(), 1422 BuildVariableAssignment(variable, value, expr->op(),
1417 expr->AssignmentId()); 1423 expr->AssignmentId());
1418 break; 1424 break;
1419 } 1425 }
1420 case NAMED_PROPERTY: { 1426 case NAMED_PROPERTY: {
1421 Node* object = environment()->Pop(); 1427 Node* object = environment()->Pop();
1422 PrintableUnique<Name> name = 1428 PrintableUnique<Name> name =
1423 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1429 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1424 Node* store = NewNode(javascript()->StoreNamed(name), object, value); 1430 Node* store = NewNode(
1431 javascript()->StoreNamed(info()->strict_mode(), name), object, value);
1425 PrepareFrameState(store, expr->AssignmentId()); 1432 PrepareFrameState(store, expr->AssignmentId());
1426 break; 1433 break;
1427 } 1434 }
1428 case KEYED_PROPERTY: { 1435 case KEYED_PROPERTY: {
1429 Node* key = environment()->Pop(); 1436 Node* key = environment()->Pop();
1430 Node* object = environment()->Pop(); 1437 Node* object = environment()->Pop();
1431 Node* store = NewNode(javascript()->StoreProperty(), object, key, value); 1438 Node* store = NewNode(javascript()->StoreProperty(info()->strict_mode()),
1439 object, key, value);
1432 PrepareFrameState(store, expr->AssignmentId()); 1440 PrepareFrameState(store, expr->AssignmentId());
1433 break; 1441 break;
1434 } 1442 }
1435 } 1443 }
1436 1444
1437 // Restore old value for postfix expressions. 1445 // Restore old value for postfix expressions.
1438 if (is_postfix) value = environment()->Pop(); 1446 if (is_postfix) value = environment()->Pop();
1439 1447
1440 ast_context()->ProduceValue(value); 1448 ast_context()->ProduceValue(value);
1441 } 1449 }
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1831 Node* AstGraphBuilder::BuildVariableAssignment(Variable* variable, Node* value, 1839 Node* AstGraphBuilder::BuildVariableAssignment(Variable* variable, Node* value,
1832 Token::Value op, 1840 Token::Value op,
1833 BailoutId bailout_id) { 1841 BailoutId bailout_id) {
1834 Node* the_hole = jsgraph()->TheHoleConstant(); 1842 Node* the_hole = jsgraph()->TheHoleConstant();
1835 VariableMode mode = variable->mode(); 1843 VariableMode mode = variable->mode();
1836 switch (variable->location()) { 1844 switch (variable->location()) {
1837 case Variable::UNALLOCATED: { 1845 case Variable::UNALLOCATED: {
1838 // Global var, const, or let variable. 1846 // Global var, const, or let variable.
1839 Node* global = BuildLoadGlobalObject(); 1847 Node* global = BuildLoadGlobalObject();
1840 PrintableUnique<Name> name = MakeUnique(variable->name()); 1848 PrintableUnique<Name> name = MakeUnique(variable->name());
1841 Operator* op = javascript()->StoreNamed(name); 1849 Operator* op = javascript()->StoreNamed(info()->strict_mode(), name);
1842 Node* store = NewNode(op, global, value); 1850 Node* store = NewNode(op, global, value);
1843 PrepareFrameState(store, bailout_id); 1851 PrepareFrameState(store, bailout_id);
1844 return store; 1852 return store;
1845 } 1853 }
1846 case Variable::PARAMETER: 1854 case Variable::PARAMETER:
1847 case Variable::LOCAL: 1855 case Variable::LOCAL:
1848 // Local var, const, or let variable. 1856 // Local var, const, or let variable.
1849 if (mode == CONST_LEGACY && op == Token::INIT_CONST_LEGACY) { 1857 if (mode == CONST_LEGACY && op == Token::INIT_CONST_LEGACY) {
1850 // Perform an initialization check for legacy const variables. 1858 // Perform an initialization check for legacy const variables.
1851 Node* current = environment()->Lookup(variable); 1859 Node* current = environment()->Lookup(variable);
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2031 2039
2032 // Continue with the original environment. 2040 // Continue with the original environment.
2033 set_environment(continuation_env); 2041 set_environment(continuation_env);
2034 NewNode(common()->Continuation()); 2042 NewNode(common()->Continuation());
2035 } 2043 }
2036 } 2044 }
2037 2045
2038 } 2046 }
2039 } 2047 }
2040 } // namespace v8::internal::compiler 2048 } // namespace v8::internal::compiler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698