From 233599fa70818f1ef6ff2860f7762ab29f32653f Mon Sep 17 00:00:00 2001 From: bradnelson Date: Fri, 21 Aug 2015 11:15:33 -0700 Subject: [PATCH] Don't allocate AstTyper with the zone allocator. While the class Type objects the AstTyper generates should be allocated to zone memory, there's no particular reason the typer object itself needs to be. BUG=None TEST=None R=rossberg@chromium.org,titzer@chromium.org LOG=N Review URL: https://codereview.chromium.org/1303843003 Cr-Commit-Position: refs/heads/master@{#30313} --- src/compiler.cc | 2 +- src/hydrogen.cc | 2 +- src/typing.cc | 25 +++++++------------------ src/typing.h | 9 ++------- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/compiler.cc b/src/compiler.cc index 9ce666c91..839b99f02 100644 --- a/src/compiler.cc +++ b/src/compiler.cc @@ -468,7 +468,7 @@ OptimizedCompileJob::Status OptimizedCompileJob::CreateGraph() { } // Type-check the function. - AstTyper::Run(info()); + AstTyper(info()).Run(); // Optimization could have been disabled by the parser. Note that this check // is only needed because the Hydrogen graph builder is missing some bailouts. diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 317164283..782baa028 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -8335,7 +8335,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle target, // Type-check the inlined function. DCHECK(target_shared->has_deoptimization_support()); - AstTyper::Run(&target_info); + AstTyper(&target_info).Run(); int inlining_id = 0; if (top_info()->is_tracking_positions()) { diff --git a/src/typing.cc b/src/typing.cc index e1991f25c..1cb757777 100644 --- a/src/typing.cc +++ b/src/typing.cc @@ -26,24 +26,6 @@ AstTyper::AstTyper(CompilationInfo* info) } -#define RECURSE(call) \ - do { \ - DCHECK(!visitor->HasStackOverflow()); \ - call; \ - if (visitor->HasStackOverflow()) return; \ - } while (false) - -void AstTyper::Run(CompilationInfo* info) { - AstTyper* visitor = new(info->zone()) AstTyper(info); - Scope* scope = info->scope(); - - RECURSE(visitor->VisitDeclarations(scope->declarations())); - RECURSE(visitor->VisitStatements(info->literal()->body())); -} - -#undef RECURSE - - #ifdef OBJECT_PRINT static void PrintObserved(Variable* var, Object* value, Type* type) { OFStream os(stdout); @@ -122,6 +104,13 @@ void AstTyper::ObserveTypesAtOsrEntry(IterationStatement* stmt) { } while (false) +void AstTyper::Run() { + Scope* scope = info_->scope(); + RECURSE(VisitDeclarations(scope->declarations())); + RECURSE(VisitStatements(info_->literal()->body())); +} + + void AstTyper::VisitStatements(ZoneList* stmts) { for (int i = 0; i < stmts->length(); ++i) { Statement* stmt = stmts->at(i); diff --git a/src/typing.h b/src/typing.h index f3ead18f9..ccfb97343 100644 --- a/src/typing.h +++ b/src/typing.h @@ -19,17 +19,12 @@ namespace internal { class AstTyper: public AstVisitor { public: - static void Run(CompilationInfo* info); - - void* operator new(size_t size, Zone* zone) { return zone->New(size); } - void operator delete(void* pointer, Zone* zone) { } - void operator delete(void* pointer) { } + explicit AstTyper(CompilationInfo* info); + void Run(); DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); private: - explicit AstTyper(CompilationInfo* info); - Effect ObservedOnStack(Object* value); void ObserveTypesAtOsrEntry(IterationStatement* stmt); -- 2.34.1