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

Side by Side Diff: src/ast/ast.h

Issue 2562443003: [parsing] Fix maybe-assigned flag in some cases. (Closed)
Patch Set: rebase again??? Created 4 years 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
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifndef V8_AST_AST_H_ 5 #ifndef V8_AST_AST_H_
6 #define V8_AST_AST_H_ 6 #define V8_AST_AST_H_
7 7
8 #include "src/ast/ast-types.h" 8 #include "src/ast/ast-types.h"
9 #include "src/ast/ast-value-factory.h" 9 #include "src/ast/ast-value-factory.h"
10 #include "src/ast/modules.h" 10 #include "src/ast/modules.h"
(...skipping 1616 matching lines...) Expand 10 before | Expand all | Expand 10 after
1627 void set_var(Variable* v) { 1627 void set_var(Variable* v) {
1628 DCHECK(!is_resolved()); 1628 DCHECK(!is_resolved());
1629 DCHECK_NOT_NULL(v); 1629 DCHECK_NOT_NULL(v);
1630 var_ = v; 1630 var_ = v;
1631 } 1631 }
1632 1632
1633 bool is_this() const { return IsThisField::decode(bit_field_); } 1633 bool is_this() const { return IsThisField::decode(bit_field_); }
1634 1634
1635 bool is_assigned() const { return IsAssignedField::decode(bit_field_); } 1635 bool is_assigned() const { return IsAssignedField::decode(bit_field_); }
1636 void set_is_assigned() { 1636 void set_is_assigned() {
1637 DCHECK(!is_resolved());
1638 bit_field_ = IsAssignedField::update(bit_field_, true); 1637 bit_field_ = IsAssignedField::update(bit_field_, true);
1638 if (is_resolved()) {
1639 var()->set_maybe_assigned();
1640 }
1639 } 1641 }
1640 1642
1641 bool is_resolved() const { return IsResolvedField::decode(bit_field_); } 1643 bool is_resolved() const { return IsResolvedField::decode(bit_field_); }
1642 void set_is_resolved() { 1644 void set_is_resolved() {
1643 bit_field_ = IsResolvedField::update(bit_field_, true); 1645 bit_field_ = IsResolvedField::update(bit_field_, true);
1644 } 1646 }
1645 1647
1646 bool is_new_target() const { return IsNewTargetField::decode(bit_field_); } 1648 bool is_new_target() const { return IsNewTargetField::decode(bit_field_); }
1647 void set_is_new_target() { 1649 void set_is_new_target() {
1648 bit_field_ = IsNewTargetField::update(bit_field_, true); 1650 bit_field_ = IsNewTargetField::update(bit_field_, true);
(...skipping 1799 matching lines...) Expand 10 before | Expand all | Expand 10 after
3448 RewritableExpression* NewRewritableExpression(Expression* expression) { 3450 RewritableExpression* NewRewritableExpression(Expression* expression) {
3449 DCHECK_NOT_NULL(expression); 3451 DCHECK_NOT_NULL(expression);
3450 return new (zone_) RewritableExpression(expression); 3452 return new (zone_) RewritableExpression(expression);
3451 } 3453 }
3452 3454
3453 Assignment* NewAssignment(Token::Value op, 3455 Assignment* NewAssignment(Token::Value op,
3454 Expression* target, 3456 Expression* target,
3455 Expression* value, 3457 Expression* value,
3456 int pos) { 3458 int pos) {
3457 DCHECK(Token::IsAssignmentOp(op)); 3459 DCHECK(Token::IsAssignmentOp(op));
3460
3461 if (op != Token::INIT && target->IsVariableProxy()) {
3462 target->AsVariableProxy()->set_is_assigned();
3463 }
3464
3458 Assignment* assign = new (zone_) Assignment(op, target, value, pos); 3465 Assignment* assign = new (zone_) Assignment(op, target, value, pos);
3459 if (assign->is_compound()) { 3466 if (assign->is_compound()) {
3460 DCHECK(Token::IsAssignmentOp(op));
3461 assign->binary_operation_ = 3467 assign->binary_operation_ =
3462 NewBinaryOperation(assign->binary_op(), target, value, pos + 1); 3468 NewBinaryOperation(assign->binary_op(), target, value, pos + 1);
3463 } 3469 }
3464 return assign; 3470 return assign;
3465 } 3471 }
3466 3472
3467 Yield* NewYield(Expression* generator_object, Expression* expression, int pos, 3473 Yield* NewYield(Expression* generator_object, Expression* expression, int pos,
3468 Yield::OnException on_exception) { 3474 Yield::OnException on_exception) {
3469 if (!expression) expression = NewUndefinedLiteral(pos); 3475 if (!expression) expression = NewUndefinedLiteral(pos);
3470 return new (zone_) Yield(generator_object, expression, pos, on_exception); 3476 return new (zone_) Yield(generator_object, expression, pos, on_exception);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
3628 : NULL; \ 3634 : NULL; \
3629 } 3635 }
3630 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) 3636 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS)
3631 #undef DECLARE_NODE_FUNCTIONS 3637 #undef DECLARE_NODE_FUNCTIONS
3632 3638
3633 3639
3634 } // namespace internal 3640 } // namespace internal
3635 } // namespace v8 3641 } // namespace v8
3636 3642
3637 #endif // V8_AST_AST_H_ 3643 #endif // V8_AST_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698