Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(450)

Side by Side Diff: src/parsing/parser.cc

Issue 2116753002: [builtins] Unify most of the remaining Math builtins. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@2102223005
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« src/compiler/js-builtin-reducer.cc ('K') | « src/objects.h ('k') | src/type-cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698