Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
dart::CidRewriteVisitor Class Reference
Inheritance diagram for dart::CidRewriteVisitor:
dart::ObjectVisitor

Public Member Functions

 CidRewriteVisitor (intptr_t *old_to_new_cids)
 
intptr_t Map (intptr_t cid)
 
void VisitObject (ObjectPtr obj) override
 
- Public Member Functions inherited from dart::ObjectVisitor
 ObjectVisitor ()
 
virtual ~ObjectVisitor ()
 

Detailed Description

Definition at line 1001 of file class_finalizer.cc.

Constructor & Destructor Documentation

◆ CidRewriteVisitor()

dart::CidRewriteVisitor::CidRewriteVisitor ( intptr_t *  old_to_new_cids)
inlineexplicit

Definition at line 1003 of file class_finalizer.cc.

1004 : old_to_new_cids_(old_to_new_cids) {}

Member Function Documentation

◆ Map()

intptr_t dart::CidRewriteVisitor::Map ( intptr_t  cid)
inline

Definition at line 1006 of file class_finalizer.cc.

1006 {
1007 ASSERT(cid != -1);
1008 return old_to_new_cids_[cid];
1009 }
#define ASSERT(E)
const intptr_t cid

◆ VisitObject()

void dart::CidRewriteVisitor::VisitObject ( ObjectPtr  obj)
inlineoverridevirtual

Implements dart::ObjectVisitor.

Definition at line 1011 of file class_finalizer.cc.

1011 {
1012 if (obj->IsClass()) {
1013 ClassPtr cls = Class::RawCast(obj);
1014 const classid_t old_cid = cls->untag()->id_;
1015 if (ClassTable::IsTopLevelCid(old_cid)) {
1016 // We don't remap cids of top level classes.
1017 return;
1018 }
1019 cls->untag()->id_ = Map(old_cid);
1020 cls->untag()->implementor_cid_ = Map(cls->untag()->implementor_cid_);
1021 } else if (obj->IsField()) {
1022 FieldPtr field = Field::RawCast(obj);
1023 field->untag()->guarded_cid_ = Map(field->untag()->guarded_cid_);
1024 field->untag()->is_nullable_ = Map(field->untag()->is_nullable_);
1025 } else if (obj->IsTypeParameter()) {
1026 TypeParameterPtr param = TypeParameter::RawCast(obj);
1028 param->untag()->flags())) {
1029 param->untag()->set_owner(
1030 Smi::New(Map(Smi::Value(Smi::RawCast(param->untag()->owner())))));
1031 }
1032 } else if (obj->IsType()) {
1033 TypePtr type = Type::RawCast(obj);
1034 type->untag()->set_type_class_id(Map(type->untag()->type_class_id()));
1035 } else {
1036 intptr_t old_cid = obj->GetClassId();
1037 intptr_t new_cid = Map(old_cid);
1038 if (old_cid != new_cid) {
1039 // Don't touch objects that are unchanged. In particular, Instructions,
1040 // which are write-protected.
1041 obj->untag()->SetClassIdUnsynchronized(new_cid);
1042 }
1043 }
1044 }
static constexpr T decode(S value)
Definition bitfield.h:173
intptr_t Map(intptr_t cid)
static bool IsTopLevelCid(intptr_t cid)
static ObjectPtr RawCast(ObjectPtr obj)
Definition object.h:325
static SmiPtr New(intptr_t value)
Definition object.h:9985
intptr_t Value() const
Definition object.h:9969
int32_t classid_t
Definition globals.h:524

The documentation for this class was generated from the following file: