Index: src/deoptimizer.h |
diff --git a/src/deoptimizer.h b/src/deoptimizer.h |
index 9265905366bb6e3921f0f803d92e83c6e5175a07..5e998d055d2edb66fe4964352b9a3e414d598f30 100644 |
--- a/src/deoptimizer.h |
+++ b/src/deoptimizer.h |
@@ -717,6 +717,44 @@ class DeoptimizedFrameInfo : public Malloced { |
friend class Deoptimizer; |
}; |
+ |
+ |
+// Scoped version of DeoptimizedFrameInfo. |
+class ScopedDeoptimizedFrameInfo { |
Sven Panne
2011/07/12 13:40:32
This class looks a bits strange: If the frame pass
Søren Thygesen Gjesse
2011/07/12 14:20:36
That is true, but it was the simplest way to have
|
+ public: |
+ ScopedDeoptimizedFrameInfo(JavaScriptFrame* frame, |
+ int inlined_frame_index, |
+ Isolate* isolate) |
+ : deoptimized_frame_(NULL), isolate_(isolate) { |
+ // Calculate the deoptimized frame. |
+ if (frame->is_optimized()) { |
+ deoptimized_frame_ = Deoptimizer::DebuggerInspectableFrame( |
+ frame, inlined_frame_index, isolate); |
+ } |
+ } |
+ |
+ ~ScopedDeoptimizedFrameInfo() { |
+ // Get rid of the calculated deoptimized frame if any. |
+ if (deoptimized_frame_ != NULL) { |
+ Deoptimizer::DeleteDebuggerInspectableFrame(deoptimized_frame_, |
+ isolate_); |
+ } |
+ } |
+ |
+ int parameters_count() { return deoptimized_frame_->parameters_count(); } |
+ int expression_count() { return deoptimized_frame_->expression_count(); } |
+ JSFunction* GetFunction() { return deoptimized_frame_->GetFunction(); } |
+ Object* GetParameter(int index) { |
+ return deoptimized_frame_->GetParameter(index); |
+ } |
+ Object* GetExpression(int index) { |
+ return deoptimized_frame_->GetExpression(index); |
+ } |
+ |
+ private: |
+ DeoptimizedFrameInfo* deoptimized_frame_; |
+ Isolate* isolate_; |
+}; |
#endif |
} } // namespace v8::internal |