OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 2596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2607 // operations. (We could combine the two and get rid of this | 2607 // operations. (We could combine the two and get rid of this |
2608 // code and AST node eventually.) | 2608 // code and AST node eventually.) |
2609 if (Token::IsCompareOp(op)) { | 2609 if (Token::IsCompareOp(op)) { |
2610 // We have a comparison. | 2610 // We have a comparison. |
2611 Token::Value cmp = op; | 2611 Token::Value cmp = op; |
2612 switch (op) { | 2612 switch (op) { |
2613 case Token::NE: cmp = Token::EQ; break; | 2613 case Token::NE: cmp = Token::EQ; break; |
2614 case Token::NE_STRICT: cmp = Token::EQ_STRICT; break; | 2614 case Token::NE_STRICT: cmp = Token::EQ_STRICT; break; |
2615 default: break; | 2615 default: break; |
2616 } | 2616 } |
2617 x = NewCompareNode(cmp, x, y, position); | 2617 x = new(zone()) CompareOperation(isolate(), cmp, x, y, position); |
2618 if (cmp != op) { | 2618 if (cmp != op) { |
2619 // The comparison was negated - add a NOT. | 2619 // The comparison was negated - add a NOT. |
2620 x = new(zone()) UnaryOperation(isolate(), Token::NOT, x, position); | 2620 x = new(zone()) UnaryOperation(isolate(), Token::NOT, x, position); |
2621 } | 2621 } |
2622 | 2622 |
2623 } else { | 2623 } else { |
2624 // We have a "normal" binary operation. | 2624 // We have a "normal" binary operation. |
2625 x = new(zone()) BinaryOperation(isolate(), op, x, y, position); | 2625 x = new(zone()) BinaryOperation(isolate(), op, x, y, position); |
2626 } | 2626 } |
2627 } | 2627 } |
2628 } | 2628 } |
2629 return x; | 2629 return x; |
2630 } | 2630 } |
2631 | 2631 |
2632 | 2632 |
2633 Expression* Parser::NewCompareNode(Token::Value op, | |
2634 Expression* x, | |
2635 Expression* y, | |
2636 int position) { | |
2637 ASSERT(op != Token::NE && op != Token::NE_STRICT); | |
2638 if (op == Token::EQ || op == Token::EQ_STRICT) { | |
2639 bool is_strict = (op == Token::EQ_STRICT); | |
2640 Literal* x_literal = x->AsLiteral(); | |
2641 if (x_literal != NULL && x_literal->IsNull()) { | |
2642 return new(zone()) CompareToNull(isolate(), is_strict, y); | |
2643 } | |
2644 | |
2645 Literal* y_literal = y->AsLiteral(); | |
2646 if (y_literal != NULL && y_literal->IsNull()) { | |
2647 return new(zone()) CompareToNull(isolate(), is_strict, x); | |
2648 } | |
2649 } | |
2650 return new(zone()) CompareOperation(isolate(), op, x, y, position); | |
2651 } | |
2652 | |
2653 | |
2654 Expression* Parser::ParseUnaryExpression(bool* ok) { | 2633 Expression* Parser::ParseUnaryExpression(bool* ok) { |
2655 // UnaryExpression :: | 2634 // UnaryExpression :: |
2656 // PostfixExpression | 2635 // PostfixExpression |
2657 // 'delete' UnaryExpression | 2636 // 'delete' UnaryExpression |
2658 // 'void' UnaryExpression | 2637 // 'void' UnaryExpression |
2659 // 'typeof' UnaryExpression | 2638 // 'typeof' UnaryExpression |
2660 // '++' UnaryExpression | 2639 // '++' UnaryExpression |
2661 // '--' UnaryExpression | 2640 // '--' UnaryExpression |
2662 // '+' UnaryExpression | 2641 // '+' UnaryExpression |
2663 // '-' UnaryExpression | 2642 // '-' UnaryExpression |
(...skipping 2559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5223 result = parser.ParseProgram(source, | 5202 result = parser.ParseProgram(source, |
5224 info->is_global(), | 5203 info->is_global(), |
5225 info->StrictMode()); | 5204 info->StrictMode()); |
5226 } | 5205 } |
5227 } | 5206 } |
5228 info->SetFunction(result); | 5207 info->SetFunction(result); |
5229 return (result != NULL); | 5208 return (result != NULL); |
5230 } | 5209 } |
5231 | 5210 |
5232 } } // namespace v8::internal | 5211 } } // namespace v8::internal |
OLD | NEW |