OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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_KERNEL_H_ | 5 #ifndef RUNTIME_VM_KERNEL_H_ |
6 #define RUNTIME_VM_KERNEL_H_ | 6 #define RUNTIME_VM_KERNEL_H_ |
7 | 7 |
8 #if !defined(DART_PRECOMPILED_RUNTIME) | 8 #if !defined(DART_PRECOMPILED_RUNTIME) |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "vm/allocation.h" | 10 #include "vm/allocation.h" |
11 #include "vm/globals.h" | 11 #include "vm/globals.h" |
12 #include "vm/growable_array.h" | 12 #include "vm/growable_array.h" |
13 #include "vm/token_position.h" | 13 #include "vm/token_position.h" |
14 | 14 |
15 | 15 |
16 #define KERNEL_NODES_DO(M) \ | 16 #define KERNEL_NODES_DO(M) \ |
17 M(Name) \ | 17 M(Name) \ |
18 M(InferredValue) \ | |
19 M(DartType) \ | 18 M(DartType) \ |
20 M(InvalidType) \ | 19 M(InvalidType) \ |
21 M(DynamicType) \ | 20 M(DynamicType) \ |
22 M(VoidType) \ | 21 M(VoidType) \ |
23 M(InterfaceType) \ | 22 M(InterfaceType) \ |
24 M(FunctionType) \ | 23 M(FunctionType) \ |
25 M(TypeParameterType) | 24 M(TypeParameterType) |
26 | 25 |
27 #define KERNEL_TREE_NODES_DO(M) \ | 26 #define KERNEL_TREE_NODES_DO(M) \ |
28 M(Library) \ | 27 M(Library) \ |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 virtual void AcceptMemberVisitor(MemberVisitor* visitor); | 693 virtual void AcceptMemberVisitor(MemberVisitor* visitor); |
695 virtual void AcceptReferenceVisitor(MemberReferenceVisitor* visitor); | 694 virtual void AcceptReferenceVisitor(MemberReferenceVisitor* visitor); |
696 virtual void VisitChildren(Visitor* visitor); | 695 virtual void VisitChildren(Visitor* visitor); |
697 | 696 |
698 bool IsConst() { return (flags_ & kFlagConst) == kFlagConst; } | 697 bool IsConst() { return (flags_ & kFlagConst) == kFlagConst; } |
699 bool IsFinal() { return (flags_ & kFlagFinal) == kFlagFinal; } | 698 bool IsFinal() { return (flags_ & kFlagFinal) == kFlagFinal; } |
700 bool IsStatic() { return (flags_ & kFlagStatic) == kFlagStatic; } | 699 bool IsStatic() { return (flags_ & kFlagStatic) == kFlagStatic; } |
701 intptr_t source_uri_index() { return source_uri_index_; } | 700 intptr_t source_uri_index() { return source_uri_index_; } |
702 | 701 |
703 DartType* type() { return type_; } | 702 DartType* type() { return type_; } |
704 InferredValue* inferred_value() { return inferred_value_; } | |
705 Expression* initializer() { return initializer_; } | 703 Expression* initializer() { return initializer_; } |
706 | 704 |
707 private: | 705 private: |
708 Field() {} | 706 Field() {} |
709 | 707 |
710 template <typename T> | 708 template <typename T> |
711 friend class List; | 709 friend class List; |
712 | 710 |
713 word flags_; | 711 word flags_; |
714 intptr_t source_uri_index_; | 712 intptr_t source_uri_index_; |
715 Child<DartType> type_; | 713 Child<DartType> type_; |
716 Child<InferredValue> inferred_value_; | |
717 Child<Expression> initializer_; | 714 Child<Expression> initializer_; |
718 | 715 |
719 DISALLOW_COPY_AND_ASSIGN(Field); | 716 DISALLOW_COPY_AND_ASSIGN(Field); |
720 }; | 717 }; |
721 | 718 |
722 | 719 |
723 class Constructor : public Member { | 720 class Constructor : public Member { |
724 public: | 721 public: |
725 enum Flags { | 722 enum Flags { |
726 kFlagConst = 1 << 0, | 723 kFlagConst = 1 << 0, |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
962 | 959 |
963 AsyncMarker async_marker() { return async_marker_; } | 960 AsyncMarker async_marker() { return async_marker_; } |
964 AsyncMarker dart_async_marker() { return dart_async_marker_; } | 961 AsyncMarker dart_async_marker() { return dart_async_marker_; } |
965 TypeParameterList& type_parameters() { return type_parameters_; } | 962 TypeParameterList& type_parameters() { return type_parameters_; } |
966 int required_parameter_count() { return required_parameter_count_; } | 963 int required_parameter_count() { return required_parameter_count_; } |
967 List<VariableDeclaration>& positional_parameters() { | 964 List<VariableDeclaration>& positional_parameters() { |
968 return positional_parameters_; | 965 return positional_parameters_; |
969 } | 966 } |
970 List<VariableDeclaration>& named_parameters() { return named_parameters_; } | 967 List<VariableDeclaration>& named_parameters() { return named_parameters_; } |
971 DartType* return_type() { return return_type_; } | 968 DartType* return_type() { return return_type_; } |
972 InferredValue* inferred_return_value() { return inferred_return_value_; } | |
973 Statement* body() { return body_; } | 969 Statement* body() { return body_; } |
974 TokenPosition position() { return position_; } | 970 TokenPosition position() { return position_; } |
975 TokenPosition end_position() { return end_position_; } | 971 TokenPosition end_position() { return end_position_; } |
976 | 972 |
977 private: | 973 private: |
978 FunctionNode() | 974 FunctionNode() |
979 : position_(TokenPosition::kNoSource), | 975 : position_(TokenPosition::kNoSource), |
980 end_position_(TokenPosition::kNoSource) {} | 976 end_position_(TokenPosition::kNoSource) {} |
981 | 977 |
982 AsyncMarker async_marker_; | 978 AsyncMarker async_marker_; |
983 AsyncMarker dart_async_marker_; | 979 AsyncMarker dart_async_marker_; |
984 TypeParameterList type_parameters_; | 980 TypeParameterList type_parameters_; |
985 int required_parameter_count_; | 981 int required_parameter_count_; |
986 List<VariableDeclaration> positional_parameters_; | 982 List<VariableDeclaration> positional_parameters_; |
987 List<VariableDeclaration> named_parameters_; | 983 List<VariableDeclaration> named_parameters_; |
988 Child<DartType> return_type_; | 984 Child<DartType> return_type_; |
989 Child<InferredValue> inferred_return_value_; | |
990 Child<Statement> body_; | 985 Child<Statement> body_; |
991 TokenPosition position_; | 986 TokenPosition position_; |
992 TokenPosition end_position_; | 987 TokenPosition end_position_; |
993 | 988 |
994 DISALLOW_COPY_AND_ASSIGN(FunctionNode); | 989 DISALLOW_COPY_AND_ASSIGN(FunctionNode); |
995 }; | 990 }; |
996 | 991 |
997 | 992 |
998 class Expression : public TreeNode { | 993 class Expression : public TreeNode { |
999 public: | 994 public: |
(...skipping 1462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2462 DEFINE_CASTING_OPERATIONS(VariableDeclaration); | 2457 DEFINE_CASTING_OPERATIONS(VariableDeclaration); |
2463 | 2458 |
2464 virtual void AcceptStatementVisitor(StatementVisitor* visitor); | 2459 virtual void AcceptStatementVisitor(StatementVisitor* visitor); |
2465 virtual void VisitChildren(Visitor* visitor); | 2460 virtual void VisitChildren(Visitor* visitor); |
2466 | 2461 |
2467 bool IsConst() { return (flags_ & kFlagConst) == kFlagConst; } | 2462 bool IsConst() { return (flags_ & kFlagConst) == kFlagConst; } |
2468 bool IsFinal() { return (flags_ & kFlagFinal) == kFlagFinal; } | 2463 bool IsFinal() { return (flags_ & kFlagFinal) == kFlagFinal; } |
2469 | 2464 |
2470 String* name() { return name_; } | 2465 String* name() { return name_; } |
2471 DartType* type() { return type_; } | 2466 DartType* type() { return type_; } |
2472 InferredValue* inferred_value() { return inferred_value_; } | |
2473 Expression* initializer() { return initializer_; } | 2467 Expression* initializer() { return initializer_; } |
2474 TokenPosition equals_position() { return equals_position_; } | 2468 TokenPosition equals_position() { return equals_position_; } |
2475 TokenPosition end_position() { return end_position_; } | 2469 TokenPosition end_position() { return end_position_; } |
2476 void set_end_position(TokenPosition position) { end_position_ = position; } | 2470 void set_end_position(TokenPosition position) { end_position_ = position; } |
2477 | 2471 |
2478 private: | 2472 private: |
2479 VariableDeclaration() | 2473 VariableDeclaration() |
2480 : equals_position_(TokenPosition::kNoSourcePos), | 2474 : equals_position_(TokenPosition::kNoSourcePos), |
2481 end_position_(TokenPosition::kNoSource) {} | 2475 end_position_(TokenPosition::kNoSource) {} |
2482 | 2476 |
2483 template <typename T> | 2477 template <typename T> |
2484 friend class List; | 2478 friend class List; |
2485 | 2479 |
2486 word flags_; | 2480 word flags_; |
2487 Ref<String> name_; | 2481 Ref<String> name_; |
2488 Child<DartType> type_; | 2482 Child<DartType> type_; |
2489 Child<InferredValue> inferred_value_; | |
2490 Child<Expression> initializer_; | 2483 Child<Expression> initializer_; |
2491 TokenPosition equals_position_; | 2484 TokenPosition equals_position_; |
2492 TokenPosition end_position_; | 2485 TokenPosition end_position_; |
2493 | 2486 |
2494 DISALLOW_COPY_AND_ASSIGN(VariableDeclaration); | 2487 DISALLOW_COPY_AND_ASSIGN(VariableDeclaration); |
2495 }; | 2488 }; |
2496 | 2489 |
2497 | 2490 |
2498 class FunctionDeclaration : public Statement { | 2491 class FunctionDeclaration : public Statement { |
2499 public: | 2492 public: |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2541 Name(String* string, CanonicalName* library_reference) | 2534 Name(String* string, CanonicalName* library_reference) |
2542 : string_(string), library_reference_(library_reference) {} // NOLINT | 2535 : string_(string), library_reference_(library_reference) {} // NOLINT |
2543 | 2536 |
2544 Ref<String> string_; | 2537 Ref<String> string_; |
2545 Ref<CanonicalName> library_reference_; | 2538 Ref<CanonicalName> library_reference_; |
2546 | 2539 |
2547 DISALLOW_COPY_AND_ASSIGN(Name); | 2540 DISALLOW_COPY_AND_ASSIGN(Name); |
2548 }; | 2541 }; |
2549 | 2542 |
2550 | 2543 |
2551 class InferredValue : public Node { | |
2552 public: | |
2553 static const uint8_t kNull = 1 << 0; | |
2554 static const uint8_t kInteger = 1 << 1; | |
2555 static const uint8_t kDouble = 1 << 2; | |
2556 static const uint8_t kString = 1 << 3; | |
2557 static const uint8_t kOther = 1 << 4; | |
2558 | |
2559 enum BaseClassKind { | |
2560 kNone, | |
2561 kExact, | |
2562 kSubclass, | |
2563 kSubtype, | |
2564 }; | |
2565 | |
2566 static InferredValue* ReadFrom(Reader* reader); | |
2567 | |
2568 virtual ~InferredValue(); | |
2569 | |
2570 DEFINE_CASTING_OPERATIONS(InferredValue); | |
2571 | |
2572 virtual void AcceptVisitor(Visitor* visitor); | |
2573 virtual void VisitChildren(Visitor* visitor); | |
2574 | |
2575 bool IsInterfaceType() { return kind_ == kSubtype; } | |
2576 bool IsExactClass() { return kind_ == kExact; } | |
2577 bool IsSubclass() { return kind_ == kSubclass; } | |
2578 | |
2579 bool CanBeNull() { return (value_bits_ & kNull) != 0; } | |
2580 bool CanBeInteger() { return (value_bits_ & kInteger) != 0; } | |
2581 bool CanBeDouble() { return (value_bits_ & kDouble) != 0; } | |
2582 bool CanBeString() { return (value_bits_ & kString) != 0; } | |
2583 | |
2584 bool IsAlwaysNull() { return value_bits_ == kNull; } | |
2585 bool IsAlwaysInteger() { return value_bits_ == kInteger; } | |
2586 bool IsAlwaysDouble() { return value_bits_ == kDouble; } | |
2587 bool IsAlwaysString() { return value_bits_ == kString; } | |
2588 | |
2589 Class* klass() { return klass_reference_->AsClass(); } | |
2590 BaseClassKind kind() { return kind_; } | |
2591 uint8_t value_bits() { return value_bits_; } | |
2592 | |
2593 private: | |
2594 InferredValue() {} | |
2595 | |
2596 Ref<CanonicalName> klass_reference_; | |
2597 BaseClassKind kind_; | |
2598 uint8_t value_bits_; | |
2599 | |
2600 DISALLOW_COPY_AND_ASSIGN(InferredValue); | |
2601 }; | |
2602 | |
2603 | |
2604 class DartType : public Node { | 2544 class DartType : public Node { |
2605 public: | 2545 public: |
2606 static DartType* ReadFrom(Reader* reader); | 2546 static DartType* ReadFrom(Reader* reader); |
2607 | 2547 |
2608 virtual ~DartType(); | 2548 virtual ~DartType(); |
2609 | 2549 |
2610 DEFINE_CASTING_OPERATIONS(DartType); | 2550 DEFINE_CASTING_OPERATIONS(DartType); |
2611 | 2551 |
2612 virtual void AcceptVisitor(Visitor* visitor); | 2552 virtual void AcceptVisitor(Visitor* visitor); |
2613 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor) = 0; | 2553 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor) = 0; |
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3139 | 3079 |
3140 | 3080 |
3141 class Visitor : public TreeVisitor, | 3081 class Visitor : public TreeVisitor, |
3142 public DartTypeVisitor, | 3082 public DartTypeVisitor, |
3143 public ClassReferenceVisitor, | 3083 public ClassReferenceVisitor, |
3144 public MemberReferenceVisitor { | 3084 public MemberReferenceVisitor { |
3145 public: | 3085 public: |
3146 virtual ~Visitor() {} | 3086 virtual ~Visitor() {} |
3147 | 3087 |
3148 virtual void VisitDefaultNode(Node* node) = 0; | 3088 virtual void VisitDefaultNode(Node* node) = 0; |
3149 virtual void VisitInferredValue(InferredValue* node) { | |
3150 VisitDefaultNode(node); | |
3151 } | |
3152 virtual void VisitDefaultTreeNode(TreeNode* node) { VisitDefaultNode(node); } | 3089 virtual void VisitDefaultTreeNode(TreeNode* node) { VisitDefaultNode(node); } |
3153 virtual void VisitDefaultDartType(DartType* node) { VisitDefaultNode(node); } | 3090 virtual void VisitDefaultDartType(DartType* node) { VisitDefaultNode(node); } |
3154 virtual void VisitName(Name* node) { VisitDefaultNode(node); } | 3091 virtual void VisitName(Name* node) { VisitDefaultNode(node); } |
3155 virtual void VisitDefaultClassReference(Class* node) { | 3092 virtual void VisitDefaultClassReference(Class* node) { |
3156 VisitDefaultNode(node); | 3093 VisitDefaultNode(node); |
3157 } | 3094 } |
3158 virtual void VisitDefaultMemberReference(Member* node) { | 3095 virtual void VisitDefaultMemberReference(Member* node) { |
3159 VisitDefaultNode(node); | 3096 VisitDefaultNode(node); |
3160 } | 3097 } |
3161 }; | 3098 }; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3245 | 3182 |
3246 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 3183 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
3247 intptr_t buffer_length); | 3184 intptr_t buffer_length); |
3248 | 3185 |
3249 | 3186 |
3250 | 3187 |
3251 } // namespace dart | 3188 } // namespace dart |
3252 | 3189 |
3253 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 3190 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
3254 #endif // RUNTIME_VM_KERNEL_H_ | 3191 #endif // RUNTIME_VM_KERNEL_H_ |
OLD | NEW |