Chromium Code Reviews| Index: runtime/vm/dart_api_impl.cc |
| =================================================================== |
| --- runtime/vm/dart_api_impl.cc (revision 32267) |
| +++ runtime/vm/dart_api_impl.cc (working copy) |
| @@ -3059,21 +3059,25 @@ |
| } |
| const Class& cls = Class::Handle(isolate, type_obj.type_class()); |
| - // Mark all fields as nullable. |
| - Class& iterate_cls = Class::Handle(isolate, cls.raw()); |
| - Field& field = Field::Handle(isolate); |
| - Array& fields = Array::Handle(isolate); |
| - while (!iterate_cls.IsNull()) { |
| - fields = iterate_cls.fields(); |
| - iterate_cls = iterate_cls.SuperClass(); |
| - for (int field_num = 0; field_num < fields.Length(); field_num++) { |
| - field ^= fields.At(field_num); |
| - if (field.is_static()) { |
| - continue; |
| + if (!cls.is_updated_guarded_cid()) { |
|
srdjan
2014/02/04 00:36:55
Change the name as discussed offline (something a
siva
2014/02/04 00:52:25
Done.
|
| + // Mark all fields as nullable. |
| + Class& iterate_cls = Class::Handle(isolate, cls.raw()); |
| + Field& field = Field::Handle(isolate); |
| + Array& fields = Array::Handle(isolate); |
| + while (!iterate_cls.IsNull()) { |
| + iterate_cls.set_is_updated_guarded_cid(); |
| + fields = iterate_cls.fields(); |
| + iterate_cls = iterate_cls.SuperClass(); |
| + for (int field_num = 0; field_num < fields.Length(); field_num++) { |
| + field ^= fields.At(field_num); |
| + if (field.is_static()) { |
| + continue; |
| + } |
| + field.UpdateGuardedCidAndLength(Object::null_object()); |
| } |
| - field.UpdateGuardedCidAndLength(Object::null_object()); |
| } |
| } |
| + |
| // Allocate an object for the given class. |
| return Api::NewHandle(isolate, Instance::New(cls)); |
| } |