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 #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 Loading... |
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 Loading... |
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 Loading... |
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_ |
OLD | NEW |