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

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

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

Powered by Google App Engine
This is Rietveld 408576698