| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
| 9 #include "src/ast/ast-expression-rewriter.h" | 9 #include "src/ast/ast-expression-rewriter.h" |
| 10 #include "src/ast/ast-expression-visitor.h" | 10 #include "src/ast/ast-expression-visitor.h" |
| (...skipping 5764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5775 pair.scope); | 5775 pair.scope); |
| 5776 } | 5776 } |
| 5777 } | 5777 } |
| 5778 } | 5778 } |
| 5779 | 5779 |
| 5780 Expression* Parser::RewriteExponentiation(Expression* left, Expression* right, | 5780 Expression* Parser::RewriteExponentiation(Expression* left, Expression* right, |
| 5781 int pos) { | 5781 int pos) { |
| 5782 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); | 5782 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); |
| 5783 args->Add(left, zone()); | 5783 args->Add(left, zone()); |
| 5784 args->Add(right, zone()); | 5784 args->Add(right, zone()); |
| 5785 return factory()->NewCallRuntime(Context::MATH_POW_METHOD_INDEX, args, pos); | 5785 return factory()->NewCallRuntime(Context::MATH_POW_INDEX, args, pos); |
| 5786 } | 5786 } |
| 5787 | 5787 |
| 5788 Expression* Parser::RewriteAssignExponentiation(Expression* left, | 5788 Expression* Parser::RewriteAssignExponentiation(Expression* left, |
| 5789 Expression* right, int pos) { | 5789 Expression* right, int pos) { |
| 5790 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); | 5790 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); |
| 5791 if (left->IsVariableProxy()) { | 5791 if (left->IsVariableProxy()) { |
| 5792 VariableProxy* lhs = left->AsVariableProxy(); | 5792 VariableProxy* lhs = left->AsVariableProxy(); |
| 5793 | 5793 |
| 5794 Expression* result; | 5794 Expression* result; |
| 5795 DCHECK_NOT_NULL(lhs->raw_name()); | 5795 DCHECK_NOT_NULL(lhs->raw_name()); |
| 5796 result = | 5796 result = |
| 5797 this->ExpressionFromIdentifier(lhs->raw_name(), lhs->position(), | 5797 this->ExpressionFromIdentifier(lhs->raw_name(), lhs->position(), |
| 5798 lhs->end_position(), scope_, factory()); | 5798 lhs->end_position(), scope_, factory()); |
| 5799 args->Add(left, zone()); | 5799 args->Add(left, zone()); |
| 5800 args->Add(right, zone()); | 5800 args->Add(right, zone()); |
| 5801 Expression* call = | 5801 Expression* call = |
| 5802 factory()->NewCallRuntime(Context::MATH_POW_METHOD_INDEX, args, pos); | 5802 factory()->NewCallRuntime(Context::MATH_POW_INDEX, args, pos); |
| 5803 return factory()->NewAssignment(Token::ASSIGN, result, call, pos); | 5803 return factory()->NewAssignment(Token::ASSIGN, result, call, pos); |
| 5804 } else if (left->IsProperty()) { | 5804 } else if (left->IsProperty()) { |
| 5805 Property* prop = left->AsProperty(); | 5805 Property* prop = left->AsProperty(); |
| 5806 auto temp_obj = scope_->NewTemporary(ast_value_factory()->empty_string()); | 5806 auto temp_obj = scope_->NewTemporary(ast_value_factory()->empty_string()); |
| 5807 auto temp_key = scope_->NewTemporary(ast_value_factory()->empty_string()); | 5807 auto temp_key = scope_->NewTemporary(ast_value_factory()->empty_string()); |
| 5808 Expression* assign_obj = factory()->NewAssignment( | 5808 Expression* assign_obj = factory()->NewAssignment( |
| 5809 Token::ASSIGN, factory()->NewVariableProxy(temp_obj), prop->obj(), | 5809 Token::ASSIGN, factory()->NewVariableProxy(temp_obj), prop->obj(), |
| 5810 kNoSourcePosition); | 5810 kNoSourcePosition); |
| 5811 Expression* assign_key = factory()->NewAssignment( | 5811 Expression* assign_key = factory()->NewAssignment( |
| 5812 Token::ASSIGN, factory()->NewVariableProxy(temp_key), prop->key(), | 5812 Token::ASSIGN, factory()->NewVariableProxy(temp_key), prop->key(), |
| 5813 kNoSourcePosition); | 5813 kNoSourcePosition); |
| 5814 args->Add(factory()->NewProperty(factory()->NewVariableProxy(temp_obj), | 5814 args->Add(factory()->NewProperty(factory()->NewVariableProxy(temp_obj), |
| 5815 factory()->NewVariableProxy(temp_key), | 5815 factory()->NewVariableProxy(temp_key), |
| 5816 left->position()), | 5816 left->position()), |
| 5817 zone()); | 5817 zone()); |
| 5818 args->Add(right, zone()); | 5818 args->Add(right, zone()); |
| 5819 Expression* call = | 5819 Expression* call = |
| 5820 factory()->NewCallRuntime(Context::MATH_POW_METHOD_INDEX, args, pos); | 5820 factory()->NewCallRuntime(Context::MATH_POW_INDEX, args, pos); |
| 5821 Expression* target = factory()->NewProperty( | 5821 Expression* target = factory()->NewProperty( |
| 5822 factory()->NewVariableProxy(temp_obj), | 5822 factory()->NewVariableProxy(temp_obj), |
| 5823 factory()->NewVariableProxy(temp_key), kNoSourcePosition); | 5823 factory()->NewVariableProxy(temp_key), kNoSourcePosition); |
| 5824 Expression* assign = | 5824 Expression* assign = |
| 5825 factory()->NewAssignment(Token::ASSIGN, target, call, pos); | 5825 factory()->NewAssignment(Token::ASSIGN, target, call, pos); |
| 5826 return factory()->NewBinaryOperation( | 5826 return factory()->NewBinaryOperation( |
| 5827 Token::COMMA, assign_obj, | 5827 Token::COMMA, assign_obj, |
| 5828 factory()->NewBinaryOperation(Token::COMMA, assign_key, assign, pos), | 5828 factory()->NewBinaryOperation(Token::COMMA, assign_key, assign, pos), |
| 5829 pos); | 5829 pos); |
| 5830 } | 5830 } |
| (...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7018 try_block, target); | 7018 try_block, target); |
| 7019 final_loop = target; | 7019 final_loop = target; |
| 7020 } | 7020 } |
| 7021 | 7021 |
| 7022 return final_loop; | 7022 return final_loop; |
| 7023 } | 7023 } |
| 7024 | 7024 |
| 7025 | 7025 |
| 7026 } // namespace internal | 7026 } // namespace internal |
| 7027 } // namespace v8 | 7027 } // namespace v8 |
| OLD | NEW |