Index: src/codegen.cc |
=================================================================== |
--- src/codegen.cc (revision 3788) |
+++ src/codegen.cc (working copy) |
@@ -126,7 +126,7 @@ |
} |
-void CodeGenerator::MakeCodePrologue(FunctionLiteral* fun) { |
+void CodeGenerator::MakeCodePrologue(CompilationInfo* info) { |
#ifdef DEBUG |
bool print_source = false; |
bool print_ast = false; |
@@ -147,34 +147,35 @@ |
if (FLAG_trace_codegen || print_source || print_ast) { |
PrintF("*** Generate code for %s function: ", ftype); |
- fun->name()->ShortPrint(); |
+ info->function()->name()->ShortPrint(); |
PrintF(" ***\n"); |
} |
if (print_source) { |
- PrintF("--- Source from AST ---\n%s\n", PrettyPrinter().PrintProgram(fun)); |
+ PrintF("--- Source from AST ---\n%s\n", |
+ PrettyPrinter().PrintProgram(info->function())); |
} |
if (print_ast) { |
- PrintF("--- AST ---\n%s\n", AstPrinter().PrintProgram(fun)); |
+ PrintF("--- AST ---\n%s\n", |
+ AstPrinter().PrintProgram(info->function())); |
} |
if (print_json_ast) { |
JsonAstBuilder builder; |
- PrintF("%s", builder.BuildProgram(fun)); |
+ PrintF("%s", builder.BuildProgram(info->function())); |
} |
#endif // DEBUG |
} |
-Handle<Code> CodeGenerator::MakeCodeEpilogue(FunctionLiteral* fun, |
- MacroAssembler* masm, |
+Handle<Code> CodeGenerator::MakeCodeEpilogue(MacroAssembler* masm, |
Code::Flags flags, |
- Handle<Script> script) { |
+ CompilationInfo* info) { |
// Allocate and install the code. |
CodeDesc desc; |
masm->GetCode(&desc); |
- ZoneScopeInfo sinfo(fun->scope()); |
+ ZoneScopeInfo sinfo(info->scope()); |
Handle<Code> code = |
Factory::NewCode(desc, &sinfo, flags, masm->CodeObject()); |
@@ -187,20 +188,23 @@ |
: FLAG_print_code; |
if (print_code) { |
// Print the source code if available. |
+ Handle<Script> script = info->script(); |
+ FunctionLiteral* function = info->function(); |
if (!script->IsUndefined() && !script->source()->IsUndefined()) { |
PrintF("--- Raw source ---\n"); |
StringInputBuffer stream(String::cast(script->source())); |
- stream.Seek(fun->start_position()); |
+ stream.Seek(function->start_position()); |
// fun->end_position() points to the last character in the stream. We |
// need to compensate by adding one to calculate the length. |
- int source_len = fun->end_position() - fun->start_position() + 1; |
+ int source_len = |
+ function->end_position() - function->start_position() + 1; |
for (int i = 0; i < source_len; i++) { |
if (stream.has_more()) PrintF("%c", stream.GetNext()); |
} |
PrintF("\n\n"); |
} |
PrintF("--- Code ---\n"); |
- code->Disassemble(*fun->name()->ToCString()); |
+ code->Disassemble(*function->name()->ToCString()); |
} |
#endif // ENABLE_DISASSEMBLER |
@@ -214,21 +218,19 @@ |
// Generate the code. Takes a function literal, generates code for it, assemble |
// all the pieces into a Code object. This function is only to be called by |
// the compiler.cc code. |
-Handle<Code> CodeGenerator::MakeCode(FunctionLiteral* fun, |
- Handle<Script> script, |
- bool is_eval, |
- CompilationInfo* info) { |
+Handle<Code> CodeGenerator::MakeCode(CompilationInfo* info) { |
+ Handle<Script> script = info->script(); |
if (!script->IsUndefined() && !script->source()->IsUndefined()) { |
int len = String::cast(script->source())->length(); |
Counters::total_old_codegen_source_size.Increment(len); |
} |
- MakeCodePrologue(fun); |
+ MakeCodePrologue(info); |
// Generate code. |
const int kInitialBufferSize = 4 * KB; |
MacroAssembler masm(NULL, kInitialBufferSize); |
- CodeGenerator cgen(&masm, script, is_eval); |
+ CodeGenerator cgen(&masm); |
CodeGeneratorScope scope(&cgen); |
- cgen.Generate(fun, PRIMARY, info); |
+ cgen.Generate(info, PRIMARY); |
if (cgen.HasStackOverflow()) { |
ASSERT(!Top::has_pending_exception()); |
return Handle<Code>::null(); |
@@ -236,7 +238,7 @@ |
InLoopFlag in_loop = (cgen.loop_nesting() != 0) ? IN_LOOP : NOT_IN_LOOP; |
Code::Flags flags = Code::ComputeFlags(Code::FUNCTION, in_loop); |
- return MakeCodeEpilogue(fun, cgen.masm(), flags, script); |
+ return MakeCodeEpilogue(cgen.masm(), flags, info); |
} |