| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/typing.h" | 5 #include "src/typing.h" |
| 6 | 6 |
| 7 #include "src/frames.h" | 7 #include "src/frames.h" |
| 8 #include "src/frames-inl.h" | 8 #include "src/frames-inl.h" |
| 9 #include "src/ostreams.h" | 9 #include "src/ostreams.h" |
| 10 #include "src/parser.h" // for CompileTimeValue; TODO(rossberg): should move | 10 #include "src/parser.h" // for CompileTimeValue; TODO(rossberg): should move |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 | 420 |
| 421 NarrowType(expr, Bounds(Type::Object(zone()))); | 421 NarrowType(expr, Bounds(Type::Object(zone()))); |
| 422 } | 422 } |
| 423 | 423 |
| 424 | 424 |
| 425 void AstTyper::VisitAssignment(Assignment* expr) { | 425 void AstTyper::VisitAssignment(Assignment* expr) { |
| 426 // Collect type feedback. | 426 // Collect type feedback. |
| 427 Property* prop = expr->target()->AsProperty(); | 427 Property* prop = expr->target()->AsProperty(); |
| 428 if (prop != NULL) { | 428 if (prop != NULL) { |
| 429 TypeFeedbackId id = expr->AssignmentFeedbackId(); | 429 TypeFeedbackId id = expr->AssignmentFeedbackId(); |
| 430 expr->set_is_uninitialized(oracle()->StoreIsUninitialized(id)); | 430 FeedbackVectorICSlot slot = expr->AssignmentSlot(); |
| 431 expr->set_is_uninitialized(FLAG_vector_stores |
| 432 ? oracle()->StoreIsUninitialized(slot) |
| 433 : oracle()->StoreIsUninitialized(id)); |
| 431 if (!expr->IsUninitialized()) { | 434 if (!expr->IsUninitialized()) { |
| 435 SmallMapList* receiver_types = expr->GetReceiverTypes(); |
| 432 if (prop->key()->IsPropertyName()) { | 436 if (prop->key()->IsPropertyName()) { |
| 433 Literal* lit_key = prop->key()->AsLiteral(); | 437 Literal* lit_key = prop->key()->AsLiteral(); |
| 434 DCHECK(lit_key != NULL && lit_key->value()->IsString()); | 438 DCHECK(lit_key != NULL && lit_key->value()->IsString()); |
| 435 Handle<String> name = Handle<String>::cast(lit_key->value()); | 439 Handle<String> name = Handle<String>::cast(lit_key->value()); |
| 436 oracle()->AssignmentReceiverTypes(id, name, expr->GetReceiverTypes()); | 440 if (FLAG_vector_stores) { |
| 441 oracle()->AssignmentReceiverTypes(slot, name, receiver_types); |
| 442 } else { |
| 443 oracle()->AssignmentReceiverTypes(id, name, receiver_types); |
| 444 } |
| 437 } else { | 445 } else { |
| 438 KeyedAccessStoreMode store_mode; | 446 KeyedAccessStoreMode store_mode; |
| 439 IcCheckType key_type; | 447 IcCheckType key_type; |
| 440 oracle()->KeyedAssignmentReceiverTypes(id, expr->GetReceiverTypes(), | 448 if (FLAG_vector_stores) { |
| 441 &store_mode, &key_type); | 449 oracle()->KeyedAssignmentReceiverTypes(slot, receiver_types, |
| 450 &store_mode, &key_type); |
| 451 } else { |
| 452 oracle()->KeyedAssignmentReceiverTypes(id, receiver_types, |
| 453 &store_mode, &key_type); |
| 454 } |
| 442 expr->set_store_mode(store_mode); | 455 expr->set_store_mode(store_mode); |
| 443 expr->set_key_type(key_type); | 456 expr->set_key_type(key_type); |
| 444 } | 457 } |
| 445 } | 458 } |
| 446 } | 459 } |
| 447 | 460 |
| 448 Expression* rhs = | 461 Expression* rhs = |
| 449 expr->is_compound() ? expr->binary_operation() : expr->value(); | 462 expr->is_compound() ? expr->binary_operation() : expr->value(); |
| 450 RECURSE(Visit(expr->target())); | 463 RECURSE(Visit(expr->target())); |
| 451 RECURSE(Visit(rhs)); | 464 RECURSE(Visit(rhs)); |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 void AstTyper::VisitImportDeclaration(ImportDeclaration* declaration) { | 790 void AstTyper::VisitImportDeclaration(ImportDeclaration* declaration) { |
| 778 } | 791 } |
| 779 | 792 |
| 780 | 793 |
| 781 void AstTyper::VisitExportDeclaration(ExportDeclaration* declaration) { | 794 void AstTyper::VisitExportDeclaration(ExportDeclaration* declaration) { |
| 782 } | 795 } |
| 783 | 796 |
| 784 | 797 |
| 785 } // namespace internal | 798 } // namespace internal |
| 786 } // namespace v8 | 799 } // namespace v8 |
| OLD | NEW |