Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(448)

Unified Diff: src/full-codegen.h

Issue 1010883002: Switch full-codegen from StackHandlers to handler table. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_cleanup-isolate-dead-code
Patch Set: Fix debugger-pause-on-promise-rejection. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/frames-inl.h ('k') | src/full-codegen.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/full-codegen.h
diff --git a/src/full-codegen.h b/src/full-codegen.h
index 217f9e9bc986013521fae7c74f4de986236114e6..3420ca9b9b4cf4d0397539e982100db4b44f9e3d 100644
--- a/src/full-codegen.h
+++ b/src/full-codegen.h
@@ -156,6 +156,11 @@ class FullCodeGenerator: public AstVisitor {
return previous_;
}
+ // Like the Exit() method above, but limited to accumulating stack depth.
+ virtual NestedStatement* AccumulateDepth(int* stack_depth) {
+ return previous_;
+ }
+
protected:
MacroAssembler* masm() { return codegen_->masm(); }
@@ -225,22 +230,36 @@ class FullCodeGenerator: public AstVisitor {
// The try block of a try/catch statement.
class TryCatch : public NestedStatement {
public:
- explicit TryCatch(FullCodeGenerator* codegen) : NestedStatement(codegen) {
- }
+ static const int kElementCount = TryBlockConstant::kElementCount;
+
+ explicit TryCatch(FullCodeGenerator* codegen) : NestedStatement(codegen) {}
virtual ~TryCatch() {}
- virtual NestedStatement* Exit(int* stack_depth, int* context_length);
+ virtual NestedStatement* Exit(int* stack_depth, int* context_length) {
+ *stack_depth += kElementCount;
+ return previous_;
+ }
+ virtual NestedStatement* AccumulateDepth(int* stack_depth) {
+ *stack_depth += kElementCount;
+ return previous_;
+ }
};
// The try block of a try/finally statement.
class TryFinally : public NestedStatement {
public:
+ static const int kElementCount = TryBlockConstant::kElementCount;
+
TryFinally(FullCodeGenerator* codegen, Label* finally_entry)
: NestedStatement(codegen), finally_entry_(finally_entry) {
}
virtual ~TryFinally() {}
virtual NestedStatement* Exit(int* stack_depth, int* context_length);
+ virtual NestedStatement* AccumulateDepth(int* stack_depth) {
+ *stack_depth += kElementCount;
+ return previous_;
+ }
private:
Label* finally_entry_;
@@ -251,13 +270,17 @@ class FullCodeGenerator: public AstVisitor {
public:
static const int kElementCount = 3;
- explicit Finally(FullCodeGenerator* codegen) : NestedStatement(codegen) { }
+ explicit Finally(FullCodeGenerator* codegen) : NestedStatement(codegen) {}
virtual ~Finally() {}
virtual NestedStatement* Exit(int* stack_depth, int* context_length) {
*stack_depth += kElementCount;
return previous_;
}
+ virtual NestedStatement* AccumulateDepth(int* stack_depth) {
+ *stack_depth += kElementCount;
+ return previous_;
+ }
};
// The body of a for/in loop.
@@ -274,6 +297,10 @@ class FullCodeGenerator: public AstVisitor {
*stack_depth += kElementCount;
return previous_;
}
+ virtual NestedStatement* AccumulateDepth(int* stack_depth) {
+ *stack_depth += kElementCount;
+ return previous_;
+ }
};
@@ -675,6 +702,8 @@ class FullCodeGenerator: public AstVisitor {
void SetSourcePosition(int pos);
// Non-local control flow support.
+ void EnterTryBlock(int handler_index, Label* handler);
+ void ExitTryBlock(int handler_index);
void EnterFinallyBlock();
void ExitFinallyBlock();
@@ -730,7 +759,7 @@ class FullCodeGenerator: public AstVisitor {
void PopulateDeoptimizationData(Handle<Code> code);
void PopulateTypeFeedbackInfo(Handle<Code> code);
- Handle<FixedArray> handler_table() { return handler_table_; }
+ Handle<HandlerTable> handler_table() { return handler_table_; }
struct BailoutEntry {
BailoutId id;
@@ -948,7 +977,7 @@ class FullCodeGenerator: public AstVisitor {
ZoneList<BailoutEntry> bailout_entries_;
ZoneList<BackEdgeEntry> back_edges_;
int ic_total_count_;
- Handle<FixedArray> handler_table_;
+ Handle<HandlerTable> handler_table_;
Handle<Cell> profiling_counter_;
bool generate_debug_code_;
« no previous file with comments | « src/frames-inl.h ('k') | src/full-codegen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698