| Index: runtime/vm/object.h
|
| diff --git a/runtime/vm/object.h b/runtime/vm/object.h
|
| index 3d36a76859cb210e9648811c0b039a22e6865e7b..9000362f5e7b99c5442567c42fc69139171862e8 100644
|
| --- a/runtime/vm/object.h
|
| +++ b/runtime/vm/object.h
|
| @@ -1716,8 +1716,8 @@ class TypeArguments : public Object {
|
| class PatchClass : public Object {
|
| public:
|
| RawClass* patched_class() const { return raw_ptr()->patched_class_; }
|
| - RawClass* source_class() const { return raw_ptr()->source_class_; }
|
| - RawScript* Script() const;
|
| + RawClass* origin_class() const { return raw_ptr()->origin_class_; }
|
| + RawScript* script() const { return raw_ptr()->script_; }
|
|
|
| static intptr_t InstanceSize() {
|
| return RoundedAllocationSize(sizeof(RawPatchClass));
|
| @@ -1728,11 +1728,15 @@ class PatchClass : public Object {
|
| }
|
|
|
| static RawPatchClass* New(const Class& patched_class,
|
| - const Class& source_class);
|
| + const Class& origin_class);
|
| +
|
| + static RawPatchClass* New(const Class& patched_class,
|
| + const Script& source);
|
|
|
| private:
|
| void set_patched_class(const Class& value) const;
|
| - void set_source_class(const Class& value) const;
|
| + void set_origin_class(const Class& value) const;
|
| + void set_script(const Script& value) const;
|
|
|
| static RawPatchClass* New();
|
|
|
| @@ -2136,6 +2140,7 @@ class Function : public Object {
|
| RawClass* Owner() const;
|
| RawClass* origin() const;
|
| RawScript* script() const;
|
| + RawObject* RawOwner() const { return raw_ptr()->owner_; }
|
|
|
| RawJSRegExp* regexp() const;
|
| intptr_t string_specialization_cid() const;
|
| @@ -2863,6 +2868,9 @@ class Field : public Object {
|
| bool is_reflectable() const {
|
| return ReflectableBit::decode(raw_ptr()->kind_bits_);
|
| }
|
| + void set_is_reflectable(bool value) const {
|
| + set_kind_bits(ReflectableBit::update(value, raw_ptr()->kind_bits_));
|
| + }
|
| bool is_double_initialized() const {
|
| return DoubleInitializedBit::decode(raw_ptr()->kind_bits_);
|
| }
|
| @@ -2883,6 +2891,8 @@ class Field : public Object {
|
|
|
| RawClass* owner() const;
|
| RawClass* origin() const; // Either mixin class, or same as owner().
|
| + RawScript* script() const;
|
| + RawObject* RawOwner() const { return raw_ptr()->owner_; }
|
|
|
| RawAbstractType* type() const { return raw_ptr()->type_; }
|
| // Used by class finalizer, otherwise initialized in constructor.
|
| @@ -2901,6 +2911,12 @@ class Field : public Object {
|
| const AbstractType& type,
|
| intptr_t token_pos);
|
|
|
| + static RawField* NewTopLevel(const String& name,
|
| + bool is_final,
|
| + bool is_const,
|
| + const Object& owner,
|
| + intptr_t token_pos);
|
| +
|
| // Allocate new field object, clone values from this field. The
|
| // owner of the clone is new_owner.
|
| RawField* Clone(const Class& new_owner) const;
|
| @@ -3089,9 +3105,6 @@ class Field : public Object {
|
| void set_is_const(bool value) const {
|
| set_kind_bits(ConstBit::update(value, raw_ptr()->kind_bits_));
|
| }
|
| - void set_is_reflectable(bool value) const {
|
| - set_kind_bits(ReflectableBit::update(value, raw_ptr()->kind_bits_));
|
| - }
|
| void set_owner(const Object& value) const {
|
| StorePointer(&raw_ptr()->owner_, value.raw());
|
| }
|
| @@ -3317,6 +3330,8 @@ class DictionaryIterator : public ValueObject {
|
| class ClassDictionaryIterator : public DictionaryIterator {
|
| public:
|
| enum IterationKind {
|
| + // TODO(hausner): fix call sites that use kIteratePrivate. There is only
|
| + // one top-level class per library left, not an array to iterate over.
|
| kIteratePrivate,
|
| kNoIteratePrivate
|
| };
|
| @@ -3324,7 +3339,9 @@ class ClassDictionaryIterator : public DictionaryIterator {
|
| ClassDictionaryIterator(const Library& library,
|
| IterationKind kind = kNoIteratePrivate);
|
|
|
| - bool HasNext() const { return (next_ix_ < size_) || (anon_ix_ < anon_size_); }
|
| + bool HasNext() const {
|
| + return (next_ix_ < size_) || !toplevel_class_.IsNull();
|
| + }
|
|
|
| // Returns a non-null raw class.
|
| RawClass* GetNextClass();
|
| @@ -3332,9 +3349,7 @@ class ClassDictionaryIterator : public DictionaryIterator {
|
| private:
|
| void MoveToNextClass();
|
|
|
| - const Array& anon_array_;
|
| - const int anon_size_; // Number of anonymous classes to iterate over.
|
| - int anon_ix_; // Index of next anonymous class.
|
| + Class& toplevel_class_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ClassDictionaryIterator);
|
| };
|
| @@ -3430,17 +3445,19 @@ class Library : public Object {
|
| void AddExport(const Namespace& ns) const;
|
|
|
| void AddClassMetadata(const Class& cls,
|
| - const Class& toplevel_class,
|
| + const Object& tl_owner,
|
| intptr_t token_pos) const;
|
| void AddFieldMetadata(const Field& field, intptr_t token_pos) const;
|
| void AddFunctionMetadata(const Function& func, intptr_t token_pos) const;
|
| - void AddLibraryMetadata(const Class& cls, intptr_t token_pos) const;
|
| + void AddLibraryMetadata(const Object& tl_owner, intptr_t token_pos) const;
|
| void AddTypeParameterMetadata(const TypeParameter& param,
|
| intptr_t token_pos) const;
|
| RawObject* GetMetadata(const Object& obj) const;
|
|
|
| - intptr_t num_anonymous_classes() const { return raw_ptr()->num_anonymous_; }
|
| - RawArray* anonymous_classes() const { return raw_ptr()->anonymous_classes_; }
|
| + RawClass* toplevel_class() const {
|
| + return raw_ptr()->toplevel_class_;
|
| + }
|
| + void set_toplevel_class(const Class& value) const;
|
|
|
| RawGrowableObjectArray* patch_classes() const {
|
| return raw_ptr()->patch_classes_;
|
| @@ -3588,7 +3605,7 @@ class Library : public Object {
|
|
|
| RawString* MakeMetadataName(const Object& obj) const;
|
| RawField* GetMetadataField(const String& metaname) const;
|
| - void AddMetadata(const Class& cls,
|
| + void AddMetadata(const Object& owner,
|
| const String& name,
|
| intptr_t token_pos) const;
|
|
|
| @@ -3611,7 +3628,7 @@ class Namespace : public Object {
|
| RawArray* show_names() const { return raw_ptr()->show_names_; }
|
| RawArray* hide_names() const { return raw_ptr()->hide_names_; }
|
|
|
| - void AddMetadata(intptr_t token_pos, const Class& owner_class);
|
| + void AddMetadata(const Object& owner, intptr_t token_pos);
|
| RawObject* GetMetadata() const;
|
|
|
| static intptr_t InstanceSize() {
|
|
|