| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef RUNTIME_VM_AST_H_ | 5 #ifndef RUNTIME_VM_AST_H_ |
| 6 #define RUNTIME_VM_AST_H_ | 6 #define RUNTIME_VM_AST_H_ |
| 7 | 7 |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
| 10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 | 436 |
| 437 private: | 437 private: |
| 438 const Instance& literal_; | 438 const Instance& literal_; |
| 439 | 439 |
| 440 DISALLOW_IMPLICIT_CONSTRUCTORS(LiteralNode); | 440 DISALLOW_IMPLICIT_CONSTRUCTORS(LiteralNode); |
| 441 }; | 441 }; |
| 442 | 442 |
| 443 | 443 |
| 444 class TypeNode : public AstNode { | 444 class TypeNode : public AstNode { |
| 445 public: | 445 public: |
| 446 TypeNode(TokenPosition token_pos, const AbstractType& type) | 446 TypeNode(TokenPosition token_pos, |
| 447 : AstNode(token_pos), type_(type) { | 447 const AbstractType& type, |
| 448 bool is_deferred_reference = false) |
| 449 : AstNode(token_pos), |
| 450 type_(type), |
| 451 is_deferred_reference_(is_deferred_reference) { |
| 448 ASSERT(type_.IsZoneHandle()); | 452 ASSERT(type_.IsZoneHandle()); |
| 449 ASSERT(!type_.IsNull()); | 453 ASSERT(!type_.IsNull()); |
| 450 ASSERT(type_.IsFinalized()); | 454 ASSERT(type_.IsFinalized()); |
| 451 // A wellformed literal Type must be canonical. | 455 // A wellformed literal Type must be canonical. |
| 452 ASSERT(!type_.IsType() || type_.IsMalformedOrMalbounded() || | 456 ASSERT(!type_.IsType() || type_.IsMalformedOrMalbounded() || |
| 453 type_.IsCanonical()); | 457 type_.IsCanonical()); |
| 454 } | 458 } |
| 455 | 459 |
| 456 const AbstractType& type() const { return type_; } | 460 const AbstractType& type() const { return type_; } |
| 457 | 461 |
| 458 const char* TypeName() const; | 462 const char* TypeName() const; |
| 459 | 463 |
| 460 virtual const Instance* EvalConstExpr() const { | 464 virtual const Instance* EvalConstExpr() const { |
| 461 if (!type_.IsInstantiated() || type_.IsMalformedOrMalbounded()) { | 465 if (!type_.IsInstantiated() || type_.IsMalformedOrMalbounded()) { |
| 462 return NULL; | 466 return NULL; |
| 463 } | 467 } |
| 464 return &type(); | 468 return &type(); |
| 465 } | 469 } |
| 466 | 470 |
| 467 virtual void VisitChildren(AstNodeVisitor* visitor) const {} | 471 virtual void VisitChildren(AstNodeVisitor* visitor) const {} |
| 468 | 472 |
| 473 bool is_deferred_reference() const { return is_deferred_reference_; } |
| 474 void set_is_deferred_reference(bool value) { is_deferred_reference_ = value; } |
| 475 |
| 469 DECLARE_COMMON_NODE_FUNCTIONS(TypeNode); | 476 DECLARE_COMMON_NODE_FUNCTIONS(TypeNode); |
| 470 | 477 |
| 471 private: | 478 private: |
| 472 const AbstractType& type_; | 479 const AbstractType& type_; |
| 480 bool is_deferred_reference_; |
| 473 | 481 |
| 474 DISALLOW_IMPLICIT_CONSTRUCTORS(TypeNode); | 482 DISALLOW_IMPLICIT_CONSTRUCTORS(TypeNode); |
| 475 }; | 483 }; |
| 476 | 484 |
| 477 | 485 |
| 478 class AssignableNode : public AstNode { | 486 class AssignableNode : public AstNode { |
| 479 public: | 487 public: |
| 480 AssignableNode(TokenPosition token_pos, | 488 AssignableNode(TokenPosition token_pos, |
| 481 AstNode* expr, | 489 AstNode* expr, |
| 482 const AbstractType& type, | 490 const AbstractType& type, |
| (...skipping 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1966 const intptr_t try_index_; | 1974 const intptr_t try_index_; |
| 1967 | 1975 |
| 1968 DISALLOW_IMPLICIT_CONSTRUCTORS(InlinedFinallyNode); | 1976 DISALLOW_IMPLICIT_CONSTRUCTORS(InlinedFinallyNode); |
| 1969 }; | 1977 }; |
| 1970 | 1978 |
| 1971 } // namespace dart | 1979 } // namespace dart |
| 1972 | 1980 |
| 1973 #undef DECLARE_COMMON_NODE_FUNCTIONS | 1981 #undef DECLARE_COMMON_NODE_FUNCTIONS |
| 1974 | 1982 |
| 1975 #endif // RUNTIME_VM_AST_H_ | 1983 #endif // RUNTIME_VM_AST_H_ |
| OLD | NEW |