Don't allocate AstTyper with the zone allocator.
authorbradnelson <bradnelson@google.com>
Fri, 21 Aug 2015 18:15:33 +0000 (11:15 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 21 Aug 2015 18:15:41 +0000 (18:15 +0000)
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
src/hydrogen.cc
src/typing.cc
src/typing.h

index 9ce666c..839b99f 100644 (file)
@@ -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.
index 3171642..782baa0 100644 (file)
@@ -8335,7 +8335,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> 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()) {
index e1991f2..1cb7577 100644 (file)
@@ -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<Statement*>* stmts) {
   for (int i = 0; i < stmts->length(); ++i) {
     Statement* stmt = stmts->at(i);
index f3ead18..ccfb973 100644 (file)
@@ -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);