| 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(DartType) \ | 18 M(DartType) \ |
| 19 M(InvalidType) \ | 19 M(InvalidType) \ |
| 20 M(DynamicType) \ | 20 M(DynamicType) \ |
| 21 M(VoidType) \ | 21 M(VoidType) \ |
| 22 M(InterfaceType) \ | 22 M(InterfaceType) \ |
| 23 M(FunctionType) \ | 23 M(FunctionType) \ |
| 24 M(TypeParameterType) \ | 24 M(TypeParameterType) \ |
| 25 M(VectorType) | 25 M(VectorType) \ |
| 26 M(TypedefType) |
| 26 | 27 |
| 27 #define KERNEL_TREE_NODES_DO(M) \ | 28 #define KERNEL_TREE_NODES_DO(M) \ |
| 28 M(Library) \ | 29 M(Library) \ |
| 30 M(Typedef) \ |
| 29 M(Class) \ | 31 M(Class) \ |
| 30 M(NormalClass) \ | 32 M(NormalClass) \ |
| 31 M(MixinClass) \ | 33 M(MixinClass) \ |
| 32 M(Member) \ | 34 M(Member) \ |
| 33 M(Field) \ | 35 M(Field) \ |
| 34 M(Constructor) \ | 36 M(Constructor) \ |
| 35 M(Procedure) \ | 37 M(Procedure) \ |
| 36 M(Initializer) \ | 38 M(Initializer) \ |
| 37 M(InvalidInitializer) \ | 39 M(InvalidInitializer) \ |
| 38 M(FieldInitializer) \ | 40 M(FieldInitializer) \ |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 virtual Node::NodeType Type() { return Node::kType##klass; } | 370 virtual Node::NodeType Type() { return Node::kType##klass; } |
| 369 | 371 |
| 370 #define DEFINE_IS_OPERATION(klass) \ | 372 #define DEFINE_IS_OPERATION(klass) \ |
| 371 virtual bool Is##klass() { return false; } | 373 virtual bool Is##klass() { return false; } |
| 372 | 374 |
| 373 #define DEFINE_ALL_IS_OPERATIONS() \ | 375 #define DEFINE_ALL_IS_OPERATIONS() \ |
| 374 KERNEL_NODES_DO(DEFINE_IS_OPERATION) \ | 376 KERNEL_NODES_DO(DEFINE_IS_OPERATION) \ |
| 375 DEFINE_IS_OPERATION(TreeNode) \ | 377 DEFINE_IS_OPERATION(TreeNode) \ |
| 376 KERNEL_TREE_NODES_DO(DEFINE_IS_OPERATION) | 378 KERNEL_TREE_NODES_DO(DEFINE_IS_OPERATION) |
| 377 | 379 |
| 380 class Typedef; |
| 378 class Class; | 381 class Class; |
| 379 class Constructor; | 382 class Constructor; |
| 380 class Field; | 383 class Field; |
| 381 class Library; | 384 class Library; |
| 382 class LinkedNode; | 385 class LinkedNode; |
| 383 class Member; | 386 class Member; |
| 384 class Procedure; | 387 class Procedure; |
| 385 | 388 |
| 386 class CanonicalName { | 389 class CanonicalName { |
| 387 public: | 390 public: |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 virtual ~Library(); | 484 virtual ~Library(); |
| 482 | 485 |
| 483 DEFINE_CASTING_OPERATIONS(Library); | 486 DEFINE_CASTING_OPERATIONS(Library); |
| 484 | 487 |
| 485 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 488 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
| 486 virtual void VisitChildren(Visitor* visitor); | 489 virtual void VisitChildren(Visitor* visitor); |
| 487 | 490 |
| 488 String* import_uri() { return import_uri_; } | 491 String* import_uri() { return import_uri_; } |
| 489 intptr_t source_uri_index() { return source_uri_index_; } | 492 intptr_t source_uri_index() { return source_uri_index_; } |
| 490 String* name() { return name_; } | 493 String* name() { return name_; } |
| 494 List<Typedef>& typedefs() { return typedefs_; } |
| 491 List<Class>& classes() { return classes_; } | 495 List<Class>& classes() { return classes_; } |
| 492 List<Field>& fields() { return fields_; } | 496 List<Field>& fields() { return fields_; } |
| 493 List<Procedure>& procedures() { return procedures_; } | 497 List<Procedure>& procedures() { return procedures_; } |
| 494 | 498 |
| 495 const uint8_t* kernel_data() { return kernel_data_; } | 499 const uint8_t* kernel_data() { return kernel_data_; } |
| 496 intptr_t kernel_data_size() { return kernel_data_size_; } | 500 intptr_t kernel_data_size() { return kernel_data_size_; } |
| 497 | 501 |
| 498 private: | 502 private: |
| 499 Library() : name_(NULL), kernel_data_(NULL), kernel_data_size_(-1) {} | 503 Library() : name_(NULL), kernel_data_(NULL), kernel_data_size_(-1) {} |
| 500 | 504 |
| 501 template <typename T> | 505 template <typename T> |
| 502 friend class List; | 506 friend class List; |
| 503 | 507 |
| 504 Ref<String> name_; | 508 Ref<String> name_; |
| 505 Ref<String> import_uri_; | 509 Ref<String> import_uri_; |
| 506 intptr_t source_uri_index_; | 510 intptr_t source_uri_index_; |
| 511 List<Typedef> typedefs_; |
| 507 List<Class> classes_; | 512 List<Class> classes_; |
| 508 List<Field> fields_; | 513 List<Field> fields_; |
| 509 List<Procedure> procedures_; | 514 List<Procedure> procedures_; |
| 510 const uint8_t* kernel_data_; | 515 const uint8_t* kernel_data_; |
| 511 intptr_t kernel_data_size_; | 516 intptr_t kernel_data_size_; |
| 512 | 517 |
| 513 DISALLOW_COPY_AND_ASSIGN(Library); | 518 DISALLOW_COPY_AND_ASSIGN(Library); |
| 514 }; | 519 }; |
| 515 | 520 |
| 516 | 521 |
| 522 class Typedef : public LinkedNode { |
| 523 public: |
| 524 Typedef* ReadFrom(Reader* reader); |
| 525 |
| 526 virtual ~Typedef(); |
| 527 |
| 528 DEFINE_CASTING_OPERATIONS(Typedef); |
| 529 |
| 530 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
| 531 virtual void VisitChildren(Visitor* visitor); |
| 532 |
| 533 Library* parent() { return parent_; } |
| 534 String* name() { return name_; } |
| 535 intptr_t source_uri_index() { return source_uri_index_; } |
| 536 TokenPosition position() { return position_; } |
| 537 TypeParameterList& type_parameters() { return type_parameters_; } |
| 538 DartType* type() { return type_; } |
| 539 |
| 540 protected: |
| 541 Typedef() : position_(TokenPosition::kNoSource) {} |
| 542 |
| 543 private: |
| 544 template <typename T> |
| 545 friend class List; |
| 546 |
| 547 Ref<Library> parent_; |
| 548 Ref<String> name_; |
| 549 intptr_t source_uri_index_; |
| 550 TokenPosition position_; |
| 551 TypeParameterList type_parameters_; |
| 552 Child<DartType> type_; |
| 553 }; |
| 554 |
| 555 |
| 517 class Class : public LinkedNode { | 556 class Class : public LinkedNode { |
| 518 public: | 557 public: |
| 519 Class* ReadFrom(Reader* reader); | 558 Class* ReadFrom(Reader* reader); |
| 520 | 559 |
| 521 virtual ~Class(); | 560 virtual ~Class(); |
| 522 | 561 |
| 523 DEFINE_CASTING_OPERATIONS(Class); | 562 DEFINE_CASTING_OPERATIONS(Class); |
| 524 | 563 |
| 525 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 564 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
| 526 virtual void AcceptClassVisitor(ClassVisitor* visitor) = 0; | 565 virtual void AcceptClassVisitor(ClassVisitor* visitor) = 0; |
| (...skipping 2221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2748 private: | 2787 private: |
| 2749 InterfaceType() {} | 2788 InterfaceType() {} |
| 2750 | 2789 |
| 2751 Ref<CanonicalName> class_reference_; // Class. | 2790 Ref<CanonicalName> class_reference_; // Class. |
| 2752 List<DartType> type_arguments_; | 2791 List<DartType> type_arguments_; |
| 2753 | 2792 |
| 2754 DISALLOW_COPY_AND_ASSIGN(InterfaceType); | 2793 DISALLOW_COPY_AND_ASSIGN(InterfaceType); |
| 2755 }; | 2794 }; |
| 2756 | 2795 |
| 2757 | 2796 |
| 2797 class TypedefType : public DartType { |
| 2798 public: |
| 2799 static TypedefType* ReadFrom(Reader* reader); |
| 2800 |
| 2801 explicit TypedefType(CanonicalName* class_reference) |
| 2802 : typedef_reference_(class_reference) {} |
| 2803 virtual ~TypedefType(); |
| 2804 |
| 2805 DEFINE_CASTING_OPERATIONS(TypedefType); |
| 2806 |
| 2807 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor); |
| 2808 virtual void VisitChildren(Visitor* visitor); |
| 2809 |
| 2810 CanonicalName* typedef_reference() { return typedef_reference_; } |
| 2811 List<DartType>& type_arguments() { return type_arguments_; } |
| 2812 |
| 2813 private: |
| 2814 TypedefType() {} |
| 2815 |
| 2816 Ref<CanonicalName> typedef_reference_; // Typedef. |
| 2817 List<DartType> type_arguments_; |
| 2818 |
| 2819 DISALLOW_COPY_AND_ASSIGN(TypedefType); |
| 2820 }; |
| 2821 |
| 2822 |
| 2758 class FunctionType : public DartType { | 2823 class FunctionType : public DartType { |
| 2759 public: | 2824 public: |
| 2760 static FunctionType* ReadFrom(Reader* reader); | 2825 static FunctionType* ReadFrom(Reader* reader); |
| 2761 static FunctionType* ReadFrom(Reader* reader, bool _without_type_arguments_); | 2826 static FunctionType* ReadFrom(Reader* reader, bool _without_type_arguments_); |
| 2762 | 2827 |
| 2763 virtual ~FunctionType(); | 2828 virtual ~FunctionType(); |
| 2764 | 2829 |
| 2765 DEFINE_CASTING_OPERATIONS(FunctionType); | 2830 DEFINE_CASTING_OPERATIONS(FunctionType); |
| 2766 | 2831 |
| 2767 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor); | 2832 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2892 DISALLOW_COPY_AND_ASSIGN(Program); | 2957 DISALLOW_COPY_AND_ASSIGN(Program); |
| 2893 }; | 2958 }; |
| 2894 | 2959 |
| 2895 | 2960 |
| 2896 class Reference : public AllStatic { | 2961 class Reference : public AllStatic { |
| 2897 public: | 2962 public: |
| 2898 static CanonicalName* ReadMemberFrom(Reader* reader, bool allow_null = false); | 2963 static CanonicalName* ReadMemberFrom(Reader* reader, bool allow_null = false); |
| 2899 | 2964 |
| 2900 static CanonicalName* ReadClassFrom(Reader* reader, bool allow_null = false); | 2965 static CanonicalName* ReadClassFrom(Reader* reader, bool allow_null = false); |
| 2901 | 2966 |
| 2967 static CanonicalName* ReadTypedefFrom(Reader* reader); |
| 2968 |
| 2902 static String* ReadStringFrom(Reader* reader); | 2969 static String* ReadStringFrom(Reader* reader); |
| 2903 }; | 2970 }; |
| 2904 | 2971 |
| 2905 | 2972 |
| 2906 class ExpressionVisitor { | 2973 class ExpressionVisitor { |
| 2907 public: | 2974 public: |
| 2908 virtual ~ExpressionVisitor() {} | 2975 virtual ~ExpressionVisitor() {} |
| 2909 | 2976 |
| 2910 virtual void VisitDefaultExpression(Expression* node) = 0; | 2977 virtual void VisitDefaultExpression(Expression* node) = 0; |
| 2911 virtual void VisitDefaultBasicLiteral(BasicLiteral* node) { | 2978 virtual void VisitDefaultBasicLiteral(BasicLiteral* node) { |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3141 virtual void VisitInterfaceType(InterfaceType* node) { | 3208 virtual void VisitInterfaceType(InterfaceType* node) { |
| 3142 VisitDefaultDartType(node); | 3209 VisitDefaultDartType(node); |
| 3143 } | 3210 } |
| 3144 virtual void VisitFunctionType(FunctionType* node) { | 3211 virtual void VisitFunctionType(FunctionType* node) { |
| 3145 VisitDefaultDartType(node); | 3212 VisitDefaultDartType(node); |
| 3146 } | 3213 } |
| 3147 virtual void VisitTypeParameterType(TypeParameterType* node) { | 3214 virtual void VisitTypeParameterType(TypeParameterType* node) { |
| 3148 VisitDefaultDartType(node); | 3215 VisitDefaultDartType(node); |
| 3149 } | 3216 } |
| 3150 virtual void VisitVectorType(VectorType* node) { VisitDefaultDartType(node); } | 3217 virtual void VisitVectorType(VectorType* node) { VisitDefaultDartType(node); } |
| 3218 virtual void VisitTypedefType(TypedefType* node) { |
| 3219 VisitDefaultDartType(node); |
| 3220 } |
| 3151 }; | 3221 }; |
| 3152 | 3222 |
| 3153 | 3223 |
| 3154 class TreeVisitor : public ExpressionVisitor, | 3224 class TreeVisitor : public ExpressionVisitor, |
| 3155 public StatementVisitor, | 3225 public StatementVisitor, |
| 3156 public MemberVisitor, | 3226 public MemberVisitor, |
| 3157 public ClassVisitor, | 3227 public ClassVisitor, |
| 3158 public InitializerVisitor { | 3228 public InitializerVisitor { |
| 3159 public: | 3229 public: |
| 3160 virtual ~TreeVisitor() {} | 3230 virtual ~TreeVisitor() {} |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3180 VisitDefaultTreeNode(node); | 3250 VisitDefaultTreeNode(node); |
| 3181 } | 3251 } |
| 3182 virtual void VisitArguments(Arguments* node) { VisitDefaultTreeNode(node); } | 3252 virtual void VisitArguments(Arguments* node) { VisitDefaultTreeNode(node); } |
| 3183 virtual void VisitNamedExpression(NamedExpression* node) { | 3253 virtual void VisitNamedExpression(NamedExpression* node) { |
| 3184 VisitDefaultTreeNode(node); | 3254 VisitDefaultTreeNode(node); |
| 3185 } | 3255 } |
| 3186 virtual void VisitSwitchCase(SwitchCase* node) { VisitDefaultTreeNode(node); } | 3256 virtual void VisitSwitchCase(SwitchCase* node) { VisitDefaultTreeNode(node); } |
| 3187 virtual void VisitCatch(Catch* node) { VisitDefaultTreeNode(node); } | 3257 virtual void VisitCatch(Catch* node) { VisitDefaultTreeNode(node); } |
| 3188 virtual void VisitMapEntry(MapEntry* node) { VisitDefaultTreeNode(node); } | 3258 virtual void VisitMapEntry(MapEntry* node) { VisitDefaultTreeNode(node); } |
| 3189 virtual void VisitProgram(Program* node) { VisitDefaultTreeNode(node); } | 3259 virtual void VisitProgram(Program* node) { VisitDefaultTreeNode(node); } |
| 3260 virtual void VisitTypedef(Typedef* node) { VisitDefaultTreeNode(node); } |
| 3190 }; | 3261 }; |
| 3191 | 3262 |
| 3192 | 3263 |
| 3193 class Visitor : public TreeVisitor, public DartTypeVisitor { | 3264 class Visitor : public TreeVisitor, public DartTypeVisitor { |
| 3194 public: | 3265 public: |
| 3195 virtual ~Visitor() {} | 3266 virtual ~Visitor() {} |
| 3196 | 3267 |
| 3197 virtual void VisitDefaultNode(Node* node) = 0; | 3268 virtual void VisitDefaultNode(Node* node) = 0; |
| 3198 virtual void VisitDefaultTreeNode(TreeNode* node) { VisitDefaultNode(node); } | 3269 virtual void VisitDefaultTreeNode(TreeNode* node) { VisitDefaultNode(node); } |
| 3199 virtual void VisitDefaultDartType(DartType* node) { VisitDefaultNode(node); } | 3270 virtual void VisitDefaultDartType(DartType* node) { VisitDefaultNode(node); } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3290 } // namespace kernel | 3361 } // namespace kernel |
| 3291 | 3362 |
| 3292 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 3363 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
| 3293 intptr_t buffer_length); | 3364 intptr_t buffer_length); |
| 3294 | 3365 |
| 3295 | 3366 |
| 3296 } // namespace dart | 3367 } // namespace dart |
| 3297 | 3368 |
| 3298 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 3369 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| 3299 #endif // RUNTIME_VM_KERNEL_H_ | 3370 #endif // RUNTIME_VM_KERNEL_H_ |
| OLD | NEW |