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

Unified Diff: runtime/vm/kernel.h

Issue 2665723002: Implement canonical name scheme in kernel. (Closed)
Patch Set: Address Kevin's 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/kernel/test/verify_test.dart ('k') | runtime/vm/kernel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel.h
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index b3450f6f8f850bf37ab791a211fbd1ed7912a299..778c65bf8eea5c88ffc9dd45ec733c5f42eaed65 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -357,6 +357,49 @@ KERNEL_VISITORS_DO(DO)
DEFINE_IS_OPERATION(TreeNode) \
KERNEL_TREE_NODES_DO(DEFINE_IS_OPERATION)
+class Class;
+class Constructor;
+class Field;
+class Library;
+class LinkedNode;
+class Member;
+class Procedure;
+
+class CanonicalName {
+ public:
+ ~CanonicalName();
+
+ String* name() { return name_; }
+ CanonicalName* parent() { return parent_; }
+ LinkedNode* definition() { return definition_; }
+ bool is_referenced() { return is_referenced_; }
+ void set_referenced(bool referenced) { is_referenced_ = referenced; }
+
+ void BindTo(LinkedNode* definition);
+ void Unbind();
+ CanonicalName* AddChild(String* name);
+
+ Library* AsLibrary();
+ Class* AsClass();
+ Member* AsMember();
+ Field* AsField();
+ Constructor* AsConstructor();
+ Procedure* AsProcedure();
+
+ static CanonicalName* NewRoot();
+
+ private:
+ CanonicalName();
+
+ bool is_referenced_;
+ Ref<CanonicalName> parent_;
+ Ref<String> name_;
+ Ref<LinkedNode> definition_;
+ MallocGrowableArray<CanonicalName*> children_;
+
+ DISALLOW_COPY_AND_ASSIGN(CanonicalName);
+};
+
class Node {
public:
@@ -401,7 +444,25 @@ class TreeNode : public Node {
};
-class Library : public TreeNode {
+class LinkedNode : public TreeNode {
+ public:
+ virtual ~LinkedNode();
+
+ CanonicalName* canonical_name() { return canonical_name_; }
+
+ protected:
+ LinkedNode() {}
+
+ private:
+ Ref<CanonicalName> canonical_name_;
+
+ friend class CanonicalName;
+
+ DISALLOW_COPY_AND_ASSIGN(LinkedNode);
+};
+
+
+class Library : public LinkedNode {
public:
Library* ReadFrom(Reader* reader);
@@ -458,7 +519,7 @@ class Library : public TreeNode {
};
-class Class : public TreeNode {
+class Class : public LinkedNode {
public:
Class* ReadFrom(Reader* reader);
@@ -581,7 +642,7 @@ class MixinClass : public Class {
};
-class Member : public TreeNode {
+class Member : public LinkedNode {
public:
virtual ~Member();
@@ -797,13 +858,13 @@ class FieldInitializer : public Initializer {
virtual void AcceptInitializerVisitor(InitializerVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Field* field() { return field_; }
+ Field* field() { return field_reference_->AsField(); }
Expression* value() { return value_; }
private:
FieldInitializer() {}
- Ref<Field> field_;
+ Ref<CanonicalName> field_reference_;
Child<Expression> value_;
DISALLOW_COPY_AND_ASSIGN(FieldInitializer);
@@ -821,13 +882,13 @@ class SuperInitializer : public Initializer {
virtual void AcceptInitializerVisitor(InitializerVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Constructor* target() { return target_; }
+ Constructor* target() { return target_reference_->AsConstructor(); }
Arguments* arguments() { return arguments_; }
private:
SuperInitializer() {}
- Ref<Constructor> target_;
+ Ref<CanonicalName> target_reference_;
Child<Arguments> arguments_;
DISALLOW_COPY_AND_ASSIGN(SuperInitializer);
@@ -845,13 +906,13 @@ class RedirectingInitializer : public Initializer {
virtual void AcceptInitializerVisitor(InitializerVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Constructor* target() { return target_; }
+ Constructor* target() { return target_reference_->AsConstructor(); }
Arguments* arguments() { return arguments_; }
private:
RedirectingInitializer() {}
- Ref<Constructor> target_;
+ Ref<CanonicalName> target_reference_;
Child<Arguments> arguments_;
DISALLOW_COPY_AND_ASSIGN(RedirectingInitializer);
@@ -1040,7 +1101,7 @@ class PropertyGet : public Expression {
Child<Expression> receiver_;
Child<Name> name_;
- Ref<Member> interfaceTarget_;
+ Ref<CanonicalName> interface_target_reference_;
DISALLOW_COPY_AND_ASSIGN(PropertyGet);
};
@@ -1067,7 +1128,7 @@ class PropertySet : public Expression {
Child<Expression> receiver_;
Child<Name> name_;
Child<Expression> value_;
- Ref<Member> interfaceTarget_;
+ Ref<CanonicalName> interface_target_reference_;
DISALLOW_COPY_AND_ASSIGN(PropertySet);
};
@@ -1085,13 +1146,13 @@ class DirectPropertyGet : public Expression {
virtual void VisitChildren(Visitor* visitor);
Expression* receiver() { return receiver_; }
- Member* target() { return target_; }
+ Member* target() { return target_reference_->AsMember(); }
private:
DirectPropertyGet() {}
Child<Expression> receiver_;
- Ref<Member> target_;
+ Ref<CanonicalName> target_reference_;
DISALLOW_COPY_AND_ASSIGN(DirectPropertyGet);
};
@@ -1109,14 +1170,14 @@ class DirectPropertySet : public Expression {
virtual void VisitChildren(Visitor* visitor);
Expression* receiver() { return receiver_; }
- Member* target() { return target_; }
+ Member* target() { return target_reference_->AsMember(); }
Expression* value() { return value_; }
private:
DirectPropertySet() {}
Child<Expression> receiver_;
- Ref<Member> target_;
+ Ref<CanonicalName> target_reference_;
Child<Expression> value_;
DISALLOW_COPY_AND_ASSIGN(DirectPropertySet);
@@ -1134,12 +1195,12 @@ class StaticGet : public Expression {
virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Member* target() { return target_; }
+ Member* target() { return target_reference_->AsMember(); }
private:
StaticGet() {}
- Ref<Member> target_;
+ Ref<CanonicalName> target_reference_;
DISALLOW_COPY_AND_ASSIGN(StaticGet);
};
@@ -1156,13 +1217,13 @@ class StaticSet : public Expression {
virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Member* target() { return target_; }
+ Member* target() { return target_reference_->AsMember(); }
Expression* expression() { return expression_; }
private:
StaticSet() {}
- Ref<Member> target_;
+ Ref<CanonicalName> target_reference_;
Child<Expression> expression_;
DISALLOW_COPY_AND_ASSIGN(StaticSet);
@@ -1244,7 +1305,7 @@ class MethodInvocation : public Expression {
Child<Expression> receiver_;
Child<Name> name_;
Child<Arguments> arguments_;
- Ref<Member> interfaceTarget_;
+ Ref<CanonicalName> interface_target_reference_;
DISALLOW_COPY_AND_ASSIGN(MethodInvocation);
};
@@ -1262,14 +1323,14 @@ class DirectMethodInvocation : public Expression {
virtual void VisitChildren(Visitor* visitor);
Expression* receiver() { return receiver_; }
- Procedure* target() { return target_; }
+ Procedure* target() { return target_reference_->AsProcedure(); }
Arguments* arguments() { return arguments_; }
private:
DirectMethodInvocation() {}
Child<Expression> receiver_;
- Ref<Procedure> target_;
+ Ref<CanonicalName> target_reference_;
Child<Arguments> arguments_;
DISALLOW_COPY_AND_ASSIGN(DirectMethodInvocation);
@@ -1284,14 +1345,14 @@ class StaticInvocation : public Expression {
virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Procedure* procedure() { return procedure_; }
+ Procedure* procedure() { return procedure_reference_->AsProcedure(); }
Arguments* arguments() { return arguments_; }
bool is_const() { return is_const_; }
private:
StaticInvocation() {}
- Ref<Procedure> procedure_;
+ Ref<CanonicalName> procedure_reference_;
Child<Arguments> arguments_;
bool is_const_;
@@ -1311,14 +1372,14 @@ class ConstructorInvocation : public Expression {
virtual void VisitChildren(Visitor* visitor);
bool is_const() { return is_const_; }
- Constructor* target() { return target_; }
+ Constructor* target() { return target_reference_->AsConstructor(); }
Arguments* arguments() { return arguments_; }
private:
ConstructorInvocation() {}
bool is_const_;
- Ref<Constructor> target_;
+ Ref<CanonicalName> target_reference_;
Child<Arguments> arguments_;
DISALLOW_COPY_AND_ASSIGN(ConstructorInvocation);
@@ -2464,14 +2525,17 @@ class Name : public Node {
virtual void VisitChildren(Visitor* visitor);
String* string() { return string_; }
- Library* library() { return library_; }
+ Library* library() {
+ if (library_reference_ == NULL) return NULL;
+ return library_reference_->AsLibrary();
+ }
private:
- Name(String* string, Library* library)
- : string_(string), library_(library) {} // NOLINT
+ Name(String* string, CanonicalName* library_reference)
+ : string_(string), library_reference_(library_reference) {} // NOLINT
Ref<String> string_;
- Ref<Library> library_;
+ Ref<CanonicalName> library_reference_;
DISALLOW_COPY_AND_ASSIGN(Name);
};
@@ -2515,14 +2579,14 @@ class InferredValue : public Node {
bool IsAlwaysDouble() { return value_bits_ == kDouble; }
bool IsAlwaysString() { return value_bits_ == kString; }
- Class* klass() { return klass_; }
+ Class* klass() { return klass_reference_->AsClass(); }
BaseClassKind kind() { return kind_; }
uint8_t value_bits() { return value_bits_; }
private:
InferredValue() {}
- Ref<Class> klass_;
+ Ref<CanonicalName> klass_reference_;
BaseClassKind kind_;
uint8_t value_bits_;
@@ -2608,7 +2672,8 @@ class InterfaceType : public DartType {
static InterfaceType* ReadFrom(Reader* reader);
static InterfaceType* ReadFrom(Reader* reader, bool _without_type_arguments_);
- explicit InterfaceType(Class* klass) : klass_(klass) {}
+ explicit InterfaceType(CanonicalName* klass_reference)
+ : klass_reference_(klass_reference) {}
virtual ~InterfaceType();
DEFINE_CASTING_OPERATIONS(InterfaceType);
@@ -2616,13 +2681,13 @@ class InterfaceType : public DartType {
virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor);
virtual void VisitChildren(Visitor* visitor);
- Class* klass() { return klass_; }
+ Class* klass() { return klass_reference_->AsClass(); }
List<DartType>& type_arguments() { return type_arguments_; }
private:
InterfaceType() {}
- Ref<Class> klass_;
+ Ref<CanonicalName> klass_reference_;
List<DartType> type_arguments_;
DISALLOW_COPY_AND_ASSIGN(InterfaceType);
@@ -2727,15 +2792,20 @@ class Program : public TreeNode {
StringTable& source_uri_table() { return source_uri_table_; }
SourceTable& source_table() { return source_table_; }
List<Library>& libraries() { return libraries_; }
- Procedure* main_method() { return main_method_; }
+ Procedure* main_method() {
+ if (main_method_reference_ == NULL) return NULL;
+ return main_method_reference_->AsProcedure();
+ }
+ CanonicalName* canonical_name_root() { return canonical_name_root_; }
MallocGrowableArray<MallocGrowableArray<intptr_t>*> valid_token_positions;
MallocGrowableArray<MallocGrowableArray<intptr_t>*> yield_token_positions;
private:
Program() {}
+ Child<CanonicalName> canonical_name_root_;
List<Library> libraries_;
- Ref<Procedure> main_method_;
+ Ref<CanonicalName> main_method_reference_;
StringTable string_table_;
StringTable source_uri_table_;
SourceTable source_table_;
@@ -2746,9 +2816,9 @@ class Program : public TreeNode {
class Reference : public AllStatic {
public:
- static Member* ReadMemberFrom(Reader* reader, bool allow_null = false);
+ static CanonicalName* ReadMemberFrom(Reader* reader, bool allow_null = false);
- static Class* ReadClassFrom(Reader* reader, bool allow_null = false);
+ static CanonicalName* ReadClassFrom(Reader* reader, bool allow_null = false);
static String* ReadStringFrom(Reader* reader);
};
« no previous file with comments | « pkg/kernel/test/verify_test.dart ('k') | runtime/vm/kernel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698