| Index: src/codegen.cc
|
| diff --git a/src/codegen.cc b/src/codegen.cc
|
| index 178ba4a69df8d1e423a6d9611518c11307135678..ba32aceface87f8b71e180134da40eade6ffdf5a 100644
|
| --- a/src/codegen.cc
|
| +++ b/src/codegen.cc
|
| @@ -12,6 +12,7 @@
|
| #include "src/compiler.h"
|
| #include "src/cpu-profiler.h"
|
| #include "src/debug.h"
|
| +#include "src/parser.h"
|
| #include "src/prettyprinter.h"
|
| #include "src/rewriter.h"
|
| #include "src/runtime/runtime.h"
|
| @@ -134,13 +135,13 @@ void CodeGenerator::MakeCodePrologue(CompilationInfo* info, const char* kind) {
|
| }
|
|
|
| #ifdef DEBUG
|
| - if (!info->IsStub() && print_source) {
|
| + if (info->parse_info() && print_source) {
|
| PrintF("--- Source from AST ---\n%s\n",
|
| PrettyPrinter(info->isolate(), info->zone())
|
| .PrintProgram(info->function()));
|
| }
|
|
|
| - if (!info->IsStub() && print_ast) {
|
| + if (info->parse_info() && print_ast) {
|
| PrintF("--- AST ---\n%s\n", AstPrinter(info->isolate(), info->zone())
|
| .PrintProgram(info->function()));
|
| }
|
| @@ -181,14 +182,25 @@ void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
|
| (info->IsStub() && FLAG_print_code_stubs) ||
|
| (info->IsOptimizing() && FLAG_print_opt_code));
|
| if (print_code) {
|
| - // Print the source code if available.
|
| - FunctionLiteral* function = info->function();
|
| - bool print_source = code->kind() == Code::OPTIMIZED_FUNCTION ||
|
| - code->kind() == Code::FUNCTION;
|
| + const char* debug_name;
|
| + if (info->IsStub()) {
|
| + CodeStub::Major major_key = info->code_stub()->MajorKey();
|
| + debug_name = CodeStub::MajorName(major_key, false);
|
| + } else {
|
| + debug_name =
|
| + info->parse_info()->function()->debug_name()->ToCString().get();
|
| + }
|
|
|
| CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer());
|
| OFStream os(tracing_scope.file());
|
| +
|
| + // Print the source code if available.
|
| + FunctionLiteral* function = nullptr;
|
| + bool print_source =
|
| + info->parse_info() && (code->kind() == Code::OPTIMIZED_FUNCTION ||
|
| + code->kind() == Code::FUNCTION);
|
| if (print_source) {
|
| + function = info->function();
|
| Handle<Script> script = info->script();
|
| if (!script->IsUndefined() && !script->source()->IsUndefined()) {
|
| os << "--- Raw source ---\n";
|
| @@ -207,10 +219,9 @@ void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
|
| }
|
| }
|
| if (info->IsOptimizing()) {
|
| - if (FLAG_print_unopt_code) {
|
| + if (FLAG_print_unopt_code && info->parse_info()) {
|
| os << "--- Unoptimized code ---\n";
|
| - info->closure()->shared()->code()->Disassemble(
|
| - function->debug_name()->ToCString().get(), os);
|
| + info->closure()->shared()->code()->Disassemble(debug_name, os);
|
| }
|
| os << "--- Optimized code ---\n"
|
| << "optimization_id = " << info->optimization_id() << "\n";
|
| @@ -220,12 +231,7 @@ void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
|
| if (print_source) {
|
| os << "source_position = " << function->start_position() << "\n";
|
| }
|
| - if (info->IsStub()) {
|
| - CodeStub::Major major_key = info->code_stub()->MajorKey();
|
| - code->Disassemble(CodeStub::MajorName(major_key, false), os);
|
| - } else {
|
| - code->Disassemble(function->debug_name()->ToCString().get(), os);
|
| - }
|
| + code->Disassemble(debug_name, os);
|
| os << "--- End code ---\n";
|
| }
|
| #endif // ENABLE_DISASSEMBLER
|
|
|