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/token_position.h" | 13 #include "vm/token_position.h" |
13 | 14 |
14 | 15 |
15 #define KERNEL_NODES_DO(M) \ | 16 #define KERNEL_NODES_DO(M) \ |
16 M(Name) \ | 17 M(Name) \ |
17 M(InferredValue) \ | 18 M(InferredValue) \ |
18 M(DartType) \ | 19 M(DartType) \ |
19 M(InvalidType) \ | 20 M(InvalidType) \ |
20 M(DynamicType) \ | 21 M(DynamicType) \ |
21 M(VoidType) \ | 22 M(VoidType) \ |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 virtual Node::NodeType Type() { return Node::kType##klass; } | 350 virtual Node::NodeType Type() { return Node::kType##klass; } |
350 | 351 |
351 #define DEFINE_IS_OPERATION(klass) \ | 352 #define DEFINE_IS_OPERATION(klass) \ |
352 virtual bool Is##klass() { return false; } | 353 virtual bool Is##klass() { return false; } |
353 | 354 |
354 #define DEFINE_ALL_IS_OPERATIONS() \ | 355 #define DEFINE_ALL_IS_OPERATIONS() \ |
355 KERNEL_NODES_DO(DEFINE_IS_OPERATION) \ | 356 KERNEL_NODES_DO(DEFINE_IS_OPERATION) \ |
356 DEFINE_IS_OPERATION(TreeNode) \ | 357 DEFINE_IS_OPERATION(TreeNode) \ |
357 KERNEL_TREE_NODES_DO(DEFINE_IS_OPERATION) | 358 KERNEL_TREE_NODES_DO(DEFINE_IS_OPERATION) |
358 | 359 |
| 360 class Class; |
| 361 class Constructor; |
| 362 class Field; |
| 363 class Library; |
| 364 class LinkedNode; |
| 365 class Member; |
| 366 class Procedure; |
| 367 |
| 368 class CanonicalName { |
| 369 public: |
| 370 String* name() { return name_; } |
| 371 CanonicalName* parent() { return parent_; } |
| 372 LinkedNode* definition() { return definition_; } |
| 373 bool is_referenced() { return is_referenced_; } |
| 374 void set_referenced(bool referenced) { is_referenced_ = referenced; } |
| 375 |
| 376 void BindTo(LinkedNode* definition); |
| 377 void Unbind(); |
| 378 CanonicalName* AddChild(String* name); |
| 379 |
| 380 Library* AsLibrary(); |
| 381 Class* AsClass(); |
| 382 Member* AsMember(); |
| 383 Field* AsField(); |
| 384 Constructor* AsConstructor(); |
| 385 Procedure* AsProcedure(); |
| 386 |
| 387 static CanonicalName* NewRoot(); |
| 388 |
| 389 ~CanonicalName(); |
| 390 |
| 391 private: |
| 392 CanonicalName(); |
| 393 |
| 394 bool is_referenced_; |
| 395 Ref<CanonicalName> parent_; |
| 396 Ref<String> name_; |
| 397 Ref<LinkedNode> definition_; |
| 398 MallocGrowableArray<CanonicalName*> children_; |
| 399 }; |
| 400 |
359 | 401 |
360 class Node { | 402 class Node { |
361 public: | 403 public: |
362 virtual ~Node(); | 404 virtual ~Node(); |
363 | 405 |
364 enum NodeType { | 406 enum NodeType { |
365 #define DO(name) kType##name, | 407 #define DO(name) kType##name, |
366 KERNEL_ALL_NODES_DO(DO) | 408 KERNEL_ALL_NODES_DO(DO) |
367 #undef DO | 409 #undef DO |
368 | 410 |
(...skipping 24 matching lines...) Expand all Loading... |
393 virtual void AcceptTreeVisitor(TreeVisitor* visitor) = 0; | 435 virtual void AcceptTreeVisitor(TreeVisitor* visitor) = 0; |
394 | 436 |
395 protected: | 437 protected: |
396 TreeNode() {} | 438 TreeNode() {} |
397 | 439 |
398 private: | 440 private: |
399 DISALLOW_COPY_AND_ASSIGN(TreeNode); | 441 DISALLOW_COPY_AND_ASSIGN(TreeNode); |
400 }; | 442 }; |
401 | 443 |
402 | 444 |
403 class Library : public TreeNode { | 445 class LinkedNode : public TreeNode { |
| 446 public: |
| 447 virtual ~LinkedNode(); |
| 448 |
| 449 CanonicalName* canonical_name() { return canonical_name_; } |
| 450 |
| 451 protected: |
| 452 LinkedNode() {} |
| 453 |
| 454 private: |
| 455 Ref<CanonicalName> canonical_name_; |
| 456 |
| 457 friend class CanonicalName; |
| 458 |
| 459 DISALLOW_COPY_AND_ASSIGN(LinkedNode); |
| 460 }; |
| 461 |
| 462 |
| 463 class Library : public LinkedNode { |
404 public: | 464 public: |
405 Library* ReadFrom(Reader* reader); | 465 Library* ReadFrom(Reader* reader); |
406 | 466 |
407 virtual ~Library(); | 467 virtual ~Library(); |
408 | 468 |
409 DEFINE_CASTING_OPERATIONS(Library); | 469 DEFINE_CASTING_OPERATIONS(Library); |
410 | 470 |
411 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 471 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
412 virtual void VisitChildren(Visitor* visitor); | 472 virtual void VisitChildren(Visitor* visitor); |
413 | 473 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 Ref<String> import_uri_; | 510 Ref<String> import_uri_; |
451 intptr_t source_uri_index_; | 511 intptr_t source_uri_index_; |
452 List<Class> classes_; | 512 List<Class> classes_; |
453 List<Field> fields_; | 513 List<Field> fields_; |
454 List<Procedure> procedures_; | 514 List<Procedure> procedures_; |
455 | 515 |
456 DISALLOW_COPY_AND_ASSIGN(Library); | 516 DISALLOW_COPY_AND_ASSIGN(Library); |
457 }; | 517 }; |
458 | 518 |
459 | 519 |
460 class Class : public TreeNode { | 520 class Class : public LinkedNode { |
461 public: | 521 public: |
462 Class* ReadFrom(Reader* reader); | 522 Class* ReadFrom(Reader* reader); |
463 | 523 |
464 virtual ~Class(); | 524 virtual ~Class(); |
465 | 525 |
466 DEFINE_CASTING_OPERATIONS(Class); | 526 DEFINE_CASTING_OPERATIONS(Class); |
467 | 527 |
468 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 528 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
469 virtual void AcceptClassVisitor(ClassVisitor* visitor) = 0; | 529 virtual void AcceptClassVisitor(ClassVisitor* visitor) = 0; |
470 virtual void AcceptReferenceVisitor(ClassReferenceVisitor* visitor) = 0; | 530 virtual void AcceptReferenceVisitor(ClassReferenceVisitor* visitor) = 0; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 List<Constructor> constructors_; | 633 List<Constructor> constructors_; |
574 | 634 |
575 // Dummy instances which are empty lists. | 635 // Dummy instances which are empty lists. |
576 List<Field> fields_; | 636 List<Field> fields_; |
577 List<Procedure> procedures_; | 637 List<Procedure> procedures_; |
578 | 638 |
579 DISALLOW_COPY_AND_ASSIGN(MixinClass); | 639 DISALLOW_COPY_AND_ASSIGN(MixinClass); |
580 }; | 640 }; |
581 | 641 |
582 | 642 |
583 class Member : public TreeNode { | 643 class Member : public LinkedNode { |
584 public: | 644 public: |
585 virtual ~Member(); | 645 virtual ~Member(); |
586 | 646 |
587 DEFINE_CASTING_OPERATIONS(Member); | 647 DEFINE_CASTING_OPERATIONS(Member); |
588 | 648 |
589 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 649 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
590 virtual void AcceptMemberVisitor(MemberVisitor* visitor) = 0; | 650 virtual void AcceptMemberVisitor(MemberVisitor* visitor) = 0; |
591 virtual void AcceptReferenceVisitor(MemberReferenceVisitor* visitor) = 0; | 651 virtual void AcceptReferenceVisitor(MemberReferenceVisitor* visitor) = 0; |
592 | 652 |
593 TreeNode* parent() { return parent_; } | 653 TreeNode* parent() { return parent_; } |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 public: | 849 public: |
790 static FieldInitializer* ReadFromImpl(Reader* reader); | 850 static FieldInitializer* ReadFromImpl(Reader* reader); |
791 | 851 |
792 virtual ~FieldInitializer(); | 852 virtual ~FieldInitializer(); |
793 | 853 |
794 DEFINE_CASTING_OPERATIONS(FieldInitializer); | 854 DEFINE_CASTING_OPERATIONS(FieldInitializer); |
795 | 855 |
796 virtual void AcceptInitializerVisitor(InitializerVisitor* visitor); | 856 virtual void AcceptInitializerVisitor(InitializerVisitor* visitor); |
797 virtual void VisitChildren(Visitor* visitor); | 857 virtual void VisitChildren(Visitor* visitor); |
798 | 858 |
799 Field* field() { return field_; } | 859 Field* field() { return field_reference_->AsField(); } |
800 Expression* value() { return value_; } | 860 Expression* value() { return value_; } |
801 | 861 |
802 private: | 862 private: |
803 FieldInitializer() {} | 863 FieldInitializer() {} |
804 | 864 |
805 Ref<Field> field_; | 865 Ref<CanonicalName> field_reference_; |
806 Child<Expression> value_; | 866 Child<Expression> value_; |
807 | 867 |
808 DISALLOW_COPY_AND_ASSIGN(FieldInitializer); | 868 DISALLOW_COPY_AND_ASSIGN(FieldInitializer); |
809 }; | 869 }; |
810 | 870 |
811 | 871 |
812 class SuperInitializer : public Initializer { | 872 class SuperInitializer : public Initializer { |
813 public: | 873 public: |
814 static SuperInitializer* ReadFromImpl(Reader* reader); | 874 static SuperInitializer* ReadFromImpl(Reader* reader); |
815 | 875 |
816 virtual ~SuperInitializer(); | 876 virtual ~SuperInitializer(); |
817 | 877 |
818 DEFINE_CASTING_OPERATIONS(SuperInitializer); | 878 DEFINE_CASTING_OPERATIONS(SuperInitializer); |
819 | 879 |
820 virtual void AcceptInitializerVisitor(InitializerVisitor* visitor); | 880 virtual void AcceptInitializerVisitor(InitializerVisitor* visitor); |
821 virtual void VisitChildren(Visitor* visitor); | 881 virtual void VisitChildren(Visitor* visitor); |
822 | 882 |
823 Constructor* target() { return target_; } | 883 Constructor* target() { return target_reference_->AsConstructor(); } |
824 Arguments* arguments() { return arguments_; } | 884 Arguments* arguments() { return arguments_; } |
825 | 885 |
826 private: | 886 private: |
827 SuperInitializer() {} | 887 SuperInitializer() {} |
828 | 888 |
829 Ref<Constructor> target_; | 889 Ref<CanonicalName> target_reference_; |
830 Child<Arguments> arguments_; | 890 Child<Arguments> arguments_; |
831 | 891 |
832 DISALLOW_COPY_AND_ASSIGN(SuperInitializer); | 892 DISALLOW_COPY_AND_ASSIGN(SuperInitializer); |
833 }; | 893 }; |
834 | 894 |
835 | 895 |
836 class RedirectingInitializer : public Initializer { | 896 class RedirectingInitializer : public Initializer { |
837 public: | 897 public: |
838 static RedirectingInitializer* ReadFromImpl(Reader* reader); | 898 static RedirectingInitializer* ReadFromImpl(Reader* reader); |
839 | 899 |
840 virtual ~RedirectingInitializer(); | 900 virtual ~RedirectingInitializer(); |
841 | 901 |
842 DEFINE_CASTING_OPERATIONS(RedirectingInitializer); | 902 DEFINE_CASTING_OPERATIONS(RedirectingInitializer); |
843 | 903 |
844 virtual void AcceptInitializerVisitor(InitializerVisitor* visitor); | 904 virtual void AcceptInitializerVisitor(InitializerVisitor* visitor); |
845 virtual void VisitChildren(Visitor* visitor); | 905 virtual void VisitChildren(Visitor* visitor); |
846 | 906 |
847 Constructor* target() { return target_; } | 907 Constructor* target() { return target_reference_->AsConstructor(); } |
848 Arguments* arguments() { return arguments_; } | 908 Arguments* arguments() { return arguments_; } |
849 | 909 |
850 private: | 910 private: |
851 RedirectingInitializer() {} | 911 RedirectingInitializer() {} |
852 | 912 |
853 Ref<Constructor> target_; | 913 Ref<CanonicalName> target_reference_; |
854 Child<Arguments> arguments_; | 914 Child<Arguments> arguments_; |
855 | 915 |
856 DISALLOW_COPY_AND_ASSIGN(RedirectingInitializer); | 916 DISALLOW_COPY_AND_ASSIGN(RedirectingInitializer); |
857 }; | 917 }; |
858 | 918 |
859 | 919 |
860 class LocalInitializer : public Initializer { | 920 class LocalInitializer : public Initializer { |
861 public: | 921 public: |
862 static LocalInitializer* ReadFromImpl(Reader* reader); | 922 static LocalInitializer* ReadFromImpl(Reader* reader); |
863 | 923 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1032 virtual void VisitChildren(Visitor* visitor); | 1092 virtual void VisitChildren(Visitor* visitor); |
1033 | 1093 |
1034 Expression* receiver() { return receiver_; } | 1094 Expression* receiver() { return receiver_; } |
1035 Name* name() { return name_; } | 1095 Name* name() { return name_; } |
1036 | 1096 |
1037 private: | 1097 private: |
1038 PropertyGet() {} | 1098 PropertyGet() {} |
1039 | 1099 |
1040 Child<Expression> receiver_; | 1100 Child<Expression> receiver_; |
1041 Child<Name> name_; | 1101 Child<Name> name_; |
1042 Ref<Member> interfaceTarget_; | 1102 Ref<CanonicalName> interface_target_reference_; |
1043 | 1103 |
1044 DISALLOW_COPY_AND_ASSIGN(PropertyGet); | 1104 DISALLOW_COPY_AND_ASSIGN(PropertyGet); |
1045 }; | 1105 }; |
1046 | 1106 |
1047 | 1107 |
1048 class PropertySet : public Expression { | 1108 class PropertySet : public Expression { |
1049 public: | 1109 public: |
1050 static PropertySet* ReadFrom(Reader* reader); | 1110 static PropertySet* ReadFrom(Reader* reader); |
1051 | 1111 |
1052 virtual ~PropertySet(); | 1112 virtual ~PropertySet(); |
1053 | 1113 |
1054 DEFINE_CASTING_OPERATIONS(PropertySet); | 1114 DEFINE_CASTING_OPERATIONS(PropertySet); |
1055 | 1115 |
1056 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1116 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1057 virtual void VisitChildren(Visitor* visitor); | 1117 virtual void VisitChildren(Visitor* visitor); |
1058 | 1118 |
1059 Expression* receiver() { return receiver_; } | 1119 Expression* receiver() { return receiver_; } |
1060 Name* name() { return name_; } | 1120 Name* name() { return name_; } |
1061 Expression* value() { return value_; } | 1121 Expression* value() { return value_; } |
1062 | 1122 |
1063 private: | 1123 private: |
1064 PropertySet() {} | 1124 PropertySet() {} |
1065 | 1125 |
1066 Child<Expression> receiver_; | 1126 Child<Expression> receiver_; |
1067 Child<Name> name_; | 1127 Child<Name> name_; |
1068 Child<Expression> value_; | 1128 Child<Expression> value_; |
1069 Ref<Member> interfaceTarget_; | 1129 Ref<CanonicalName> interface_target_reference_; |
1070 | 1130 |
1071 DISALLOW_COPY_AND_ASSIGN(PropertySet); | 1131 DISALLOW_COPY_AND_ASSIGN(PropertySet); |
1072 }; | 1132 }; |
1073 | 1133 |
1074 | 1134 |
1075 class DirectPropertyGet : public Expression { | 1135 class DirectPropertyGet : public Expression { |
1076 public: | 1136 public: |
1077 static DirectPropertyGet* ReadFrom(Reader* reader); | 1137 static DirectPropertyGet* ReadFrom(Reader* reader); |
1078 | 1138 |
1079 virtual ~DirectPropertyGet(); | 1139 virtual ~DirectPropertyGet(); |
1080 | 1140 |
1081 DEFINE_CASTING_OPERATIONS(DirectPropertyGet); | 1141 DEFINE_CASTING_OPERATIONS(DirectPropertyGet); |
1082 | 1142 |
1083 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1143 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1084 virtual void VisitChildren(Visitor* visitor); | 1144 virtual void VisitChildren(Visitor* visitor); |
1085 | 1145 |
1086 Expression* receiver() { return receiver_; } | 1146 Expression* receiver() { return receiver_; } |
1087 Member* target() { return target_; } | 1147 Member* target() { return target_reference_->AsMember(); } |
1088 | 1148 |
1089 private: | 1149 private: |
1090 DirectPropertyGet() {} | 1150 DirectPropertyGet() {} |
1091 | 1151 |
1092 Child<Expression> receiver_; | 1152 Child<Expression> receiver_; |
1093 Ref<Member> target_; | 1153 Ref<CanonicalName> target_reference_; |
1094 | 1154 |
1095 DISALLOW_COPY_AND_ASSIGN(DirectPropertyGet); | 1155 DISALLOW_COPY_AND_ASSIGN(DirectPropertyGet); |
1096 }; | 1156 }; |
1097 | 1157 |
1098 | 1158 |
1099 class DirectPropertySet : public Expression { | 1159 class DirectPropertySet : public Expression { |
1100 public: | 1160 public: |
1101 static DirectPropertySet* ReadFrom(Reader* reader); | 1161 static DirectPropertySet* ReadFrom(Reader* reader); |
1102 | 1162 |
1103 virtual ~DirectPropertySet(); | 1163 virtual ~DirectPropertySet(); |
1104 | 1164 |
1105 DEFINE_CASTING_OPERATIONS(DirectPropertySet); | 1165 DEFINE_CASTING_OPERATIONS(DirectPropertySet); |
1106 | 1166 |
1107 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1167 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1108 virtual void VisitChildren(Visitor* visitor); | 1168 virtual void VisitChildren(Visitor* visitor); |
1109 | 1169 |
1110 Expression* receiver() { return receiver_; } | 1170 Expression* receiver() { return receiver_; } |
1111 Member* target() { return target_; } | 1171 Member* target() { return target_reference_->AsMember(); } |
1112 Expression* value() { return value_; } | 1172 Expression* value() { return value_; } |
1113 | 1173 |
1114 private: | 1174 private: |
1115 DirectPropertySet() {} | 1175 DirectPropertySet() {} |
1116 | 1176 |
1117 Child<Expression> receiver_; | 1177 Child<Expression> receiver_; |
1118 Ref<Member> target_; | 1178 Ref<CanonicalName> target_reference_; |
1119 Child<Expression> value_; | 1179 Child<Expression> value_; |
1120 | 1180 |
1121 DISALLOW_COPY_AND_ASSIGN(DirectPropertySet); | 1181 DISALLOW_COPY_AND_ASSIGN(DirectPropertySet); |
1122 }; | 1182 }; |
1123 | 1183 |
1124 | 1184 |
1125 class StaticGet : public Expression { | 1185 class StaticGet : public Expression { |
1126 public: | 1186 public: |
1127 static StaticGet* ReadFrom(Reader* reader); | 1187 static StaticGet* ReadFrom(Reader* reader); |
1128 | 1188 |
1129 virtual ~StaticGet(); | 1189 virtual ~StaticGet(); |
1130 | 1190 |
1131 DEFINE_CASTING_OPERATIONS(StaticGet); | 1191 DEFINE_CASTING_OPERATIONS(StaticGet); |
1132 | 1192 |
1133 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1193 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1134 virtual void VisitChildren(Visitor* visitor); | 1194 virtual void VisitChildren(Visitor* visitor); |
1135 | 1195 |
1136 Member* target() { return target_; } | 1196 Member* target() { return target_reference_->AsMember(); } |
1137 | 1197 |
1138 private: | 1198 private: |
1139 StaticGet() {} | 1199 StaticGet() {} |
1140 | 1200 |
1141 Ref<Member> target_; | 1201 Ref<CanonicalName> target_reference_; |
1142 | 1202 |
1143 DISALLOW_COPY_AND_ASSIGN(StaticGet); | 1203 DISALLOW_COPY_AND_ASSIGN(StaticGet); |
1144 }; | 1204 }; |
1145 | 1205 |
1146 | 1206 |
1147 class StaticSet : public Expression { | 1207 class StaticSet : public Expression { |
1148 public: | 1208 public: |
1149 static StaticSet* ReadFrom(Reader* reader); | 1209 static StaticSet* ReadFrom(Reader* reader); |
1150 | 1210 |
1151 virtual ~StaticSet(); | 1211 virtual ~StaticSet(); |
1152 | 1212 |
1153 DEFINE_CASTING_OPERATIONS(StaticSet); | 1213 DEFINE_CASTING_OPERATIONS(StaticSet); |
1154 | 1214 |
1155 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1215 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1156 virtual void VisitChildren(Visitor* visitor); | 1216 virtual void VisitChildren(Visitor* visitor); |
1157 | 1217 |
1158 Member* target() { return target_; } | 1218 Member* target() { return target_reference_->AsMember(); } |
1159 Expression* expression() { return expression_; } | 1219 Expression* expression() { return expression_; } |
1160 | 1220 |
1161 private: | 1221 private: |
1162 StaticSet() {} | 1222 StaticSet() {} |
1163 | 1223 |
1164 Ref<Member> target_; | 1224 Ref<CanonicalName> target_reference_; |
1165 Child<Expression> expression_; | 1225 Child<Expression> expression_; |
1166 | 1226 |
1167 DISALLOW_COPY_AND_ASSIGN(StaticSet); | 1227 DISALLOW_COPY_AND_ASSIGN(StaticSet); |
1168 }; | 1228 }; |
1169 | 1229 |
1170 | 1230 |
1171 class Arguments : public TreeNode { | 1231 class Arguments : public TreeNode { |
1172 public: | 1232 public: |
1173 static Arguments* ReadFrom(Reader* reader); | 1233 static Arguments* ReadFrom(Reader* reader); |
1174 | 1234 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1236 Expression* receiver() { return receiver_; } | 1296 Expression* receiver() { return receiver_; } |
1237 Name* name() { return name_; } | 1297 Name* name() { return name_; } |
1238 Arguments* arguments() { return arguments_; } | 1298 Arguments* arguments() { return arguments_; } |
1239 | 1299 |
1240 private: | 1300 private: |
1241 MethodInvocation() {} | 1301 MethodInvocation() {} |
1242 | 1302 |
1243 Child<Expression> receiver_; | 1303 Child<Expression> receiver_; |
1244 Child<Name> name_; | 1304 Child<Name> name_; |
1245 Child<Arguments> arguments_; | 1305 Child<Arguments> arguments_; |
1246 Ref<Member> interfaceTarget_; | 1306 Ref<CanonicalName> interface_target_reference_; |
1247 | 1307 |
1248 DISALLOW_COPY_AND_ASSIGN(MethodInvocation); | 1308 DISALLOW_COPY_AND_ASSIGN(MethodInvocation); |
1249 }; | 1309 }; |
1250 | 1310 |
1251 | 1311 |
1252 class DirectMethodInvocation : public Expression { | 1312 class DirectMethodInvocation : public Expression { |
1253 public: | 1313 public: |
1254 static DirectMethodInvocation* ReadFrom(Reader* reader); | 1314 static DirectMethodInvocation* ReadFrom(Reader* reader); |
1255 | 1315 |
1256 virtual ~DirectMethodInvocation(); | 1316 virtual ~DirectMethodInvocation(); |
1257 | 1317 |
1258 DEFINE_CASTING_OPERATIONS(DirectMethodInvocation); | 1318 DEFINE_CASTING_OPERATIONS(DirectMethodInvocation); |
1259 | 1319 |
1260 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1320 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1261 virtual void VisitChildren(Visitor* visitor); | 1321 virtual void VisitChildren(Visitor* visitor); |
1262 | 1322 |
1263 Expression* receiver() { return receiver_; } | 1323 Expression* receiver() { return receiver_; } |
1264 Procedure* target() { return target_; } | 1324 Procedure* target() { return target_reference_->AsProcedure(); } |
1265 Arguments* arguments() { return arguments_; } | 1325 Arguments* arguments() { return arguments_; } |
1266 | 1326 |
1267 private: | 1327 private: |
1268 DirectMethodInvocation() {} | 1328 DirectMethodInvocation() {} |
1269 | 1329 |
1270 Child<Expression> receiver_; | 1330 Child<Expression> receiver_; |
1271 Ref<Procedure> target_; | 1331 Ref<CanonicalName> target_reference_; |
1272 Child<Arguments> arguments_; | 1332 Child<Arguments> arguments_; |
1273 | 1333 |
1274 DISALLOW_COPY_AND_ASSIGN(DirectMethodInvocation); | 1334 DISALLOW_COPY_AND_ASSIGN(DirectMethodInvocation); |
1275 }; | 1335 }; |
1276 | 1336 |
1277 | 1337 |
1278 class StaticInvocation : public Expression { | 1338 class StaticInvocation : public Expression { |
1279 public: | 1339 public: |
1280 static StaticInvocation* ReadFrom(Reader* reader, bool is_const); | 1340 static StaticInvocation* ReadFrom(Reader* reader, bool is_const); |
1281 ~StaticInvocation(); | 1341 ~StaticInvocation(); |
1282 | 1342 |
1283 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1343 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1284 virtual void VisitChildren(Visitor* visitor); | 1344 virtual void VisitChildren(Visitor* visitor); |
1285 | 1345 |
1286 Procedure* procedure() { return procedure_; } | 1346 Procedure* procedure() { return procedure_reference_->AsProcedure(); } |
1287 Arguments* arguments() { return arguments_; } | 1347 Arguments* arguments() { return arguments_; } |
1288 bool is_const() { return is_const_; } | 1348 bool is_const() { return is_const_; } |
1289 | 1349 |
1290 private: | 1350 private: |
1291 StaticInvocation() {} | 1351 StaticInvocation() {} |
1292 | 1352 |
1293 Ref<Procedure> procedure_; | 1353 Ref<CanonicalName> procedure_reference_; |
1294 Child<Arguments> arguments_; | 1354 Child<Arguments> arguments_; |
1295 bool is_const_; | 1355 bool is_const_; |
1296 | 1356 |
1297 DISALLOW_COPY_AND_ASSIGN(StaticInvocation); | 1357 DISALLOW_COPY_AND_ASSIGN(StaticInvocation); |
1298 }; | 1358 }; |
1299 | 1359 |
1300 | 1360 |
1301 class ConstructorInvocation : public Expression { | 1361 class ConstructorInvocation : public Expression { |
1302 public: | 1362 public: |
1303 static ConstructorInvocation* ReadFrom(Reader* reader, bool is_const); | 1363 static ConstructorInvocation* ReadFrom(Reader* reader, bool is_const); |
1304 | 1364 |
1305 virtual ~ConstructorInvocation(); | 1365 virtual ~ConstructorInvocation(); |
1306 | 1366 |
1307 DEFINE_CASTING_OPERATIONS(ConstructorInvocation); | 1367 DEFINE_CASTING_OPERATIONS(ConstructorInvocation); |
1308 | 1368 |
1309 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | 1369 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); |
1310 virtual void VisitChildren(Visitor* visitor); | 1370 virtual void VisitChildren(Visitor* visitor); |
1311 | 1371 |
1312 bool is_const() { return is_const_; } | 1372 bool is_const() { return is_const_; } |
1313 Constructor* target() { return target_; } | 1373 Constructor* target() { return target_reference_->AsConstructor(); } |
1314 Arguments* arguments() { return arguments_; } | 1374 Arguments* arguments() { return arguments_; } |
1315 | 1375 |
1316 private: | 1376 private: |
1317 ConstructorInvocation() {} | 1377 ConstructorInvocation() {} |
1318 | 1378 |
1319 bool is_const_; | 1379 bool is_const_; |
1320 Ref<Constructor> target_; | 1380 Ref<CanonicalName> target_reference_; |
1321 Child<Arguments> arguments_; | 1381 Child<Arguments> arguments_; |
1322 | 1382 |
1323 DISALLOW_COPY_AND_ASSIGN(ConstructorInvocation); | 1383 DISALLOW_COPY_AND_ASSIGN(ConstructorInvocation); |
1324 }; | 1384 }; |
1325 | 1385 |
1326 | 1386 |
1327 class Not : public Expression { | 1387 class Not : public Expression { |
1328 public: | 1388 public: |
1329 static Not* ReadFrom(Reader* reader); | 1389 static Not* ReadFrom(Reader* reader); |
1330 | 1390 |
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2456 static Name* ReadFrom(Reader* reader); | 2516 static Name* ReadFrom(Reader* reader); |
2457 | 2517 |
2458 virtual ~Name(); | 2518 virtual ~Name(); |
2459 | 2519 |
2460 DEFINE_CASTING_OPERATIONS(Name); | 2520 DEFINE_CASTING_OPERATIONS(Name); |
2461 | 2521 |
2462 virtual void AcceptVisitor(Visitor* visitor); | 2522 virtual void AcceptVisitor(Visitor* visitor); |
2463 virtual void VisitChildren(Visitor* visitor); | 2523 virtual void VisitChildren(Visitor* visitor); |
2464 | 2524 |
2465 String* string() { return string_; } | 2525 String* string() { return string_; } |
2466 Library* library() { return library_; } | 2526 Library* library() { |
| 2527 if (library_reference_ == NULL) return NULL; |
| 2528 return library_reference_->AsLibrary(); |
| 2529 } |
2467 | 2530 |
2468 private: | 2531 private: |
2469 Name(String* string, Library* library) | 2532 Name(String* string, CanonicalName* library_reference) |
2470 : string_(string), library_(library) {} // NOLINT | 2533 : string_(string), library_reference_(library_reference) {} // NOLINT |
2471 | 2534 |
2472 Ref<String> string_; | 2535 Ref<String> string_; |
2473 Ref<Library> library_; | 2536 Ref<CanonicalName> library_reference_; |
2474 | 2537 |
2475 DISALLOW_COPY_AND_ASSIGN(Name); | 2538 DISALLOW_COPY_AND_ASSIGN(Name); |
2476 }; | 2539 }; |
2477 | 2540 |
2478 | 2541 |
2479 class InferredValue : public Node { | 2542 class InferredValue : public Node { |
2480 public: | 2543 public: |
2481 static const uint8_t kNull = 1 << 0; | 2544 static const uint8_t kNull = 1 << 0; |
2482 static const uint8_t kInteger = 1 << 1; | 2545 static const uint8_t kInteger = 1 << 1; |
2483 static const uint8_t kDouble = 1 << 2; | 2546 static const uint8_t kDouble = 1 << 2; |
(...skipping 23 matching lines...) Expand all Loading... |
2507 bool CanBeNull() { return (value_bits_ & kNull) != 0; } | 2570 bool CanBeNull() { return (value_bits_ & kNull) != 0; } |
2508 bool CanBeInteger() { return (value_bits_ & kInteger) != 0; } | 2571 bool CanBeInteger() { return (value_bits_ & kInteger) != 0; } |
2509 bool CanBeDouble() { return (value_bits_ & kDouble) != 0; } | 2572 bool CanBeDouble() { return (value_bits_ & kDouble) != 0; } |
2510 bool CanBeString() { return (value_bits_ & kString) != 0; } | 2573 bool CanBeString() { return (value_bits_ & kString) != 0; } |
2511 | 2574 |
2512 bool IsAlwaysNull() { return value_bits_ == kNull; } | 2575 bool IsAlwaysNull() { return value_bits_ == kNull; } |
2513 bool IsAlwaysInteger() { return value_bits_ == kInteger; } | 2576 bool IsAlwaysInteger() { return value_bits_ == kInteger; } |
2514 bool IsAlwaysDouble() { return value_bits_ == kDouble; } | 2577 bool IsAlwaysDouble() { return value_bits_ == kDouble; } |
2515 bool IsAlwaysString() { return value_bits_ == kString; } | 2578 bool IsAlwaysString() { return value_bits_ == kString; } |
2516 | 2579 |
2517 Class* klass() { return klass_; } | 2580 Class* klass() { return klass_reference_->AsClass(); } |
2518 BaseClassKind kind() { return kind_; } | 2581 BaseClassKind kind() { return kind_; } |
2519 uint8_t value_bits() { return value_bits_; } | 2582 uint8_t value_bits() { return value_bits_; } |
2520 | 2583 |
2521 private: | 2584 private: |
2522 InferredValue() {} | 2585 InferredValue() {} |
2523 | 2586 |
2524 Ref<Class> klass_; | 2587 Ref<CanonicalName> klass_reference_; |
2525 BaseClassKind kind_; | 2588 BaseClassKind kind_; |
2526 uint8_t value_bits_; | 2589 uint8_t value_bits_; |
2527 | 2590 |
2528 DISALLOW_COPY_AND_ASSIGN(InferredValue); | 2591 DISALLOW_COPY_AND_ASSIGN(InferredValue); |
2529 }; | 2592 }; |
2530 | 2593 |
2531 | 2594 |
2532 class DartType : public Node { | 2595 class DartType : public Node { |
2533 public: | 2596 public: |
2534 static DartType* ReadFrom(Reader* reader); | 2597 static DartType* ReadFrom(Reader* reader); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2600 | 2663 |
2601 DISALLOW_COPY_AND_ASSIGN(VoidType); | 2664 DISALLOW_COPY_AND_ASSIGN(VoidType); |
2602 }; | 2665 }; |
2603 | 2666 |
2604 | 2667 |
2605 class InterfaceType : public DartType { | 2668 class InterfaceType : public DartType { |
2606 public: | 2669 public: |
2607 static InterfaceType* ReadFrom(Reader* reader); | 2670 static InterfaceType* ReadFrom(Reader* reader); |
2608 static InterfaceType* ReadFrom(Reader* reader, bool _without_type_arguments_); | 2671 static InterfaceType* ReadFrom(Reader* reader, bool _without_type_arguments_); |
2609 | 2672 |
2610 explicit InterfaceType(Class* klass) : klass_(klass) {} | 2673 explicit InterfaceType(CanonicalName* klass_reference) |
| 2674 : klass_reference_(klass_reference) {} |
2611 virtual ~InterfaceType(); | 2675 virtual ~InterfaceType(); |
2612 | 2676 |
2613 DEFINE_CASTING_OPERATIONS(InterfaceType); | 2677 DEFINE_CASTING_OPERATIONS(InterfaceType); |
2614 | 2678 |
2615 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor); | 2679 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor); |
2616 virtual void VisitChildren(Visitor* visitor); | 2680 virtual void VisitChildren(Visitor* visitor); |
2617 | 2681 |
2618 Class* klass() { return klass_; } | 2682 Class* klass() { return klass_reference_->AsClass(); } |
2619 List<DartType>& type_arguments() { return type_arguments_; } | 2683 List<DartType>& type_arguments() { return type_arguments_; } |
2620 | 2684 |
2621 private: | 2685 private: |
2622 InterfaceType() {} | 2686 InterfaceType() {} |
2623 | 2687 |
2624 Ref<Class> klass_; | 2688 Ref<CanonicalName> klass_reference_; |
2625 List<DartType> type_arguments_; | 2689 List<DartType> type_arguments_; |
2626 | 2690 |
2627 DISALLOW_COPY_AND_ASSIGN(InterfaceType); | 2691 DISALLOW_COPY_AND_ASSIGN(InterfaceType); |
2628 }; | 2692 }; |
2629 | 2693 |
2630 | 2694 |
2631 class FunctionType : public DartType { | 2695 class FunctionType : public DartType { |
2632 public: | 2696 public: |
2633 static FunctionType* ReadFrom(Reader* reader); | 2697 static FunctionType* ReadFrom(Reader* reader); |
2634 static FunctionType* ReadFrom(Reader* reader, bool _without_type_arguments_); | 2698 static FunctionType* ReadFrom(Reader* reader, bool _without_type_arguments_); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2719 | 2783 |
2720 DEFINE_CASTING_OPERATIONS(Program); | 2784 DEFINE_CASTING_OPERATIONS(Program); |
2721 | 2785 |
2722 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 2786 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
2723 virtual void VisitChildren(Visitor* visitor); | 2787 virtual void VisitChildren(Visitor* visitor); |
2724 | 2788 |
2725 StringTable& string_table() { return string_table_; } | 2789 StringTable& string_table() { return string_table_; } |
2726 StringTable& source_uri_table() { return source_uri_table_; } | 2790 StringTable& source_uri_table() { return source_uri_table_; } |
2727 SourceTable& source_table() { return source_table_; } | 2791 SourceTable& source_table() { return source_table_; } |
2728 List<Library>& libraries() { return libraries_; } | 2792 List<Library>& libraries() { return libraries_; } |
2729 Procedure* main_method() { return main_method_; } | 2793 Procedure* main_method() { |
| 2794 if (main_method_reference_ == NULL) return NULL; |
| 2795 return main_method_reference_->AsProcedure(); |
| 2796 } |
| 2797 CanonicalName* canonical_name_root() { return canonical_name_root_; } |
2730 | 2798 |
2731 private: | 2799 private: |
2732 Program() {} | 2800 Program() {} |
2733 | 2801 |
| 2802 Child<CanonicalName> canonical_name_root_; |
2734 List<Library> libraries_; | 2803 List<Library> libraries_; |
2735 Ref<Procedure> main_method_; | 2804 Ref<CanonicalName> main_method_reference_; |
2736 StringTable string_table_; | 2805 StringTable string_table_; |
2737 StringTable source_uri_table_; | 2806 StringTable source_uri_table_; |
2738 SourceTable source_table_; | 2807 SourceTable source_table_; |
2739 | 2808 |
2740 DISALLOW_COPY_AND_ASSIGN(Program); | 2809 DISALLOW_COPY_AND_ASSIGN(Program); |
2741 }; | 2810 }; |
2742 | 2811 |
2743 | 2812 |
2744 class Reference : public AllStatic { | 2813 class Reference : public AllStatic { |
2745 public: | 2814 public: |
2746 static Member* ReadMemberFrom(Reader* reader, bool allow_null = false); | 2815 static CanonicalName* ReadMemberFrom(Reader* reader, bool allow_null = false); |
2747 | 2816 |
2748 static Class* ReadClassFrom(Reader* reader, bool allow_null = false); | 2817 static CanonicalName* ReadClassFrom(Reader* reader, bool allow_null = false); |
2749 | 2818 |
2750 static String* ReadStringFrom(Reader* reader); | 2819 static String* ReadStringFrom(Reader* reader); |
2751 }; | 2820 }; |
2752 | 2821 |
2753 | 2822 |
2754 class ExpressionVisitor { | 2823 class ExpressionVisitor { |
2755 public: | 2824 public: |
2756 virtual ~ExpressionVisitor() {} | 2825 virtual ~ExpressionVisitor() {} |
2757 | 2826 |
2758 virtual void VisitDefaultExpression(Expression* node) = 0; | 2827 virtual void VisitDefaultExpression(Expression* node) = 0; |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3164 | 3233 |
3165 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 3234 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
3166 intptr_t buffer_length); | 3235 intptr_t buffer_length); |
3167 | 3236 |
3168 | 3237 |
3169 | 3238 |
3170 } // namespace dart | 3239 } // namespace dart |
3171 | 3240 |
3172 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 3241 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
3173 #endif // RUNTIME_VM_KERNEL_H_ | 3242 #endif // RUNTIME_VM_KERNEL_H_ |
OLD | NEW |