Index: src/parser.cc |
=================================================================== |
--- src/parser.cc (revision 5328) |
+++ src/parser.cc (working copy) |
@@ -214,7 +214,10 @@ |
ObjectLiteral::Property* ParseObjectLiteralGetSet(bool is_getter, bool* ok); |
Expression* ParseRegExpLiteral(bool seen_equal, bool* ok); |
- Expression* NewCompareNode(Token::Value op, Expression* x, Expression* y); |
+ Expression* NewCompareNode(Token::Value op, |
+ Expression* x, |
+ Expression* y, |
+ int position); |
// Populate the constant properties fixed array for a materialized object |
// literal. |
@@ -2817,8 +2820,9 @@ |
Expression* result = ParseAssignmentExpression(accept_IN, CHECK_OK); |
while (peek() == Token::COMMA) { |
Expect(Token::COMMA, CHECK_OK); |
+ int position = scanner().location().beg_pos; |
Expression* right = ParseAssignmentExpression(accept_IN, CHECK_OK); |
- result = NEW(BinaryOperation(Token::COMMA, result, right)); |
+ result = NEW(BinaryOperation(Token::COMMA, result, right, position)); |
} |
return result; |
} |
@@ -2921,6 +2925,7 @@ |
// prec1 >= 4 |
while (Precedence(peek(), accept_IN) == prec1) { |
Token::Value op = Next(); |
+ int position = scanner().location().beg_pos; |
Expression* y = ParseBinaryExpression(prec1 + 1, accept_IN, CHECK_OK); |
// Compute some expressions involving only number literals. |
@@ -3004,7 +3009,7 @@ |
case Token::NE_STRICT: cmp = Token::EQ_STRICT; break; |
default: break; |
} |
- x = NewCompareNode(cmp, x, y); |
+ x = NewCompareNode(cmp, x, y, position); |
if (cmp != op) { |
// The comparison was negated - add a NOT. |
x = NEW(UnaryOperation(Token::NOT, x)); |
@@ -3012,7 +3017,7 @@ |
} else { |
// We have a "normal" binary operation. |
- x = NEW(BinaryOperation(op, x, y)); |
+ x = NEW(BinaryOperation(op, x, y, position)); |
} |
} |
} |
@@ -3022,7 +3027,8 @@ |
Expression* Parser::NewCompareNode(Token::Value op, |
Expression* x, |
- Expression* y) { |
+ Expression* y, |
+ int position) { |
ASSERT(op != Token::NE && op != Token::NE_STRICT); |
if (!is_pre_parsing_ && (op == Token::EQ || op == Token::EQ_STRICT)) { |
bool is_strict = (op == Token::EQ_STRICT); |
@@ -3036,7 +3042,7 @@ |
return NEW(CompareToNull(is_strict, x)); |
} |
} |
- return NEW(CompareOperation(op, x, y)); |
+ return NEW(CompareOperation(op, x, y, position)); |
} |
@@ -3086,8 +3092,9 @@ |
Handle<String> type = Factory::invalid_lhs_in_prefix_op_symbol(); |
expression = NewThrowReferenceError(type); |
} |
+ int position = scanner().location().beg_pos; |
IncrementOperation* increment = NEW(IncrementOperation(op, expression)); |
- return NEW(CountOperation(true /* prefix */, increment)); |
+ return NEW(CountOperation(true /* prefix */, increment, position)); |
} else { |
return ParsePostfixExpression(ok); |
@@ -3110,8 +3117,9 @@ |
expression = NewThrowReferenceError(type); |
} |
Token::Value next = Next(); |
+ int position = scanner().location().beg_pos; |
IncrementOperation* increment = NEW(IncrementOperation(next, expression)); |
- expression = NEW(CountOperation(false /* postfix */, increment)); |
+ expression = NEW(CountOperation(false /* postfix */, increment, position)); |
} |
return expression; |
} |