@@ -3834,7 +3834,11 @@ bool Class::InjectCIDFields() const {
38343834 const AbstractType& field_type = Type::Handle(zone, Type::IntType());
38353835 for (size_t i = 0; i < ARRAY_SIZE(cid_fields); i++) {
38363836 field_name = Symbols::New(thread, cid_fields[i].field_name);
3837- field = Field::New(field_name, true, false, true, false, *this, field_type,
3837+ field = Field::New(field_name, /* is_static = */ true,
3838+ /* is_final = */ false,
3839+ /* is_const = */ true,
3840+ /* is_reflectable = */ false,
3841+ /* is_late = */ false, *this, field_type,
38383842 TokenPosition::kMinSource, TokenPosition::kMinSource);
38393843 value = Smi::New(cid_fields[i].cid);
38403844 field.SetStaticValue(value, true);
@@ -8746,6 +8750,7 @@ void Field::InitializeNew(const Field& result,
87468750 bool is_final,
87478751 bool is_const,
87488752 bool is_reflectable,
8753+ bool is_late,
87498754 const Object& owner,
87508755 TokenPosition token_pos,
87518756 TokenPosition end_token_pos) {
@@ -8758,13 +8763,14 @@ void Field::InitializeNew(const Field& result,
87588763 result.set_is_final(is_final);
87598764 result.set_is_const(is_const);
87608765 result.set_is_reflectable(is_reflectable);
8766+ result.set_is_late(is_late);
87618767 result.set_is_double_initialized(false);
87628768 result.set_owner(owner);
87638769 result.set_token_pos(token_pos);
87648770 result.set_end_token_pos(end_token_pos);
87658771 result.set_has_nontrivial_initializer(false);
87668772 result.set_has_initializer(false);
8767- result.set_is_unboxing_candidate(!is_final);
8773+ result.set_is_unboxing_candidate(!is_final && !is_late );
87688774 result.set_initializer_changed_after_initialization(false);
87698775 NOT_IN_PRECOMPILED(result.set_is_declared_in_bytecode(false));
87708776 NOT_IN_PRECOMPILED(result.set_binary_declaration_offset(0));
@@ -8800,29 +8806,31 @@ RawField* Field::New(const String& name,
88008806 bool is_final,
88018807 bool is_const,
88028808 bool is_reflectable,
8809+ bool is_late,
88038810 const Object& owner,
88048811 const AbstractType& type,
88058812 TokenPosition token_pos,
88068813 TokenPosition end_token_pos) {
88078814 ASSERT(!owner.IsNull());
88088815 const Field& result = Field::Handle(Field::New());
88098816 InitializeNew(result, name, is_static, is_final, is_const, is_reflectable,
8810- owner, token_pos, end_token_pos);
8817+ is_late, owner, token_pos, end_token_pos);
88118818 result.SetFieldType(type);
88128819 return result.raw();
88138820}
88148821
88158822RawField* Field::NewTopLevel(const String& name,
88168823 bool is_final,
88178824 bool is_const,
8825+ bool is_late,
88188826 const Object& owner,
88198827 TokenPosition token_pos,
88208828 TokenPosition end_token_pos) {
88218829 ASSERT(!owner.IsNull());
88228830 const Field& result = Field::Handle(Field::New());
88238831 InitializeNew(result, name, true, /* is_static */
88248832 is_final, is_const, true, /* is_reflectable */
8825- owner, token_pos, end_token_pos);
8833+ is_late, owner, token_pos, end_token_pos);
88268834 return result.raw();
88278835}
88288836
@@ -10240,6 +10248,7 @@ void Library::AddMetadata(const Object& owner,
1024010248 Field::Handle(zone, Field::NewTopLevel(metaname,
1024110249 false, // is_final
1024210250 false, // is_const
10251+ false, // is_late
1024310252 owner, token_pos, token_pos));
1024410253 field.SetFieldType(Object::dynamic_type());
1024510254 field.set_is_reflectable(false);
@@ -12002,6 +12011,7 @@ void Namespace::AddMetadata(const Object& owner,
1200212011 Field& field = Field::Handle(Field::NewTopLevel(Symbols::TopLevel(),
1200312012 false, // is_final
1200412013 false, // is_const
12014+ false, // is_late
1200512015 owner, token_pos, token_pos));
1200612016 field.set_is_reflectable(false);
1200712017 field.SetFieldType(Object::dynamic_type());
0 commit comments