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 |