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

Unified Diff: src/parser.cc

Issue 8540005: Revert "Add a level of indirection to exception handler addresses." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 1 month 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/parser.h ('k') | src/v8globals.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index 08395106a60d0b5ffe436252bdac060a6925bc4e..80abc63b4b204a7e687fb6748498f049bcc067fb 100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -493,9 +493,6 @@ class Parser::FunctionState BASE_EMBEDDED {
return next_materialized_literal_index_ - JSFunction::kLiteralsPrefixSize;
}
- int NextHandlerIndex() { return next_handler_index_++; }
- int handler_count() { return next_handler_index_; }
-
void SetThisPropertyAssignmentInfo(
bool only_simple_this_property_assignments,
Handle<FixedArray> this_property_assignments) {
@@ -519,9 +516,6 @@ class Parser::FunctionState BASE_EMBEDDED {
// array literals.
int next_materialized_literal_index_;
- // Used to assign a per-function index to try and catch handlers.
- int next_handler_index_;
-
// Properties count estimation.
int expected_property_count_;
@@ -541,7 +535,6 @@ Parser::FunctionState::FunctionState(Parser* parser,
Scope* scope,
Isolate* isolate)
: next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize),
- next_handler_index_(0),
expected_property_count_(0),
only_simple_this_property_assignments_(false),
this_property_assignments_(isolate->factory()->empty_fixed_array()),
@@ -596,10 +589,10 @@ Parser::Parser(Handle<Script> script,
top_scope_(NULL),
current_function_state_(NULL),
target_stack_(NULL),
+ allow_natives_syntax_(allow_natives_syntax),
extension_(extension),
pre_data_(pre_data),
fni_(NULL),
- allow_natives_syntax_(allow_natives_syntax),
stack_overflow_(false),
parenthesized_function_(false),
harmony_scoping_(false) {
@@ -676,7 +669,6 @@ FunctionLiteral* Parser::DoParseProgram(Handle<String> source,
body,
function_state.materialized_literal_count(),
function_state.expected_property_count(),
- function_state.handler_count(),
function_state.only_simple_this_property_assignments(),
function_state.this_property_assignments(),
0,
@@ -2324,12 +2316,11 @@ TryStatement* Parser::ParseTryStatement(bool* ok) {
if (catch_block != NULL && finally_block != NULL) {
// If we have both, create an inner try/catch.
ASSERT(catch_scope != NULL && catch_variable != NULL);
- int index = current_function_state_->NextHandlerIndex();
- TryCatchStatement* statement = new(zone()) TryCatchStatement(index,
- try_block,
- catch_scope,
- catch_variable,
- catch_block);
+ TryCatchStatement* statement =
+ new(zone()) TryCatchStatement(try_block,
+ catch_scope,
+ catch_variable,
+ catch_block);
statement->set_escaping_targets(try_collector.targets());
try_block = new(zone()) Block(isolate(), NULL, 1, false);
try_block->AddStatement(statement);
@@ -2340,18 +2331,14 @@ TryStatement* Parser::ParseTryStatement(bool* ok) {
if (catch_block != NULL) {
ASSERT(finally_block == NULL);
ASSERT(catch_scope != NULL && catch_variable != NULL);
- int index = current_function_state_->NextHandlerIndex();
- result = new(zone()) TryCatchStatement(index,
- try_block,
- catch_scope,
- catch_variable,
- catch_block);
+ result =
+ new(zone()) TryCatchStatement(try_block,
+ catch_scope,
+ catch_variable,
+ catch_block);
} else {
ASSERT(finally_block != NULL);
- int index = current_function_state_->NextHandlerIndex();
- result = new(zone()) TryFinallyStatement(index,
- try_block,
- finally_block);
+ result = new(zone()) TryFinallyStatement(try_block, finally_block);
// Combine the jump targets of the try block and the possible catch block.
try_collector.targets()->AddAll(*catch_collector.targets());
}
@@ -3910,10 +3897,9 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
Scope* scope = (type == FunctionLiteral::DECLARATION && !harmony_scoping_)
? NewScope(top_scope_->DeclarationScope(), FUNCTION_SCOPE)
: NewScope(top_scope_, FUNCTION_SCOPE);
- ZoneList<Statement*>* body = NULL;
+ ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(8);
int materialized_literal_count;
int expected_property_count;
- int handler_count = 0;
bool only_simple_this_property_assignments;
Handle<FixedArray> this_property_assignments;
bool has_duplicate_parameters = false;
@@ -3969,17 +3955,25 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
// NOTE: We create a proxy and resolve it here so that in the
// future we can change the AST to only refer to VariableProxies
// instead of Variables and Proxis as is the case now.
- Variable* fvar = NULL;
- Token::Value fvar_init_op = Token::INIT_CONST;
if (type == FunctionLiteral::NAMED_EXPRESSION) {
VariableMode fvar_mode;
+ Token::Value fvar_init_op;
if (harmony_scoping_) {
fvar_mode = CONST_HARMONY;
fvar_init_op = Token::INIT_CONST_HARMONY;
} else {
fvar_mode = CONST;
+ fvar_init_op = Token::INIT_CONST;
}
- fvar = top_scope_->DeclareFunctionVar(function_name, fvar_mode);
+ Variable* fvar = top_scope_->DeclareFunctionVar(function_name, fvar_mode);
+ VariableProxy* fproxy = top_scope_->NewUnresolved(function_name);
+ fproxy->BindTo(fvar);
+ body->Add(new(zone()) ExpressionStatement(
+ new(zone()) Assignment(isolate(),
+ fvar_init_op,
+ fproxy,
+ new(zone()) ThisFunction(isolate()),
+ RelocInfo::kNoPosition)));
}
// Determine if the function will be lazily compiled. The mode can only
@@ -4019,22 +4013,10 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
}
if (!is_lazily_compiled) {
- body = new(zone()) ZoneList<Statement*>(8);
- if (fvar != NULL) {
- VariableProxy* fproxy = top_scope_->NewUnresolved(function_name);
- fproxy->BindTo(fvar);
- body->Add(new(zone()) ExpressionStatement(
- new(zone()) Assignment(isolate(),
- fvar_init_op,
- fproxy,
- new(zone()) ThisFunction(isolate()),
- RelocInfo::kNoPosition)));
- }
ParseSourceElements(body, Token::RBRACE, CHECK_OK);
materialized_literal_count = function_state.materialized_literal_count();
expected_property_count = function_state.expected_property_count();
- handler_count = function_state.handler_count();
only_simple_this_property_assignments =
function_state.only_simple_this_property_assignments();
this_property_assignments = function_state.this_property_assignments();
@@ -4102,7 +4084,6 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
body,
materialized_literal_count,
expected_property_count,
- handler_count,
only_simple_this_property_assignments,
this_property_assignments,
num_parameters,
« no previous file with comments | « src/parser.h ('k') | src/v8globals.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698