Chromium Code Reviews| Index: runtime/vm/class_finalizer.cc |
| diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc |
| index 98d74ff073efddae795a4921b18cbceedb87f616..d5f3d5688f56e0e38af6d1c195a53448e1e20ba1 100644 |
| --- a/runtime/vm/class_finalizer.cc |
| +++ b/runtime/vm/class_finalizer.cc |
| @@ -2478,16 +2478,34 @@ void ClassFinalizer::AllocateEnumValues(const Class& enum_cls) { |
| ASSERT(Instance::Handle(zone, values_field.StaticValue()).IsArray()); |
| Array& values_list = |
| Array::Handle(zone, Array::RawCast(values_field.StaticValue())); |
| + const String& enum_name = String::Handle(enum_cls.ScrubbedName()); |
| + const String& name_prefix = |
| + String::Handle(String::Concat(enum_name, Symbols::Dot())); |
| + |
| + const String& deleted_enum_senintel_name = String::Handle( |
| + zone, |
| + Symbols::FromConcat(thread, Symbols::_DeletedEnumPrefix(), enum_name)); |
| + Instance& deleted_enum_sentinel_value = |
| + Instance::Handle(zone, Instance::New(enum_cls, Heap::kOld)); |
| + deleted_enum_sentinel_value.SetField(index_field, |
| + Smi::Handle(zone, Smi::New(-1))); |
| + deleted_enum_sentinel_value.SetField(name_field, deleted_enum_senintel_name); |
| + const char* error_msg = NULL; |
| + deleted_enum_sentinel_value = |
| + deleted_enum_sentinel_value.CheckAndCanonicalize(thread, &error_msg); |
| + ASSERT(!deleted_enum_sentinel_value.IsNull()); |
| + ASSERT(deleted_enum_sentinel_value.IsCanonical()); |
| + const Field& deleted_enum_field = Field::Handle( |
| + zone, enum_cls.LookupStaticField(Symbols::_DeletedEnumSentinel())); |
| + ASSERT(!deleted_enum_field.IsNull()); |
| + deleted_enum_field.SetStaticValue(deleted_enum_sentinel_value, true); |
| + deleted_enum_field.RecordStore(deleted_enum_sentinel_value); |
| const Array& fields = Array::Handle(zone, enum_cls.fields()); |
| Field& field = Field::Handle(zone); |
| Instance& ordinal_value = Instance::Handle(zone); |
| Instance& enum_value = Instance::Handle(zone); |
| - const String& enum_name = String::Handle(enum_cls.ScrubbedName()); |
| - const String& name_prefix = |
| - String::Handle(String::Concat(enum_name, Symbols::Dot())); |
| - |
| String& enum_ident = String::Handle(); |
|
siva
2016/11/14 22:18:23
A samll nit, the same handles created here field,
Cutch
2016/11/15 22:13:55
Done.
|
| for (intptr_t i = 0; i < fields.Length(); i++) { |
| field = Field::RawCast(fields.At(i)); |
| @@ -2509,7 +2527,6 @@ void ClassFinalizer::AllocateEnumValues(const Class& enum_cls) { |
| enum_value = Instance::New(enum_cls, Heap::kOld); |
| enum_value.SetField(index_field, ordinal_value); |
| enum_value.SetField(name_field, enum_ident); |
| - const char* error_msg = ""; |
| enum_value = enum_value.CheckAndCanonicalize(thread, &error_msg); |
| ASSERT(!enum_value.IsNull()); |
| ASSERT(enum_value.IsCanonical()); |
| @@ -2520,7 +2537,6 @@ void ClassFinalizer::AllocateEnumValues(const Class& enum_cls) { |
| values_list.SetAt(ord, enum_value); |
| } |
| values_list.MakeImmutable(); |
| - const char* error_msg = NULL; |
| values_list ^= values_list.CheckAndCanonicalize(thread, &error_msg); |
| ASSERT(!values_list.IsNull()); |
| } |