Index: runtime/vm/object.h |
=================================================================== |
--- runtime/vm/object.h (revision 12790) |
+++ runtime/vm/object.h (working copy) |
@@ -266,6 +266,7 @@ |
static RawClass* patch_class_class() { return patch_class_class_; } |
static RawClass* function_class() { return function_class_; } |
static RawClass* closure_data_class() { return closure_data_class_; } |
+ static RawClass* redirection_data_class() { return redirection_data_class_; } |
static RawClass* field_class() { return field_class_; } |
static RawClass* literal_token_class() { return literal_token_class_; } |
static RawClass* token_stream_class() { return token_stream_class_; } |
@@ -397,6 +398,7 @@ |
static RawClass* patch_class_class_; // Class of the PatchClass vm object. |
static RawClass* function_class_; // Class of the Function vm object. |
static RawClass* closure_data_class_; // Class of ClosureData vm obj. |
+ static RawClass* redirection_data_class_; // Class of RedirectionData vm obj. |
static RawClass* field_class_; // Class of the Field vm object. |
static RawClass* literal_token_class_; // Class of LiteralToken vm object. |
static RawClass* token_stream_class_; // Class of the TokenStream vm object. |
@@ -1417,6 +1419,15 @@ |
// If none exists yet, create one and remember it. |
RawFunction* ImplicitClosureFunction() const; |
+ // Redirection information for a redirecting factory. |
+ bool IsRedirectingFactory() const; |
+ RawType* RedirectionType() const; |
+ void SetRedirectionType(const Type& type) const; |
+ RawString* RedirectionIdentifier() const; |
+ void SetRedirectionIdentifier(const String& identifier) const; |
+ RawFunction* RedirectionTarget() const; |
+ void SetRedirectionTarget(const Function& target) const; |
+ |
RawFunction::Kind kind() const { |
return KindBits::decode(raw_ptr()->kind_tag_); |
} |
@@ -1762,6 +1773,34 @@ |
}; |
+class RedirectionData: public Object { |
+ public: |
+ static intptr_t InstanceSize() { |
+ return RoundedAllocationSize(sizeof(RawRedirectionData)); |
+ } |
+ |
+ private: |
+ // The type specifies the class and type arguments of the target constructor. |
+ RawType* type() const { return raw_ptr()->type_; } |
+ void set_type(const Type& value) const; |
+ |
+ // The optional identifier specifies a named constructor. |
+ RawString* identifier() const { return raw_ptr()->identifier_; } |
+ void set_identifier(const String& value) const; |
+ |
+ // The resolved constructor or factory target of the redirection. |
+ RawFunction* target() const { return raw_ptr()->target_; } |
+ void set_target(const Function& value) const; |
+ |
+ static RawRedirectionData* New(); |
+ |
+ HEAP_OBJECT_IMPLEMENTATION(RedirectionData, Object); |
+ friend class Class; |
+ friend class Function; |
+ friend class HeapProfiler; |
+}; |
+ |
+ |
class Field : public Object { |
public: |
RawString* name() const { return raw_ptr()->name_; } |