From ceee9d535a9ebb8ed7688d0fb5f42a210ab5ffc1 Mon Sep 17 00:00:00 2001 From: "kmillikin@chromium.org" Date: Mon, 3 Oct 2011 11:13:20 +0000 Subject: [PATCH] Remove #include "isolate-inl.h" from v8.h. Include it only in the .cc files where it's needed. R=fschneider@chromium.org BUG= TEST= Review URL: http://codereview.chromium.org/8117001 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9506 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/bootstrapper.cc | 1 + src/code-stubs.cc | 5 +++ src/code-stubs.h | 4 +-- src/compiler.cc | 1 + src/debug.cc | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ src/debug.h | 87 ++--------------------------------------------- src/execution.cc | 1 + src/frames-inl.h | 65 ++++++++++++++++++++++++++++++++++++ src/frames.cc | 5 +++ src/frames.h | 51 ++++++++++++---------------- src/isolate-inl.h | 15 +++++++++ src/isolate.h | 14 +------- src/jsregexp.h | 3 +- src/runtime-profiler.cc | 1 + src/runtime.cc | 1 + src/v8.h | 1 - 16 files changed, 212 insertions(+), 132 deletions(-) diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 817bba5..dc722cb 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -34,6 +34,7 @@ #include "debug.h" #include "execution.h" #include "global-handles.h" +#include "isolate-inl.h" #include "macro-assembler.h" #include "natives.h" #include "objects-visiting.h" diff --git a/src/code-stubs.cc b/src/code-stubs.cc index 436e0cb..4bc2603 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -195,6 +195,11 @@ const char* CodeStub::MajorName(CodeStub::Major major_key, } +void CodeStub::PrintName(StringStream* stream) { + stream->Add("%s", MajorName(MajorKey(), false)); +} + + int ICCompareStub::MinorKey() { return OpField::encode(op_ - Token::EQ) | StateField::encode(state_); } diff --git a/src/code-stubs.h b/src/code-stubs.h index b0d2881..9d4baf4 100644 --- a/src/code-stubs.h +++ b/src/code-stubs.h @@ -202,9 +202,7 @@ class CodeStub BASE_EMBEDDED { // Returns a name for logging/debugging purposes. SmartArrayPointer GetName(); - virtual void PrintName(StringStream* stream) { - stream->Add("%s", MajorName(MajorKey(), false)); - } + virtual void PrintName(StringStream* stream); // Returns whether the code generated for this stub needs to be allocated as // a fixed (non-moveable) code object. diff --git a/src/compiler.cc b/src/compiler.cc index ba6bb42..5a86b4e 100644 --- a/src/compiler.cc +++ b/src/compiler.cc @@ -36,6 +36,7 @@ #include "full-codegen.h" #include "gdb-jit.h" #include "hydrogen.h" +#include "isolate-inl.h" #include "lithium.h" #include "liveedit.h" #include "parser.h" diff --git a/src/debug.cc b/src/debug.cc index 34ba394..fb7e337 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -40,6 +40,7 @@ #include "global-handles.h" #include "ic.h" #include "ic-inl.h" +#include "isolate-inl.h" #include "list.h" #include "messages.h" #include "natives.h" @@ -2937,6 +2938,94 @@ void Debugger::CallMessageDispatchHandler() { } +EnterDebugger::EnterDebugger() + : isolate_(Isolate::Current()), + prev_(isolate_->debug()->debugger_entry()), + it_(isolate_), + has_js_frames_(!it_.done()), + save_(isolate_) { + Debug* debug = isolate_->debug(); + ASSERT(prev_ != NULL || !debug->is_interrupt_pending(PREEMPT)); + ASSERT(prev_ != NULL || !debug->is_interrupt_pending(DEBUGBREAK)); + + // Link recursive debugger entry. + debug->set_debugger_entry(this); + + // Store the previous break id and frame id. + break_id_ = debug->break_id(); + break_frame_id_ = debug->break_frame_id(); + + // Create the new break info. If there is no JavaScript frames there is no + // break frame id. + if (has_js_frames_) { + debug->NewBreak(it_.frame()->id()); + } else { + debug->NewBreak(StackFrame::NO_ID); + } + + // Make sure that debugger is loaded and enter the debugger context. + load_failed_ = !debug->Load(); + if (!load_failed_) { + // NOTE the member variable save which saves the previous context before + // this change. + isolate_->set_context(*debug->debug_context()); + } +} + + +EnterDebugger::~EnterDebugger() { + ASSERT(Isolate::Current() == isolate_); + Debug* debug = isolate_->debug(); + + // Restore to the previous break state. + debug->SetBreak(break_frame_id_, break_id_); + + // Check for leaving the debugger. + if (prev_ == NULL) { + // Clear mirror cache when leaving the debugger. Skip this if there is a + // pending exception as clearing the mirror cache calls back into + // JavaScript. This can happen if the v8::Debug::Call is used in which + // case the exception should end up in the calling code. + if (!isolate_->has_pending_exception()) { + // Try to avoid any pending debug break breaking in the clear mirror + // cache JavaScript code. + if (isolate_->stack_guard()->IsDebugBreak()) { + debug->set_interrupts_pending(DEBUGBREAK); + isolate_->stack_guard()->Continue(DEBUGBREAK); + } + debug->ClearMirrorCache(); + } + + // Request preemption and debug break when leaving the last debugger entry + // if any of these where recorded while debugging. + if (debug->is_interrupt_pending(PREEMPT)) { + // This re-scheduling of preemption is to avoid starvation in some + // debugging scenarios. + debug->clear_interrupt_pending(PREEMPT); + isolate_->stack_guard()->Preempt(); + } + if (debug->is_interrupt_pending(DEBUGBREAK)) { + debug->clear_interrupt_pending(DEBUGBREAK); + isolate_->stack_guard()->DebugBreak(); + } + + // If there are commands in the queue when leaving the debugger request + // that these commands are processed. + if (isolate_->debugger()->HasCommands()) { + isolate_->stack_guard()->DebugCommand(); + } + + // If leaving the debugger with the debugger no longer active unload it. + if (!isolate_->debugger()->IsDebuggerActive()) { + isolate_->debugger()->UnloadDebugger(); + } + } + + // Leaving this debugger entry. + debug->set_debugger_entry(prev_); +} + + MessageImpl MessageImpl::NewEvent(DebugEvent event, bool running, Handle exec_state, diff --git a/src/debug.h b/src/debug.h index a098040..caccede 100644 --- a/src/debug.h +++ b/src/debug.h @@ -869,91 +869,8 @@ class Debugger { // some reason could not be entered FailedToEnter will return true. class EnterDebugger BASE_EMBEDDED { public: - EnterDebugger() - : isolate_(Isolate::Current()), - prev_(isolate_->debug()->debugger_entry()), - it_(isolate_), - has_js_frames_(!it_.done()), - save_(isolate_) { - Debug* debug = isolate_->debug(); - ASSERT(prev_ != NULL || !debug->is_interrupt_pending(PREEMPT)); - ASSERT(prev_ != NULL || !debug->is_interrupt_pending(DEBUGBREAK)); - - // Link recursive debugger entry. - debug->set_debugger_entry(this); - - // Store the previous break id and frame id. - break_id_ = debug->break_id(); - break_frame_id_ = debug->break_frame_id(); - - // Create the new break info. If there is no JavaScript frames there is no - // break frame id. - if (has_js_frames_) { - debug->NewBreak(it_.frame()->id()); - } else { - debug->NewBreak(StackFrame::NO_ID); - } - - // Make sure that debugger is loaded and enter the debugger context. - load_failed_ = !debug->Load(); - if (!load_failed_) { - // NOTE the member variable save which saves the previous context before - // this change. - isolate_->set_context(*debug->debug_context()); - } - } - - ~EnterDebugger() { - ASSERT(Isolate::Current() == isolate_); - Debug* debug = isolate_->debug(); - - // Restore to the previous break state. - debug->SetBreak(break_frame_id_, break_id_); - - // Check for leaving the debugger. - if (prev_ == NULL) { - // Clear mirror cache when leaving the debugger. Skip this if there is a - // pending exception as clearing the mirror cache calls back into - // JavaScript. This can happen if the v8::Debug::Call is used in which - // case the exception should end up in the calling code. - if (!isolate_->has_pending_exception()) { - // Try to avoid any pending debug break breaking in the clear mirror - // cache JavaScript code. - if (isolate_->stack_guard()->IsDebugBreak()) { - debug->set_interrupts_pending(DEBUGBREAK); - isolate_->stack_guard()->Continue(DEBUGBREAK); - } - debug->ClearMirrorCache(); - } - - // Request preemption and debug break when leaving the last debugger entry - // if any of these where recorded while debugging. - if (debug->is_interrupt_pending(PREEMPT)) { - // This re-scheduling of preemption is to avoid starvation in some - // debugging scenarios. - debug->clear_interrupt_pending(PREEMPT); - isolate_->stack_guard()->Preempt(); - } - if (debug->is_interrupt_pending(DEBUGBREAK)) { - debug->clear_interrupt_pending(DEBUGBREAK); - isolate_->stack_guard()->DebugBreak(); - } - - // If there are commands in the queue when leaving the debugger request - // that these commands are processed. - if (isolate_->debugger()->HasCommands()) { - isolate_->stack_guard()->DebugCommand(); - } - - // If leaving the debugger with the debugger no longer active unload it. - if (!isolate_->debugger()->IsDebuggerActive()) { - isolate_->debugger()->UnloadDebugger(); - } - } - - // Leaving this debugger entry. - debug->set_debugger_entry(prev_); - } + EnterDebugger(); + ~EnterDebugger(); // Check whether the debugger could be entered. inline bool FailedToEnter() { return load_failed_; } diff --git a/src/execution.cc b/src/execution.cc index c1cb043..2021c0f 100644 --- a/src/execution.cc +++ b/src/execution.cc @@ -33,6 +33,7 @@ #include "bootstrapper.h" #include "codegen.h" #include "debug.h" +#include "isolate-inl.h" #include "runtime-profiler.h" #include "simulator.h" #include "v8threads.h" diff --git a/src/frames-inl.h b/src/frames-inl.h index c7d71ec..4b8a4be 100644 --- a/src/frames-inl.h +++ b/src/frames-inl.h @@ -77,6 +77,21 @@ inline StackHandler* StackHandler::FromAddress(Address address) { } +inline bool StackHandler::is_entry() const { + return state() == ENTRY; +} + + +inline bool StackHandler::is_try_catch() const { + return state() == TRY_CATCH; +} + + +inline bool StackHandler::is_try_finally() const { + return state() == TRY_FINALLY; +} + + inline StackHandler::State StackHandler::state() const { const int offset = StackHandlerConstants::kStateOffset; return static_cast(Memory::int_at(address() + offset)); @@ -105,11 +120,36 @@ inline StackHandler* StackFrame::top_handler() const { } +inline Code* StackFrame::LookupCode() const { + return GetContainingCode(isolate(), pc()); +} + + inline Code* StackFrame::GetContainingCode(Isolate* isolate, Address pc) { return isolate->inner_pointer_to_code_cache()->GetCacheEntry(pc)->code; } +inline EntryFrame::EntryFrame(StackFrameIterator* iterator) + : StackFrame(iterator) { +} + + +inline EntryConstructFrame::EntryConstructFrame(StackFrameIterator* iterator) + : EntryFrame(iterator) { +} + + +inline ExitFrame::ExitFrame(StackFrameIterator* iterator) + : StackFrame(iterator) { +} + + +inline StandardFrame::StandardFrame(StackFrameIterator* iterator) + : StackFrame(iterator) { +} + + inline Object* StandardFrame::GetExpression(int index) const { return Memory::Object_at(GetExpressionAddress(index)); } @@ -155,6 +195,11 @@ inline bool StandardFrame::IsConstructFrame(Address fp) { } +inline JavaScriptFrame::JavaScriptFrame(StackFrameIterator* iterator) + : StandardFrame(iterator) { +} + + Address JavaScriptFrame::GetParameterSlot(int index) const { int param_count = ComputeParametersCount(); ASSERT(-1 <= index && index < param_count); @@ -190,6 +235,26 @@ inline Object* JavaScriptFrame::function() const { } +inline OptimizedFrame::OptimizedFrame(StackFrameIterator* iterator) + : JavaScriptFrame(iterator) { +} + + +inline ArgumentsAdaptorFrame::ArgumentsAdaptorFrame( + StackFrameIterator* iterator) : JavaScriptFrame(iterator) { +} + + +inline InternalFrame::InternalFrame(StackFrameIterator* iterator) + : StandardFrame(iterator) { +} + + +inline ConstructFrame::ConstructFrame(StackFrameIterator* iterator) + : InternalFrame(iterator) { +} + + template inline JavaScriptFrameIteratorTemp::JavaScriptFrameIteratorTemp( Isolate* isolate) diff --git a/src/frames.cc b/src/frames.cc index dbc45fc..412a59c 100644 --- a/src/frames.cc +++ b/src/frames.cc @@ -888,6 +888,11 @@ void OptimizedFrame::GetFunctions(List* functions) { } +int ArgumentsAdaptorFrame::GetNumberOfIncomingArguments() const { + return Smi::cast(GetExpression(0))->value(); +} + + Address ArgumentsAdaptorFrame::GetCallerStackPointer() const { return fp() + StandardFrameConstants::kCallerSPOffset; } diff --git a/src/frames.h b/src/frames.h index 8024faf..1d65826 100644 --- a/src/frames.h +++ b/src/frames.h @@ -106,9 +106,9 @@ class StackHandler BASE_EMBEDDED { static inline StackHandler* FromAddress(Address address); // Testers - bool is_entry() { return state() == ENTRY; } - bool is_try_catch() { return state() == TRY_CATCH; } - bool is_try_finally() { return state() == TRY_FINALLY; } + inline bool is_entry() const; + inline bool is_try_catch() const; + inline bool is_try_finally() const; private: // Accessors. @@ -218,9 +218,7 @@ class StackFrame BASE_EMBEDDED { virtual Code* unchecked_code() const = 0; // Get the code associated with this frame. - Code* LookupCode() const { - return GetContainingCode(isolate(), pc()); - } + inline Code* LookupCode() const; // Get the code object that contains the given pc. static inline Code* GetContainingCode(Isolate* isolate, Address pc); @@ -302,7 +300,7 @@ class EntryFrame: public StackFrame { virtual void SetCallerFp(Address caller_fp); protected: - explicit EntryFrame(StackFrameIterator* iterator) : StackFrame(iterator) { } + inline explicit EntryFrame(StackFrameIterator* iterator); // The caller stack pointer for entry frames is always zero. The // real information about the caller frame is available through the @@ -329,8 +327,7 @@ class EntryConstructFrame: public EntryFrame { } protected: - explicit EntryConstructFrame(StackFrameIterator* iterator) - : EntryFrame(iterator) { } + inline explicit EntryConstructFrame(StackFrameIterator* iterator); private: friend class StackFrameIterator; @@ -364,7 +361,7 @@ class ExitFrame: public StackFrame { static void FillState(Address fp, Address sp, State* state); protected: - explicit ExitFrame(StackFrameIterator* iterator) : StackFrame(iterator) { } + inline explicit ExitFrame(StackFrameIterator* iterator); virtual Address GetCallerStackPointer() const; @@ -397,8 +394,7 @@ class StandardFrame: public StackFrame { } protected: - explicit StandardFrame(StackFrameIterator* iterator) - : StackFrame(iterator) { } + inline explicit StandardFrame(StackFrameIterator* iterator); virtual void ComputeCallerState(State* state) const; @@ -517,8 +513,7 @@ class JavaScriptFrame: public StandardFrame { } protected: - explicit JavaScriptFrame(StackFrameIterator* iterator) - : StandardFrame(iterator) { } + inline explicit JavaScriptFrame(StackFrameIterator* iterator); virtual Address GetCallerStackPointer() const; @@ -555,8 +550,7 @@ class OptimizedFrame : public JavaScriptFrame { DeoptimizationInputData* GetDeoptimizationData(int* deopt_index); protected: - explicit OptimizedFrame(StackFrameIterator* iterator) - : JavaScriptFrame(iterator) { } + inline explicit OptimizedFrame(StackFrameIterator* iterator); private: friend class StackFrameIterator; @@ -584,12 +578,9 @@ class ArgumentsAdaptorFrame: public JavaScriptFrame { int index) const; protected: - explicit ArgumentsAdaptorFrame(StackFrameIterator* iterator) - : JavaScriptFrame(iterator) { } + inline explicit ArgumentsAdaptorFrame(StackFrameIterator* iterator); - virtual int GetNumberOfIncomingArguments() const { - return Smi::cast(GetExpression(0))->value(); - } + virtual int GetNumberOfIncomingArguments() const; virtual Address GetCallerStackPointer() const; @@ -614,8 +605,7 @@ class InternalFrame: public StandardFrame { } protected: - explicit InternalFrame(StackFrameIterator* iterator) - : StandardFrame(iterator) { } + inline explicit InternalFrame(StackFrameIterator* iterator); virtual Address GetCallerStackPointer() const; @@ -636,8 +626,7 @@ class ConstructFrame: public InternalFrame { } protected: - explicit ConstructFrame(StackFrameIterator* iterator) - : InternalFrame(iterator) { } + inline explicit ConstructFrame(StackFrameIterator* iterator); private: friend class StackFrameIterator; @@ -718,15 +707,19 @@ class JavaScriptFrameIteratorTemp BASE_EMBEDDED { inline JavaScriptFrameIteratorTemp(Isolate* isolate, StackFrame::Id id); - JavaScriptFrameIteratorTemp(Address fp, Address sp, - Address low_bound, Address high_bound) : + JavaScriptFrameIteratorTemp(Address fp, + Address sp, + Address low_bound, + Address high_bound) : iterator_(fp, sp, low_bound, high_bound) { if (!done()) Advance(); } JavaScriptFrameIteratorTemp(Isolate* isolate, - Address fp, Address sp, - Address low_bound, Address high_bound) : + Address fp, + Address sp, + Address low_bound, + Address high_bound) : iterator_(isolate, fp, sp, low_bound, high_bound) { if (!done()) Advance(); } diff --git a/src/isolate-inl.h b/src/isolate-inl.h index aa6b537..d6e6131 100644 --- a/src/isolate-inl.h +++ b/src/isolate-inl.h @@ -36,6 +36,21 @@ namespace v8 { namespace internal { +SaveContext::SaveContext(Isolate* isolate) : prev_(isolate->save_context()) { + if (isolate->context() != NULL) { + context_ = Handle(isolate->context()); +#if __GNUC_VERSION__ >= 40100 && __GNUC_VERSION__ < 40300 + dummy_ = Handle(isolate->context()); +#endif + } + isolate->set_save_context(this); + + // If there is no JS frame under the current C frame, use the value 0. + JavaScriptFrameIterator it(isolate); + js_sp_ = it.done() ? 0 : it.frame()->sp(); +} + + bool Isolate::DebuggerHasBreakPoints() { #ifdef ENABLE_DEBUGGER_SUPPORT return debug()->has_break_points(); diff --git a/src/isolate.h b/src/isolate.h index ec4e8fa..01ab04e 100644 --- a/src/isolate.h +++ b/src/isolate.h @@ -1219,19 +1219,7 @@ class Isolate { // versions of GCC. See V8 issue 122 for details. class SaveContext BASE_EMBEDDED { public: - explicit SaveContext(Isolate* isolate) : prev_(isolate->save_context()) { - if (isolate->context() != NULL) { - context_ = Handle(isolate->context()); -#if __GNUC_VERSION__ >= 40100 && __GNUC_VERSION__ < 40300 - dummy_ = Handle(isolate->context()); -#endif - } - isolate->set_save_context(this); - - // If there is no JS frame under the current C frame, use the value 0. - JavaScriptFrameIterator it(isolate); - js_sp_ = it.done() ? 0 : it.frame()->sp(); - } + inline explicit SaveContext(Isolate* isolate); ~SaveContext() { if (context_.is_null()) { diff --git a/src/jsregexp.h b/src/jsregexp.h index 54297a4..5281487 100644 --- a/src/jsregexp.h +++ b/src/jsregexp.h @@ -1,4 +1,4 @@ -// Copyright 2006-2008 the V8 project authors. All rights reserved. +// Copyright 2011 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -29,6 +29,7 @@ #define V8_JSREGEXP_H_ #include "allocation.h" +#include "assembler.h" #include "zone-inl.h" namespace v8 { diff --git a/src/runtime-profiler.cc b/src/runtime-profiler.cc index 7454ff4..520dd39 100644 --- a/src/runtime-profiler.cc +++ b/src/runtime-profiler.cc @@ -35,6 +35,7 @@ #include "deoptimizer.h" #include "execution.h" #include "global-handles.h" +#include "isolate-inl.h" #include "mark-compact.h" #include "platform.h" #include "scopeinfo.h" diff --git a/src/runtime.cc b/src/runtime.cc index a4f6718..89abf38 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -42,6 +42,7 @@ #include "deoptimizer.h" #include "execution.h" #include "global-handles.h" +#include "isolate-inl.h" #include "jsregexp.h" #include "json-parser.h" #include "liveedit.h" diff --git a/src/v8.h b/src/v8.h index 4aa471f..2e039d4 100644 --- a/src/v8.h +++ b/src/v8.h @@ -65,7 +65,6 @@ #include "log-inl.h" #include "cpu-profiler-inl.h" #include "handles-inl.h" -#include "isolate-inl.h" namespace v8 { namespace internal { -- 2.7.4