Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: runtime/vm/kernel.h

Issue 2665723002: Implement canonical name scheme in kernel. (Closed)
Patch Set: Address comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698