@@ -4,8 +4,7 @@ namespace rt::objects
44{
55 Region* get_region (DynObject* obj)
66 {
7- if ((obj == nullptr ) || obj->is_immutable ())
8- return nullptr ;
7+ assert (obj != nullptr );
98 return obj->region .get_ptr ();
109 }
1110
@@ -75,7 +74,11 @@ namespace rt::objects
7574 }
7675
7776 // Handle immutable case
78- if (target == nullptr )
77+ if (target == immutable_region)
78+ return ;
79+
80+ // Handle cown case
81+ if (target == cown_region)
7982 return ;
8083
8184 if (src == get_local_region ())
@@ -94,6 +97,7 @@ namespace rt::objects
9497
9598 void add_region_reference (Region* src_region, DynObject* target)
9699 {
100+ assert (target != nullptr );
97101 if (target->is_immutable ())
98102 return ;
99103
@@ -118,6 +122,7 @@ namespace rt::objects
118122
119123 void add_reference (DynObject* src, DynObject* target)
120124 {
125+ assert (src != nullptr );
121126 if (target == nullptr )
122127 return ;
123128
@@ -149,7 +154,9 @@ namespace rt::objects
149154
150155 void move_reference (DynObject* src, DynObject* dst, DynObject* target)
151156 {
152- if (target == nullptr || target->is_immutable ())
157+ assert (src != nullptr );
158+ assert (dst != nullptr );
159+ if (target == nullptr || target->is_immutable () || target->is_cown ())
153160 return ;
154161
155162 auto src_region = get_region (src);
@@ -173,6 +180,8 @@ namespace rt::objects
173180 // If in the same region, then just remove the RC, but don't try to collect
174181 // as the whole region is being torndown including any potential cycles.
175182 auto same_region = [](DynObject* src, DynObject* target) {
183+ assert (src != nullptr );
184+ assert (target != nullptr );
176185 return get_region (src) == get_region (target);
177186 };
178187 for (auto & [key, field] : obj->fields )
@@ -190,8 +199,9 @@ namespace rt::objects
190199 remove_reference (obj, old_value);
191200 }
192201
193- if (same_region (obj, obj->prototype ))
202+ if ((obj-> prototype != nullptr ) && same_region (obj, obj->prototype ))
194203 {
204+ // TODO When freeze is no longer immortal, this will need to be updated.
195205 obj->prototype ->change_rc (-1 );
196206 }
197207 else
0 commit comments