Chromium Code Reviews| Index: src/frames.cc |
| diff --git a/src/frames.cc b/src/frames.cc |
| index b20a7ea37caf43ef7b01c1d1fa5ec7b6bcf5e331..29d3456e61853cc905556cfe60af3de66a2ddcc8 100644 |
| --- a/src/frames.cc |
| +++ b/src/frames.cc |
| @@ -205,7 +205,7 @@ void StackTraceFrameIterator::Advance() { |
| bool StackTraceFrameIterator::IsValidFrame() { |
| if (!frame()->function()->IsJSFunction()) return false; |
| - Object* script = JSFunction::cast(frame()->function())->shared()->script(); |
| + Object* script = frame()->function()->shared()->script(); |
| // Don't show functions from native scripts to user. |
| return (script->IsScript() && |
| Script::TYPE_NATIVE != Script::cast(script)->type()->value()); |
| @@ -724,8 +724,7 @@ int JavaScriptFrame::GetArgumentsLength() const { |
| Code* JavaScriptFrame::unchecked_code() const { |
| - JSFunction* function = JSFunction::cast(this->function()); |
| - return function->code(); |
| + return function()->code(); |
| } |
| @@ -733,8 +732,7 @@ int JavaScriptFrame::GetNumberOfIncomingArguments() const { |
| ASSERT(can_access_heap_objects() && |
| isolate()->heap()->gc_state() == Heap::NOT_IN_GC); |
| - JSFunction* function = JSFunction::cast(this->function()); |
| - return function->shared()->formal_parameter_count(); |
| + return function()->shared()->formal_parameter_count(); |
| } |
| @@ -745,7 +743,7 @@ Address JavaScriptFrame::GetCallerStackPointer() const { |
| void JavaScriptFrame::GetFunctions(List<JSFunction*>* functions) { |
| ASSERT(functions->length() == 0); |
| - functions->Add(JSFunction::cast(function())); |
| + functions->Add(function()); |
| } |
| @@ -754,7 +752,7 @@ void JavaScriptFrame::Summarize(List<FrameSummary>* functions) { |
| Code* code_pointer = LookupCode(); |
| int offset = static_cast<int>(pc() - code_pointer->address()); |
| FrameSummary summary(receiver(), |
| - JSFunction::cast(function()), |
| + function(), |
| code_pointer, |
| offset, |
| IsConstructor()); |
| @@ -775,40 +773,35 @@ void JavaScriptFrame::PrintTop(Isolate* isolate, |
| JavaScriptFrame* frame = it.frame(); |
| if (frame->IsConstructor()) PrintF(file, "new "); |
| // function name |
| - Object* maybe_fun = frame->function(); |
| - if (maybe_fun->IsJSFunction()) { |
| - JSFunction* fun = JSFunction::cast(maybe_fun); |
| - fun->PrintName(); |
| - Code* js_code = frame->unchecked_code(); |
| - Address pc = frame->pc(); |
| - int code_offset = |
| - static_cast<int>(pc - js_code->instruction_start()); |
| - PrintF("+%d", code_offset); |
| - SharedFunctionInfo* shared = fun->shared(); |
| - if (print_line_number) { |
| - Code* code = Code::cast( |
| - v8::internal::Isolate::Current()->heap()->FindCodeObject(pc)); |
| - int source_pos = code->SourcePosition(pc); |
| - Object* maybe_script = shared->script(); |
| - if (maybe_script->IsScript()) { |
| - Handle<Script> script(Script::cast(maybe_script)); |
| - int line = GetScriptLineNumberSafe(script, source_pos) + 1; |
| - Object* script_name_raw = script->name(); |
| - if (script_name_raw->IsString()) { |
| - String* script_name = String::cast(script->name()); |
| - SmartArrayPointer<char> c_script_name = |
| - script_name->ToCString(DISALLOW_NULLS, |
| - ROBUST_STRING_TRAVERSAL); |
| - PrintF(file, " at %s:%d", *c_script_name, line); |
| - } else { |
| - PrintF(file, " at <unknown>:%d", line); |
| - } |
| + JSFunction* fun = frame->function(); |
| + fun->PrintName(); |
| + Code* js_code = frame->unchecked_code(); |
| + Address pc = frame->pc(); |
| + int code_offset = |
| + static_cast<int>(pc - js_code->instruction_start()); |
| + PrintF("+%d", code_offset); |
| + SharedFunctionInfo* shared = fun->shared(); |
| + if (print_line_number) { |
| + Code* code = Code::cast( |
| + v8::internal::Isolate::Current()->heap()->FindCodeObject(pc)); |
| + int source_pos = code->SourcePosition(pc); |
| + Object* maybe_script = shared->script(); |
| + if (maybe_script->IsScript()) { |
| + Handle<Script> script(Script::cast(maybe_script)); |
| + int line = GetScriptLineNumberSafe(script, source_pos) + 1; |
| + Object* script_name_raw = script->name(); |
| + if (script_name_raw->IsString()) { |
| + String* script_name = String::cast(script->name()); |
| + SmartArrayPointer<char> c_script_name = |
| + script_name->ToCString(DISALLOW_NULLS, |
| + ROBUST_STRING_TRAVERSAL); |
| + PrintF(file, " at %s:%d", *c_script_name, line); |
| } else { |
| - PrintF(file, " at <unknown>:<unknown>"); |
| + PrintF(file, " at <unknown>:%d", line); |
| } |
| + } else { |
| + PrintF(file, " at <unknown>:<unknown>"); |
|
Toon Verwaest
2013/07/11 15:23:46
Nice catch.
|
| } |
| - } else { |
| - PrintF("<unknown>"); |
| } |
| if (print_args) { |
| @@ -913,7 +906,7 @@ void FrameSummary::Print() { |
| JSFunction* OptimizedFrame::LiteralAt(FixedArray* literal_array, |
| int literal_id) { |
| if (literal_id == Translation::kSelfLiteralId) { |
| - return JSFunction::cast(function()); |
| + return function(); |
| } |
| return JSFunction::cast(literal_array->get(literal_id)); |
| @@ -1018,7 +1011,7 @@ DeoptimizationInputData* OptimizedFrame::GetDeoptimizationData( |
| int* deopt_index) { |
| ASSERT(is_optimized()); |
| - JSFunction* opt_function = JSFunction::cast(function()); |
| + JSFunction* opt_function = function(); |
| Code* code = opt_function->code(); |
| // The code object may have been replaced by lazy deoptimization. Fall |
| @@ -1132,7 +1125,7 @@ void JavaScriptFrame::Print(StringStream* accumulator, |
| int index) const { |
| HandleScope scope(isolate()); |
| Object* receiver = this->receiver(); |
| - Object* function = this->function(); |
| + JSFunction* function = this->function(); |
| accumulator->PrintSecurityTokenIfChanged(function); |
| PrintIndex(accumulator, mode, index); |
| @@ -1146,29 +1139,27 @@ void JavaScriptFrame::Print(StringStream* accumulator, |
| // or context slots. |
| Handle<ScopeInfo> scope_info(ScopeInfo::Empty(isolate())); |
| - if (function->IsJSFunction()) { |
| - Handle<SharedFunctionInfo> shared(JSFunction::cast(function)->shared()); |
| - scope_info = Handle<ScopeInfo>(shared->scope_info()); |
| - Object* script_obj = shared->script(); |
| - if (script_obj->IsScript()) { |
| - Handle<Script> script(Script::cast(script_obj)); |
| - accumulator->Add(" ["); |
| - accumulator->PrintName(script->name()); |
| - |
| - Address pc = this->pc(); |
| - if (code != NULL && code->kind() == Code::FUNCTION && |
| - pc >= code->instruction_start() && pc < code->instruction_end()) { |
| - int source_pos = code->SourcePosition(pc); |
| - int line = GetScriptLineNumberSafe(script, source_pos) + 1; |
| - accumulator->Add(":%d", line); |
| - } else { |
| - int function_start_pos = shared->start_position(); |
| - int line = GetScriptLineNumberSafe(script, function_start_pos) + 1; |
| - accumulator->Add(":~%d", line); |
| - } |
| - |
| - accumulator->Add("] "); |
| + Handle<SharedFunctionInfo> shared(function->shared()); |
| + scope_info = Handle<ScopeInfo>(shared->scope_info()); |
| + Object* script_obj = shared->script(); |
| + if (script_obj->IsScript()) { |
| + Handle<Script> script(Script::cast(script_obj)); |
| + accumulator->Add(" ["); |
| + accumulator->PrintName(script->name()); |
| + |
| + Address pc = this->pc(); |
| + if (code != NULL && code->kind() == Code::FUNCTION && |
| + pc >= code->instruction_start() && pc < code->instruction_end()) { |
| + int source_pos = code->SourcePosition(pc); |
| + int line = GetScriptLineNumberSafe(script, source_pos) + 1; |
| + accumulator->Add(":%d", line); |
| + } else { |
| + int function_start_pos = shared->start_position(); |
| + int line = GetScriptLineNumberSafe(script, function_start_pos) + 1; |
| + accumulator->Add(":~%d", line); |
| } |
| + |
| + accumulator->Add("] "); |
| } |
| accumulator->Add("(this=%o", receiver); |
| @@ -1258,7 +1249,7 @@ void JavaScriptFrame::Print(StringStream* accumulator, |
| // Print details about the function. |
| if (FLAG_max_stack_trace_source_length != 0 && code != NULL) { |
| - SharedFunctionInfo* shared = JSFunction::cast(function)->shared(); |
| + SharedFunctionInfo* shared = function->shared(); |
| accumulator->Add("--------- s o u r c e c o d e ---------\n"); |
| shared->SourceCodePrint(accumulator, FLAG_max_stack_trace_source_length); |
| accumulator->Add("\n-----------------------------------------\n"); |
| @@ -1273,10 +1264,8 @@ void ArgumentsAdaptorFrame::Print(StringStream* accumulator, |
| int index) const { |
| int actual = ComputeParametersCount(); |
| int expected = -1; |
| - Object* function = this->function(); |
| - if (function->IsJSFunction()) { |
| - expected = JSFunction::cast(function)->shared()->formal_parameter_count(); |
| - } |
| + JSFunction* function = this->function(); |
| + expected = function->shared()->formal_parameter_count(); |
| PrintIndex(accumulator, mode, index); |
| accumulator->Add("arguments adaptor frame: %d->%d", actual, expected); |