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

Side by Side Diff: src/typing.cc

Issue 148223002: Remove CallICs (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Update test262 status file Created 6 years, 10 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 | « src/type-info.cc ('k') | src/v8globals.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 } 448 }
449 449
450 450
451 void AstTyper::VisitAssignment(Assignment* expr) { 451 void AstTyper::VisitAssignment(Assignment* expr) {
452 // Collect type feedback. 452 // Collect type feedback.
453 Property* prop = expr->target()->AsProperty(); 453 Property* prop = expr->target()->AsProperty();
454 if (prop != NULL) { 454 if (prop != NULL) {
455 TypeFeedbackId id = expr->AssignmentFeedbackId(); 455 TypeFeedbackId id = expr->AssignmentFeedbackId();
456 expr->set_is_uninitialized(oracle()->StoreIsUninitialized(id)); 456 expr->set_is_uninitialized(oracle()->StoreIsUninitialized(id));
457 if (!expr->IsUninitialized()) { 457 if (!expr->IsUninitialized()) {
458 expr->set_is_pre_monomorphic(oracle()->StoreIsPreMonomorphic(id));
459 if (prop->key()->IsPropertyName()) { 458 if (prop->key()->IsPropertyName()) {
460 Literal* lit_key = prop->key()->AsLiteral(); 459 Literal* lit_key = prop->key()->AsLiteral();
461 ASSERT(lit_key != NULL && lit_key->value()->IsString()); 460 ASSERT(lit_key != NULL && lit_key->value()->IsString());
462 Handle<String> name = Handle<String>::cast(lit_key->value()); 461 Handle<String> name = Handle<String>::cast(lit_key->value());
463 oracle()->AssignmentReceiverTypes(id, name, expr->GetReceiverTypes()); 462 oracle()->AssignmentReceiverTypes(id, name, expr->GetReceiverTypes());
464 } else { 463 } else {
465 KeyedAccessStoreMode store_mode; 464 KeyedAccessStoreMode store_mode;
466 oracle()->KeyedAssignmentReceiverTypes( 465 oracle()->KeyedAssignmentReceiverTypes(
467 id, expr->GetReceiverTypes(), &store_mode); 466 id, expr->GetReceiverTypes(), &store_mode);
468 expr->set_store_mode(store_mode); 467 expr->set_store_mode(store_mode);
469 } 468 }
470 ASSERT(!expr->IsPreMonomorphic() || !expr->IsMonomorphic());
471 } 469 }
472 } 470 }
473 471
474 Expression* rhs = 472 Expression* rhs =
475 expr->is_compound() ? expr->binary_operation() : expr->value(); 473 expr->is_compound() ? expr->binary_operation() : expr->value();
476 RECURSE(Visit(expr->target())); 474 RECURSE(Visit(expr->target()));
477 RECURSE(Visit(rhs)); 475 RECURSE(Visit(rhs));
478 NarrowType(expr, rhs->bounds()); 476 NarrowType(expr, rhs->bounds());
479 477
480 VariableProxy* proxy = expr->target()->AsVariableProxy(); 478 VariableProxy* proxy = expr->target()->AsVariableProxy();
(...skipping 17 matching lines...) Expand all
498 496
499 NarrowType(expr, Bounds(Type::None(zone()))); 497 NarrowType(expr, Bounds(Type::None(zone())));
500 } 498 }
501 499
502 500
503 void AstTyper::VisitProperty(Property* expr) { 501 void AstTyper::VisitProperty(Property* expr) {
504 // Collect type feedback. 502 // Collect type feedback.
505 TypeFeedbackId id = expr->PropertyFeedbackId(); 503 TypeFeedbackId id = expr->PropertyFeedbackId();
506 expr->set_is_uninitialized(oracle()->LoadIsUninitialized(id)); 504 expr->set_is_uninitialized(oracle()->LoadIsUninitialized(id));
507 if (!expr->IsUninitialized()) { 505 if (!expr->IsUninitialized()) {
508 expr->set_is_pre_monomorphic(oracle()->LoadIsPreMonomorphic(id));
509 if (expr->key()->IsPropertyName()) { 506 if (expr->key()->IsPropertyName()) {
510 Literal* lit_key = expr->key()->AsLiteral(); 507 Literal* lit_key = expr->key()->AsLiteral();
511 ASSERT(lit_key != NULL && lit_key->value()->IsString()); 508 ASSERT(lit_key != NULL && lit_key->value()->IsString());
512 Handle<String> name = Handle<String>::cast(lit_key->value()); 509 Handle<String> name = Handle<String>::cast(lit_key->value());
513 bool is_prototype; 510 bool is_prototype;
514 oracle()->PropertyReceiverTypes( 511 oracle()->PropertyReceiverTypes(
515 id, name, expr->GetReceiverTypes(), &is_prototype); 512 id, name, expr->GetReceiverTypes(), &is_prototype);
516 expr->set_is_function_prototype(is_prototype); 513 expr->set_is_function_prototype(is_prototype);
517 } else { 514 } else {
518 bool is_string; 515 bool is_string;
519 oracle()->KeyedPropertyReceiverTypes( 516 oracle()->KeyedPropertyReceiverTypes(
520 id, expr->GetReceiverTypes(), &is_string); 517 id, expr->GetReceiverTypes(), &is_string);
521 expr->set_is_string_access(is_string); 518 expr->set_is_string_access(is_string);
522 } 519 }
523 ASSERT(!expr->IsPreMonomorphic() || !expr->IsMonomorphic());
524 } 520 }
525 521
526 RECURSE(Visit(expr->obj())); 522 RECURSE(Visit(expr->obj()));
527 RECURSE(Visit(expr->key())); 523 RECURSE(Visit(expr->key()));
528 524
529 // We don't know anything about the result type. 525 // We don't know anything about the result type.
530 } 526 }
531 527
532 528
533 void AstTyper::VisitCall(Call* expr) { 529 void AstTyper::VisitCall(Call* expr) {
534 // Collect type feedback. 530 // Collect type feedback.
535 expr->RecordTypeFeedback(oracle()); 531 RECURSE(Visit(expr->expression()));
532 if (!expr->expression()->IsProperty() &&
533 oracle()->CallIsMonomorphic(expr->CallFeedbackId())) {
534 expr->set_target(oracle()->GetCallTarget(expr->CallFeedbackId()));
535 }
536 536
537 RECURSE(Visit(expr->expression()));
538 ZoneList<Expression*>* args = expr->arguments(); 537 ZoneList<Expression*>* args = expr->arguments();
539 for (int i = 0; i < args->length(); ++i) { 538 for (int i = 0; i < args->length(); ++i) {
540 Expression* arg = args->at(i); 539 Expression* arg = args->at(i);
541 RECURSE(Visit(arg)); 540 RECURSE(Visit(arg));
542 } 541 }
543 542
544 VariableProxy* proxy = expr->expression()->AsVariableProxy(); 543 VariableProxy* proxy = expr->expression()->AsVariableProxy();
545 if (proxy != NULL && proxy->var()->is_possibly_eval(isolate())) { 544 if (proxy != NULL && proxy->var()->is_possibly_eval(isolate())) {
546 store_.Forget(); // Eval could do whatever to local variables. 545 store_.Forget(); // Eval could do whatever to local variables.
547 } 546 }
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 void AstTyper::VisitModuleUrl(ModuleUrl* module) { 790 void AstTyper::VisitModuleUrl(ModuleUrl* module) {
792 } 791 }
793 792
794 793
795 void AstTyper::VisitModuleStatement(ModuleStatement* stmt) { 794 void AstTyper::VisitModuleStatement(ModuleStatement* stmt) {
796 RECURSE(Visit(stmt->body())); 795 RECURSE(Visit(stmt->body()));
797 } 796 }
798 797
799 798
800 } } // namespace v8::internal 799 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/type-info.cc ('k') | src/v8globals.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698