From 5536273594208aff9e1cc02716bdaa44033e733c Mon Sep 17 00:00:00 2001 From: "kmillikin@chromium.org" Date: Fri, 29 Jan 2010 15:29:33 +0000 Subject: [PATCH] Add fast code generator visitor. It does not yet emit code so there is a flag --print-ir to print the AST as seen by the code generator. Review URL: http://codereview.chromium.org/558042 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3748 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/compiler.cc | 11 +-- src/compiler.h | 2 +- src/fast-codegen.cc | 238 +++++++++++++++++++++++++++++++++++++++++++++++++ src/fast-codegen.h | 34 +++++++ src/flag-definitions.h | 1 + 5 files changed, 278 insertions(+), 8 deletions(-) diff --git a/src/compiler.cc b/src/compiler.cc index 604af2c..98a26f8 100644 --- a/src/compiler.cc +++ b/src/compiler.cc @@ -31,7 +31,6 @@ #include "codegen-inl.h" #include "compilation-cache.h" #include "compiler.h" -#include "data-flow.h" #include "debug.h" #include "fast-codegen.h" #include "full-codegen.h" @@ -113,10 +112,9 @@ static Handle MakeCode(FunctionLiteral* literal, FastCodeGenSyntaxChecker checker; checker.Check(literal, info); if (checker.has_supported_syntax()) { - AstLabeler labeler; - labeler.Label(literal); + // Does not yet generate code. + FastCodeGenerator::MakeCode(literal, script, is_eval, info); } - // Does not yet generate code. } return CodeGenerator::MakeCode(literal, script, is_eval, info); @@ -513,10 +511,9 @@ Handle Compiler::BuildBoilerplate(FunctionLiteral* literal, FastCodeGenSyntaxChecker checker; checker.Check(literal, &info); if (checker.has_supported_syntax()) { - AstLabeler label_nodes; - label_nodes.Label(literal); + // Does not yet generate code. + FastCodeGenerator::MakeCode(literal, script, false, &info); } - // Generate no code. } if (!is_compiled) { diff --git a/src/compiler.h b/src/compiler.h index 0661f34..d12423d 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -42,7 +42,7 @@ class CompilationInfo BASE_EMBEDDED { Handle receiver, int loop_nesting) : shared_info_(shared_info), - receiver_(receiver_), + receiver_(receiver), loop_nesting_(loop_nesting) { } diff --git a/src/fast-codegen.cc b/src/fast-codegen.cc index 5a8c09e..db0205c 100644 --- a/src/fast-codegen.cc +++ b/src/fast-codegen.cc @@ -27,6 +27,7 @@ #include "v8.h" +#include "data-flow.h" #include "fast-codegen.h" #include "scopes.h" @@ -51,6 +52,8 @@ namespace internal { void FastCodeGenSyntaxChecker::Check(FunctionLiteral* fun, CompilationInfo* info) { + info_ = info; + // We do not specialize if we do not have a receiver. if (!info->has_receiver()) BAILOUT("No receiver"); @@ -322,4 +325,239 @@ void FastCodeGenSyntaxChecker::VisitThisFunction(ThisFunction* expr) { #undef CHECK_BAILOUT +void FastCodeGenerator::MakeCode(FunctionLiteral* fun, + Handle