| Index: src/parser.cc
|
| ===================================================================
|
| --- src/parser.cc (revision 10404)
|
| +++ src/parser.cc (working copy)
|
| @@ -1186,8 +1186,8 @@
|
|
|
| if (directive_prologue) {
|
| // A shot at a directive.
|
| - ExpressionStatement *e_stat;
|
| - Literal *literal;
|
| + ExpressionStatement* e_stat;
|
| + Literal* literal;
|
| // Still processing directive prologue?
|
| if ((e_stat = stat->AsExpressionStatement()) != NULL &&
|
| (literal = e_stat->expression()->AsLiteral()) != NULL &&
|
| @@ -1562,7 +1562,7 @@
|
|
|
| // TODO(1240846): It's weird that native function declarations are
|
| // introduced dynamically when we meet their declarations, whereas
|
| - // other functions are setup when entering the surrounding scope.
|
| + // other functions are set up when entering the surrounding scope.
|
| SharedFunctionInfoLiteral* lit =
|
| new(zone()) SharedFunctionInfoLiteral(isolate(), shared);
|
| VariableProxy* var = Declare(name, VAR, NULL, true, CHECK_OK);
|
| @@ -3003,7 +3003,19 @@
|
| }
|
|
|
| case Token::LPAREN: {
|
| - int pos = scanner().location().beg_pos;
|
| + int pos;
|
| + if (scanner().current_token() == Token::IDENTIFIER) {
|
| + // For call of an identifier we want to report position of
|
| + // the identifier as position of the call in the stack trace.
|
| + pos = scanner().location().beg_pos;
|
| + } else {
|
| + // For other kinds of calls we record position of the parenthesis as
|
| + // position of the call. Note that this is extremely important for
|
| + // expressions of the form function(){...}() for which call position
|
| + // should not point to the closing brace otherwise it will intersect
|
| + // with positions recorded for function literal and confuse debugger.
|
| + pos = scanner().peek_location().beg_pos;
|
| + }
|
| ZoneList<Expression*>* args = ParseArguments(CHECK_OK);
|
|
|
| // Keep track of eval() calls since they disable all local variable
|
| @@ -3595,7 +3607,7 @@
|
|
|
| ASSERT(property != NULL);
|
|
|
| - Literal *lit = property->key();
|
| + Literal* lit = property->key();
|
| Handle<Object> handle = lit->handle();
|
|
|
| uint32_t hash;
|
|
|