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

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

Issue 543743002: Remove deprecated PrintableUnique. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: 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
« no previous file with comments | « no previous file | src/compiler/change-lowering-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 882 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 case ObjectLiteral::Property::MATERIALIZED_LITERAL: 893 case ObjectLiteral::Property::MATERIALIZED_LITERAL:
894 DCHECK(!CompileTimeValue::IsCompileTimeValue(property->value())); 894 DCHECK(!CompileTimeValue::IsCompileTimeValue(property->value()));
895 // Fall through. 895 // Fall through.
896 case ObjectLiteral::Property::COMPUTED: { 896 case ObjectLiteral::Property::COMPUTED: {
897 // It is safe to use [[Put]] here because the boilerplate already 897 // It is safe to use [[Put]] here because the boilerplate already
898 // contains computed properties with an uninitialized value. 898 // contains computed properties with an uninitialized value.
899 if (key->value()->IsInternalizedString()) { 899 if (key->value()->IsInternalizedString()) {
900 if (property->emit_store()) { 900 if (property->emit_store()) {
901 VisitForValue(property->value()); 901 VisitForValue(property->value());
902 Node* value = environment()->Pop(); 902 Node* value = environment()->Pop();
903 PrintableUnique<Name> name = MakeUnique(key->AsPropertyName()); 903 Unique<Name> name = MakeUnique(key->AsPropertyName());
904 Node* store = NewNode(javascript()->StoreNamed(strict_mode(), name), 904 Node* store = NewNode(javascript()->StoreNamed(strict_mode(), name),
905 literal, value); 905 literal, value);
906 PrepareFrameState(store, key->id()); 906 PrepareFrameState(store, key->id());
907 } else { 907 } else {
908 VisitForEffect(property->value()); 908 VisitForEffect(property->value());
909 } 909 }
910 break; 910 break;
911 } 911 }
912 environment()->Push(literal); // Duplicate receiver. 912 environment()->Push(literal); // Duplicate receiver.
913 VisitForValue(property->key()); 913 VisitForValue(property->key());
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 Variable* var = expr->AsVariableProxy()->var(); 1018 Variable* var = expr->AsVariableProxy()->var();
1019 // TODO(jarin) Fill in the correct bailout id. 1019 // TODO(jarin) Fill in the correct bailout id.
1020 BuildVariableAssignment(var, value, Token::ASSIGN, BailoutId::None()); 1020 BuildVariableAssignment(var, value, Token::ASSIGN, BailoutId::None());
1021 break; 1021 break;
1022 } 1022 }
1023 case NAMED_PROPERTY: { 1023 case NAMED_PROPERTY: {
1024 environment()->Push(value); 1024 environment()->Push(value);
1025 VisitForValue(property->obj()); 1025 VisitForValue(property->obj());
1026 Node* object = environment()->Pop(); 1026 Node* object = environment()->Pop();
1027 value = environment()->Pop(); 1027 value = environment()->Pop();
1028 PrintableUnique<Name> name = 1028 Unique<Name> name =
1029 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1029 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1030 Node* store = 1030 Node* store =
1031 NewNode(javascript()->StoreNamed(strict_mode(), name), object, value); 1031 NewNode(javascript()->StoreNamed(strict_mode(), name), object, value);
1032 // TODO(jarin) Fill in the correct bailout id. 1032 // TODO(jarin) Fill in the correct bailout id.
1033 PrepareFrameState(store, BailoutId::None()); 1033 PrepareFrameState(store, BailoutId::None());
1034 break; 1034 break;
1035 } 1035 }
1036 case KEYED_PROPERTY: { 1036 case KEYED_PROPERTY: {
1037 environment()->Push(value); 1037 environment()->Push(value);
1038 VisitForValue(property->obj()); 1038 VisitForValue(property->obj());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 if (expr->is_compound()) { 1077 if (expr->is_compound()) {
1078 Node* old_value = NULL; 1078 Node* old_value = NULL;
1079 switch (assign_type) { 1079 switch (assign_type) {
1080 case VARIABLE: { 1080 case VARIABLE: {
1081 Variable* variable = expr->target()->AsVariableProxy()->var(); 1081 Variable* variable = expr->target()->AsVariableProxy()->var();
1082 old_value = BuildVariableLoad(variable, expr->target()->id()); 1082 old_value = BuildVariableLoad(variable, expr->target()->id());
1083 break; 1083 break;
1084 } 1084 }
1085 case NAMED_PROPERTY: { 1085 case NAMED_PROPERTY: {
1086 Node* object = environment()->Top(); 1086 Node* object = environment()->Top();
1087 PrintableUnique<Name> name = 1087 Unique<Name> name =
1088 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1088 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1089 old_value = NewNode(javascript()->LoadNamed(name), object); 1089 old_value = NewNode(javascript()->LoadNamed(name), object);
1090 PrepareFrameState(old_value, property->LoadId(), kPushOutput); 1090 PrepareFrameState(old_value, property->LoadId(), kPushOutput);
1091 break; 1091 break;
1092 } 1092 }
1093 case KEYED_PROPERTY: { 1093 case KEYED_PROPERTY: {
1094 Node* key = environment()->Top(); 1094 Node* key = environment()->Top();
1095 Node* object = environment()->Peek(1); 1095 Node* object = environment()->Peek(1);
1096 old_value = NewNode(javascript()->LoadProperty(), object, key); 1096 old_value = NewNode(javascript()->LoadProperty(), object, key);
1097 PrepareFrameState(old_value, property->LoadId(), kPushOutput); 1097 PrepareFrameState(old_value, property->LoadId(), kPushOutput);
(...skipping 15 matching lines...) Expand all
1113 Node* value = environment()->Pop(); 1113 Node* value = environment()->Pop();
1114 switch (assign_type) { 1114 switch (assign_type) {
1115 case VARIABLE: { 1115 case VARIABLE: {
1116 Variable* variable = expr->target()->AsVariableProxy()->var(); 1116 Variable* variable = expr->target()->AsVariableProxy()->var();
1117 BuildVariableAssignment(variable, value, expr->op(), 1117 BuildVariableAssignment(variable, value, expr->op(),
1118 expr->AssignmentId()); 1118 expr->AssignmentId());
1119 break; 1119 break;
1120 } 1120 }
1121 case NAMED_PROPERTY: { 1121 case NAMED_PROPERTY: {
1122 Node* object = environment()->Pop(); 1122 Node* object = environment()->Pop();
1123 PrintableUnique<Name> name = 1123 Unique<Name> name =
1124 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1124 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1125 Node* store = 1125 Node* store =
1126 NewNode(javascript()->StoreNamed(strict_mode(), name), object, value); 1126 NewNode(javascript()->StoreNamed(strict_mode(), name), object, value);
1127 PrepareFrameState(store, expr->AssignmentId()); 1127 PrepareFrameState(store, expr->AssignmentId());
1128 break; 1128 break;
1129 } 1129 }
1130 case KEYED_PROPERTY: { 1130 case KEYED_PROPERTY: {
1131 Node* key = environment()->Pop(); 1131 Node* key = environment()->Pop();
1132 Node* object = environment()->Pop(); 1132 Node* object = environment()->Pop();
1133 Node* store = NewNode(javascript()->StoreProperty(strict_mode()), object, 1133 Node* store = NewNode(javascript()->StoreProperty(strict_mode()), object,
(...skipping 24 matching lines...) Expand all
1158 Node* value = NewNode(op, exception); 1158 Node* value = NewNode(op, exception);
1159 ast_context()->ProduceValue(value); 1159 ast_context()->ProduceValue(value);
1160 } 1160 }
1161 1161
1162 1162
1163 void AstGraphBuilder::VisitProperty(Property* expr) { 1163 void AstGraphBuilder::VisitProperty(Property* expr) {
1164 Node* value; 1164 Node* value;
1165 if (expr->key()->IsPropertyName()) { 1165 if (expr->key()->IsPropertyName()) {
1166 VisitForValue(expr->obj()); 1166 VisitForValue(expr->obj());
1167 Node* object = environment()->Pop(); 1167 Node* object = environment()->Pop();
1168 PrintableUnique<Name> name = 1168 Unique<Name> name = MakeUnique(expr->key()->AsLiteral()->AsPropertyName());
1169 MakeUnique(expr->key()->AsLiteral()->AsPropertyName());
1170 value = NewNode(javascript()->LoadNamed(name), object); 1169 value = NewNode(javascript()->LoadNamed(name), object);
1171 } else { 1170 } else {
1172 VisitForValue(expr->obj()); 1171 VisitForValue(expr->obj());
1173 VisitForValue(expr->key()); 1172 VisitForValue(expr->key());
1174 Node* key = environment()->Pop(); 1173 Node* key = environment()->Pop();
1175 Node* object = environment()->Pop(); 1174 Node* object = environment()->Pop();
1176 value = NewNode(javascript()->LoadProperty(), object, key); 1175 value = NewNode(javascript()->LoadProperty(), object, key);
1177 } 1176 }
1178 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 1177 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine());
1179 ast_context()->ProduceValue(value); 1178 ast_context()->ProduceValue(value);
(...skipping 25 matching lines...) Expand all
1205 Node* pair = NewNode(op, current_context(), name); 1204 Node* pair = NewNode(op, current_context(), name);
1206 callee_value = NewNode(common()->Projection(0), pair); 1205 callee_value = NewNode(common()->Projection(0), pair);
1207 receiver_value = NewNode(common()->Projection(1), pair); 1206 receiver_value = NewNode(common()->Projection(1), pair);
1208 break; 1207 break;
1209 } 1208 }
1210 case Call::PROPERTY_CALL: { 1209 case Call::PROPERTY_CALL: {
1211 Property* property = callee->AsProperty(); 1210 Property* property = callee->AsProperty();
1212 VisitForValue(property->obj()); 1211 VisitForValue(property->obj());
1213 Node* object = environment()->Top(); 1212 Node* object = environment()->Top();
1214 if (property->key()->IsPropertyName()) { 1213 if (property->key()->IsPropertyName()) {
1215 PrintableUnique<Name> name = 1214 Unique<Name> name =
1216 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1215 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1217 callee_value = NewNode(javascript()->LoadNamed(name), object); 1216 callee_value = NewNode(javascript()->LoadNamed(name), object);
1218 } else { 1217 } else {
1219 VisitForValue(property->key()); 1218 VisitForValue(property->key());
1220 Node* key = environment()->Pop(); 1219 Node* key = environment()->Pop();
1221 callee_value = NewNode(javascript()->LoadProperty(), object, key); 1220 callee_value = NewNode(javascript()->LoadProperty(), object, key);
1222 } 1221 }
1223 PrepareFrameState(callee_value, property->LoadId(), kPushOutput); 1222 PrepareFrameState(callee_value, property->LoadId(), kPushOutput);
1224 receiver_value = environment()->Pop(); 1223 receiver_value = environment()->Pop();
1225 // Note that a PROPERTY_CALL requires the receiver to be wrapped into an 1224 // Note that a PROPERTY_CALL requires the receiver to be wrapped into an
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 } 1294 }
1296 1295
1297 1296
1298 void AstGraphBuilder::VisitCallJSRuntime(CallRuntime* expr) { 1297 void AstGraphBuilder::VisitCallJSRuntime(CallRuntime* expr) {
1299 Handle<String> name = expr->name(); 1298 Handle<String> name = expr->name();
1300 1299
1301 // The callee and the receiver both have to be pushed onto the operand stack 1300 // The callee and the receiver both have to be pushed onto the operand stack
1302 // before arguments are being evaluated. 1301 // before arguments are being evaluated.
1303 CallFunctionFlags flags = NO_CALL_FUNCTION_FLAGS; 1302 CallFunctionFlags flags = NO_CALL_FUNCTION_FLAGS;
1304 Node* receiver_value = BuildLoadBuiltinsObject(); 1303 Node* receiver_value = BuildLoadBuiltinsObject();
1305 PrintableUnique<String> unique = MakeUnique(name); 1304 Unique<String> unique = MakeUnique(name);
1306 Node* callee_value = NewNode(javascript()->LoadNamed(unique), receiver_value); 1305 Node* callee_value = NewNode(javascript()->LoadNamed(unique), receiver_value);
1307 // TODO(jarin): Find/create a bailout id to deoptimize to (crankshaft 1306 // TODO(jarin): Find/create a bailout id to deoptimize to (crankshaft
1308 // refuses to optimize functions with jsruntime calls). 1307 // refuses to optimize functions with jsruntime calls).
1309 PrepareFrameState(callee_value, BailoutId::None(), kPushOutput); 1308 PrepareFrameState(callee_value, BailoutId::None(), kPushOutput);
1310 environment()->Push(callee_value); 1309 environment()->Push(callee_value);
1311 environment()->Push(receiver_value); 1310 environment()->Push(receiver_value);
1312 1311
1313 // Evaluate all arguments to the JS runtime call. 1312 // Evaluate all arguments to the JS runtime call.
1314 ZoneList<Expression*>* args = expr->arguments(); 1313 ZoneList<Expression*>* args = expr->arguments();
1315 VisitForValues(args); 1314 VisitForValues(args);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 switch (assign_type) { 1377 switch (assign_type) {
1379 case VARIABLE: { 1378 case VARIABLE: {
1380 Variable* variable = expr->expression()->AsVariableProxy()->var(); 1379 Variable* variable = expr->expression()->AsVariableProxy()->var();
1381 old_value = BuildVariableLoad(variable, expr->expression()->id()); 1380 old_value = BuildVariableLoad(variable, expr->expression()->id());
1382 stack_depth = 0; 1381 stack_depth = 0;
1383 break; 1382 break;
1384 } 1383 }
1385 case NAMED_PROPERTY: { 1384 case NAMED_PROPERTY: {
1386 VisitForValue(property->obj()); 1385 VisitForValue(property->obj());
1387 Node* object = environment()->Top(); 1386 Node* object = environment()->Top();
1388 PrintableUnique<Name> name = 1387 Unique<Name> name =
1389 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1388 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1390 old_value = NewNode(javascript()->LoadNamed(name), object); 1389 old_value = NewNode(javascript()->LoadNamed(name), object);
1391 PrepareFrameState(old_value, property->LoadId(), kPushOutput); 1390 PrepareFrameState(old_value, property->LoadId(), kPushOutput);
1392 stack_depth = 1; 1391 stack_depth = 1;
1393 break; 1392 break;
1394 } 1393 }
1395 case KEYED_PROPERTY: { 1394 case KEYED_PROPERTY: {
1396 VisitForValue(property->obj()); 1395 VisitForValue(property->obj());
1397 VisitForValue(property->key()); 1396 VisitForValue(property->key());
1398 Node* key = environment()->Top(); 1397 Node* key = environment()->Top();
(...skipping 21 matching lines...) Expand all
1420 // Store the value. 1419 // Store the value.
1421 switch (assign_type) { 1420 switch (assign_type) {
1422 case VARIABLE: { 1421 case VARIABLE: {
1423 Variable* variable = expr->expression()->AsVariableProxy()->var(); 1422 Variable* variable = expr->expression()->AsVariableProxy()->var();
1424 BuildVariableAssignment(variable, value, expr->op(), 1423 BuildVariableAssignment(variable, value, expr->op(),
1425 expr->AssignmentId()); 1424 expr->AssignmentId());
1426 break; 1425 break;
1427 } 1426 }
1428 case NAMED_PROPERTY: { 1427 case NAMED_PROPERTY: {
1429 Node* object = environment()->Pop(); 1428 Node* object = environment()->Pop();
1430 PrintableUnique<Name> name = 1429 Unique<Name> name =
1431 MakeUnique(property->key()->AsLiteral()->AsPropertyName()); 1430 MakeUnique(property->key()->AsLiteral()->AsPropertyName());
1432 Node* store = 1431 Node* store =
1433 NewNode(javascript()->StoreNamed(strict_mode(), name), object, value); 1432 NewNode(javascript()->StoreNamed(strict_mode(), name), object, value);
1434 PrepareFrameState(store, expr->AssignmentId()); 1433 PrepareFrameState(store, expr->AssignmentId());
1435 break; 1434 break;
1436 } 1435 }
1437 case KEYED_PROPERTY: { 1436 case KEYED_PROPERTY: {
1438 Node* key = environment()->Pop(); 1437 Node* key = environment()->Pop();
1439 Node* object = environment()->Pop(); 1438 Node* object = environment()->Pop();
1440 Node* store = NewNode(javascript()->StoreProperty(strict_mode()), object, 1439 Node* store = NewNode(javascript()->StoreProperty(strict_mode()), object,
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1739 1738
1740 Node* AstGraphBuilder::BuildVariableLoad(Variable* variable, 1739 Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
1741 BailoutId bailout_id, 1740 BailoutId bailout_id,
1742 ContextualMode contextual_mode) { 1741 ContextualMode contextual_mode) {
1743 Node* the_hole = jsgraph()->TheHoleConstant(); 1742 Node* the_hole = jsgraph()->TheHoleConstant();
1744 VariableMode mode = variable->mode(); 1743 VariableMode mode = variable->mode();
1745 switch (variable->location()) { 1744 switch (variable->location()) {
1746 case Variable::UNALLOCATED: { 1745 case Variable::UNALLOCATED: {
1747 // Global var, const, or let variable. 1746 // Global var, const, or let variable.
1748 Node* global = BuildLoadGlobalObject(); 1747 Node* global = BuildLoadGlobalObject();
1749 PrintableUnique<Name> name = MakeUnique(variable->name()); 1748 Unique<Name> name = MakeUnique(variable->name());
1750 Operator* op = javascript()->LoadNamed(name, contextual_mode); 1749 Operator* op = javascript()->LoadNamed(name, contextual_mode);
1751 Node* node = NewNode(op, global); 1750 Node* node = NewNode(op, global);
1752 PrepareFrameState(node, bailout_id, kPushOutput); 1751 PrepareFrameState(node, bailout_id, kPushOutput);
1753 return node; 1752 return node;
1754 } 1753 }
1755 case Variable::PARAMETER: 1754 case Variable::PARAMETER:
1756 case Variable::LOCAL: { 1755 case Variable::LOCAL: {
1757 // Local var, const, or let variable. 1756 // Local var, const, or let variable.
1758 Node* value = environment()->Lookup(variable); 1757 Node* value = environment()->Lookup(variable);
1759 if (mode == CONST_LEGACY) { 1758 if (mode == CONST_LEGACY) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 1839
1841 Node* AstGraphBuilder::BuildVariableAssignment(Variable* variable, Node* value, 1840 Node* AstGraphBuilder::BuildVariableAssignment(Variable* variable, Node* value,
1842 Token::Value op, 1841 Token::Value op,
1843 BailoutId bailout_id) { 1842 BailoutId bailout_id) {
1844 Node* the_hole = jsgraph()->TheHoleConstant(); 1843 Node* the_hole = jsgraph()->TheHoleConstant();
1845 VariableMode mode = variable->mode(); 1844 VariableMode mode = variable->mode();
1846 switch (variable->location()) { 1845 switch (variable->location()) {
1847 case Variable::UNALLOCATED: { 1846 case Variable::UNALLOCATED: {
1848 // Global var, const, or let variable. 1847 // Global var, const, or let variable.
1849 Node* global = BuildLoadGlobalObject(); 1848 Node* global = BuildLoadGlobalObject();
1850 PrintableUnique<Name> name = MakeUnique(variable->name()); 1849 Unique<Name> name = MakeUnique(variable->name());
1851 Operator* op = javascript()->StoreNamed(strict_mode(), name); 1850 Operator* op = javascript()->StoreNamed(strict_mode(), name);
1852 Node* store = NewNode(op, global, value); 1851 Node* store = NewNode(op, global, value);
1853 PrepareFrameState(store, bailout_id); 1852 PrepareFrameState(store, bailout_id);
1854 return store; 1853 return store;
1855 } 1854 }
1856 case Variable::PARAMETER: 1855 case Variable::PARAMETER:
1857 case Variable::LOCAL: 1856 case Variable::LOCAL:
1858 // Local var, const, or let variable. 1857 // Local var, const, or let variable.
1859 if (mode == CONST_LEGACY && op == Token::INIT_CONST_LEGACY) { 1858 if (mode == CONST_LEGACY && op == Token::INIT_CONST_LEGACY) {
1860 // Perform an initialization check for legacy const variables. 1859 // Perform an initialization check for legacy const variables.
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2013 DCHECK(node->InputAt(frame_state_index)->op()->opcode() == IrOpcode::kDead); 2012 DCHECK(node->InputAt(frame_state_index)->op()->opcode() == IrOpcode::kDead);
2014 2013
2015 Node* frame_state_node = environment()->Checkpoint(ast_id, combine); 2014 Node* frame_state_node = environment()->Checkpoint(ast_id, combine);
2016 node->ReplaceInput(frame_state_index, frame_state_node); 2015 node->ReplaceInput(frame_state_index, frame_state_node);
2017 } 2016 }
2018 } 2017 }
2019 2018
2020 } 2019 }
2021 } 2020 }
2022 } // namespace v8::internal::compiler 2021 } // namespace v8::internal::compiler
OLDNEW
« no previous file with comments | « no previous file | src/compiler/change-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698