| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 5020dfa82d07bdd6e12384b5d8415c46ae7e7e70..566565992892d17e0aa605d066daa32552f6bfbe 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -596,6 +596,7 @@ Parser::Parser(Handle<Script> script,
|
| pre_data_(pre_data),
|
| fni_(NULL),
|
| stack_overflow_(false) {
|
| + AstNode::ResetIds();
|
| }
|
|
|
|
|
| @@ -706,6 +707,9 @@ FunctionLiteral* Parser::ParseLazy(Handle<SharedFunctionInfo> info) {
|
| if (result == NULL) {
|
| Isolate::Current()->StackOverflow();
|
| zone_scope.DeleteOnExit();
|
| + } else {
|
| + Handle<String> inferred_name(info->inferred_name());
|
| + result->set_inferred_name(inferred_name);
|
| }
|
| return result;
|
| }
|
| @@ -1795,7 +1799,7 @@ CaseClause* Parser::ParseCaseClause(bool* default_seen_ptr, bool* ok) {
|
| *default_seen_ptr = true;
|
| }
|
| Expect(Token::COLON, CHECK_OK);
|
| -
|
| + int pos = scanner().location().beg_pos;
|
| ZoneList<Statement*>* statements = new ZoneList<Statement*>(5);
|
| while (peek() != Token::CASE &&
|
| peek() != Token::DEFAULT &&
|
| @@ -1804,7 +1808,7 @@ CaseClause* Parser::ParseCaseClause(bool* default_seen_ptr, bool* ok) {
|
| statements->Add(stat);
|
| }
|
|
|
| - return new CaseClause(label, statements);
|
| + return new CaseClause(label, statements, pos);
|
| }
|
|
|
|
|
| @@ -1876,7 +1880,7 @@ TryStatement* Parser::ParseTryStatement(bool* ok) {
|
| }
|
|
|
| Block* catch_block = NULL;
|
| - VariableProxy* catch_var = NULL;
|
| + Variable* catch_var = NULL;
|
| Block* finally_block = NULL;
|
|
|
| Token::Value tok = peek();
|
| @@ -1906,7 +1910,8 @@ TryStatement* Parser::ParseTryStatement(bool* ok) {
|
| // executing the finally block.
|
| catch_var = top_scope_->NewTemporary(FACTORY->catch_var_symbol());
|
| Literal* name_literal = new Literal(name);
|
| - Expression* obj = new CatchExtensionObject(name_literal, catch_var);
|
| + VariableProxy* catch_var_use = new VariableProxy(catch_var);
|
| + Expression* obj = new CatchExtensionObject(name_literal, catch_var_use);
|
| { Target target(&this->target_stack_, &catch_collector);
|
| catch_block = WithHelper(obj, NULL, true, CHECK_OK);
|
| }
|
| @@ -1930,8 +1935,9 @@ TryStatement* Parser::ParseTryStatement(bool* ok) {
|
| // 'try { try { } catch { } } finally { }'
|
|
|
| if (catch_block != NULL && finally_block != NULL) {
|
| + VariableProxy* catch_var_defn = new VariableProxy(catch_var);
|
| TryCatchStatement* statement =
|
| - new TryCatchStatement(try_block, catch_var, catch_block);
|
| + new TryCatchStatement(try_block, catch_var_defn, catch_block);
|
| statement->set_escaping_targets(collector.targets());
|
| try_block = new Block(NULL, 1, false);
|
| try_block->AddStatement(statement);
|
| @@ -1941,7 +1947,8 @@ TryStatement* Parser::ParseTryStatement(bool* ok) {
|
| TryStatement* result = NULL;
|
| if (catch_block != NULL) {
|
| ASSERT(finally_block == NULL);
|
| - result = new TryCatchStatement(try_block, catch_var, catch_block);
|
| + VariableProxy* catch_var_defn = new VariableProxy(catch_var);
|
| + result = new TryCatchStatement(try_block, catch_var_defn, catch_block);
|
| result->set_escaping_targets(collector.targets());
|
| } else {
|
| ASSERT(finally_block != NULL);
|
| @@ -2815,6 +2822,7 @@ bool Parser::IsBoilerplateProperty(ObjectLiteral::Property* property) {
|
|
|
|
|
| bool CompileTimeValue::IsCompileTimeValue(Expression* expression) {
|
| + if (expression->AsLiteral() != NULL) return true;
|
| MaterializedLiteral* lit = expression->AsMaterializedLiteral();
|
| return lit != NULL && lit->is_simple();
|
| }
|
|
|