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

Side by Side Diff: src/typing.cc

Issue 1387383005: Eagerly extract stack limit from Isolate in InitializeAstVisitor() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « src/typing.h ('k') | no next file » | 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 // 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
11 #include "src/scopes.h" 11 #include "src/scopes.h"
12 #include "src/splay-tree-inl.h" 12 #include "src/splay-tree-inl.h"
13 13
14 namespace v8 { 14 namespace v8 {
15 namespace internal { 15 namespace internal {
16 16
17 17
18 AstTyper::AstTyper(Isolate* isolate, Zone* zone, Handle<JSFunction> closure, 18 AstTyper::AstTyper(Isolate* isolate, Zone* zone, Handle<JSFunction> closure,
19 Scope* scope, BailoutId osr_ast_id, FunctionLiteral* root) 19 Scope* scope, BailoutId osr_ast_id, FunctionLiteral* root)
20 : closure_(closure), 20 : isolate_(isolate),
21 closure_(closure),
21 scope_(scope), 22 scope_(scope),
22 osr_ast_id_(osr_ast_id), 23 osr_ast_id_(osr_ast_id),
23 root_(root), 24 root_(root),
24 oracle_(isolate, zone, handle(closure->shared()->code()), 25 oracle_(isolate, zone, handle(closure->shared()->code()),
25 handle(closure->shared()->feedback_vector()), 26 handle(closure->shared()->feedback_vector()),
26 handle(closure->context()->native_context())), 27 handle(closure->context()->native_context())),
27 store_(zone) { 28 store_(zone) {
28 InitializeAstVisitor(isolate, zone); 29 InitializeAstVisitor(isolate, zone);
29 } 30 }
30 31
(...skipping 13 matching lines...) Expand all
44 Effect AstTyper::ObservedOnStack(Object* value) { 45 Effect AstTyper::ObservedOnStack(Object* value) {
45 Type* lower = Type::NowOf(value, zone()); 46 Type* lower = Type::NowOf(value, zone());
46 return Effect(Bounds(lower, Type::Any(zone()))); 47 return Effect(Bounds(lower, Type::Any(zone())));
47 } 48 }
48 49
49 50
50 void AstTyper::ObserveTypesAtOsrEntry(IterationStatement* stmt) { 51 void AstTyper::ObserveTypesAtOsrEntry(IterationStatement* stmt) {
51 if (stmt->OsrEntryId() != osr_ast_id_) return; 52 if (stmt->OsrEntryId() != osr_ast_id_) return;
52 53
53 DisallowHeapAllocation no_gc; 54 DisallowHeapAllocation no_gc;
54 JavaScriptFrameIterator it(isolate()); 55 JavaScriptFrameIterator it(isolate_);
55 JavaScriptFrame* frame = it.frame(); 56 JavaScriptFrame* frame = it.frame();
56 57
57 // Assert that the frame on the stack belongs to the function we want to OSR. 58 // Assert that the frame on the stack belongs to the function we want to OSR.
58 DCHECK_EQ(*closure_, frame->function()); 59 DCHECK_EQ(*closure_, frame->function());
59 60
60 int params = scope_->num_parameters(); 61 int params = scope_->num_parameters();
61 int locals = scope_->StackLocalCount(); 62 int locals = scope_->StackLocalCount();
62 63
63 // Use sequential composition to achieve desired narrowing. 64 // Use sequential composition to achieve desired narrowing.
64 // The receiver is a parameter with index -1. 65 // The receiver is a parameter with index -1.
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 RECURSE(Visit(expr->key())); 523 RECURSE(Visit(expr->key()));
523 524
524 // We don't know anything about the result type. 525 // We don't know anything about the result type.
525 } 526 }
526 527
527 528
528 void AstTyper::VisitCall(Call* expr) { 529 void AstTyper::VisitCall(Call* expr) {
529 // Collect type feedback. 530 // Collect type feedback.
530 RECURSE(Visit(expr->expression())); 531 RECURSE(Visit(expr->expression()));
531 bool is_uninitialized = true; 532 bool is_uninitialized = true;
532 if (expr->IsUsingCallFeedbackICSlot(isolate())) { 533 if (expr->IsUsingCallFeedbackICSlot(isolate_)) {
533 FeedbackVectorSlot slot = expr->CallFeedbackICSlot(); 534 FeedbackVectorSlot slot = expr->CallFeedbackICSlot();
534 is_uninitialized = oracle()->CallIsUninitialized(slot); 535 is_uninitialized = oracle()->CallIsUninitialized(slot);
535 if (!expr->expression()->IsProperty() && 536 if (!expr->expression()->IsProperty() &&
536 oracle()->CallIsMonomorphic(slot)) { 537 oracle()->CallIsMonomorphic(slot)) {
537 expr->set_target(oracle()->GetCallTarget(slot)); 538 expr->set_target(oracle()->GetCallTarget(slot));
538 Handle<AllocationSite> site = oracle()->GetCallAllocationSite(slot); 539 Handle<AllocationSite> site = oracle()->GetCallAllocationSite(slot);
539 expr->set_allocation_site(site); 540 expr->set_allocation_site(site);
540 } 541 }
541 } 542 }
542 543
543 expr->set_is_uninitialized(is_uninitialized); 544 expr->set_is_uninitialized(is_uninitialized);
544 545
545 ZoneList<Expression*>* args = expr->arguments(); 546 ZoneList<Expression*>* args = expr->arguments();
546 for (int i = 0; i < args->length(); ++i) { 547 for (int i = 0; i < args->length(); ++i) {
547 Expression* arg = args->at(i); 548 Expression* arg = args->at(i);
548 RECURSE(Visit(arg)); 549 RECURSE(Visit(arg));
549 } 550 }
550 551
551 VariableProxy* proxy = expr->expression()->AsVariableProxy(); 552 VariableProxy* proxy = expr->expression()->AsVariableProxy();
552 if (proxy != NULL && proxy->var()->is_possibly_eval(isolate())) { 553 if (proxy != NULL && proxy->var()->is_possibly_eval(isolate_)) {
553 store_.Forget(); // Eval could do whatever to local variables. 554 store_.Forget(); // Eval could do whatever to local variables.
554 } 555 }
555 556
556 // We don't know anything about the result type. 557 // We don't know anything about the result type.
557 } 558 }
558 559
559 560
560 void AstTyper::VisitCallNew(CallNew* expr) { 561 void AstTyper::VisitCallNew(CallNew* expr) {
561 // Collect type feedback. 562 // Collect type feedback.
562 FeedbackVectorSlot allocation_site_feedback_slot = 563 FeedbackVectorSlot allocation_site_feedback_slot =
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 void AstTyper::VisitImportDeclaration(ImportDeclaration* declaration) { 805 void AstTyper::VisitImportDeclaration(ImportDeclaration* declaration) {
805 } 806 }
806 807
807 808
808 void AstTyper::VisitExportDeclaration(ExportDeclaration* declaration) { 809 void AstTyper::VisitExportDeclaration(ExportDeclaration* declaration) {
809 } 810 }
810 811
811 812
812 } // namespace internal 813 } // namespace internal
813 } // namespace v8 814 } // namespace v8
OLDNEW
« no previous file with comments | « src/typing.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698