| Index: runtime/vm/class_finalizer.cc
|
| diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
|
| index 1db03051a164a076847afb7bb13c2a246216395d..cde45ccb5a1447cac552b7709d5e7315ee5ac011 100644
|
| --- a/runtime/vm/class_finalizer.cc
|
| +++ b/runtime/vm/class_finalizer.cc
|
| @@ -2516,20 +2516,22 @@ void ClassFinalizer::FinalizeClass(const Class& cls) {
|
| // values field. We also don't have to generate the code for these getters
|
| // from thin air (no source code is available).
|
| void ClassFinalizer::AllocateEnumValues(const Class &enum_cls) {
|
| + Thread* thread = Thread::Current();
|
| + Zone* zone = thread->zone();
|
| const Field& index_field =
|
| - Field::Handle(enum_cls.LookupInstanceField(Symbols::Index()));
|
| + Field::Handle(zone, enum_cls.LookupInstanceField(Symbols::Index()));
|
| ASSERT(!index_field.IsNull());
|
| const Field& values_field =
|
| - Field::Handle(enum_cls.LookupStaticField(Symbols::Values()));
|
| + Field::Handle(zone, enum_cls.LookupStaticField(Symbols::Values()));
|
| ASSERT(!values_field.IsNull());
|
| - ASSERT(Instance::Handle(values_field.StaticValue()).IsArray());
|
| + ASSERT(Instance::Handle(zone, values_field.StaticValue()).IsArray());
|
| Array& values_list = Array::Handle(
|
| - Array::RawCast(values_field.StaticValue()));
|
| + zone, Array::RawCast(values_field.StaticValue()));
|
|
|
| - const Array& fields = Array::Handle(enum_cls.fields());
|
| - Field& field = Field::Handle();
|
| - Instance& ordinal_value = Instance::Handle();
|
| - Instance& enum_value = Instance::Handle();
|
| + 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);
|
|
|
| for (intptr_t i = 0; i < fields.Length(); i++) {
|
| field = Field::RawCast(fields.At(i));
|
| @@ -2542,7 +2544,7 @@ void ClassFinalizer::AllocateEnumValues(const Class &enum_cls) {
|
| enum_value = Instance::New(enum_cls, Heap::kOld);
|
| enum_value.SetField(index_field, ordinal_value);
|
| const char* error_msg = "";
|
| - enum_value = enum_value.CheckAndCanonicalize(&error_msg);
|
| + enum_value = enum_value.CheckAndCanonicalize(thread, &error_msg);
|
| ASSERT(!enum_value.IsNull());
|
| ASSERT(enum_value.IsCanonical());
|
| field.SetStaticValue(enum_value, true);
|
| @@ -2553,7 +2555,7 @@ void ClassFinalizer::AllocateEnumValues(const Class &enum_cls) {
|
| }
|
| values_list.MakeImmutable();
|
| const char* error_msg = NULL;
|
| - values_list ^= values_list.CheckAndCanonicalize(&error_msg);
|
| + values_list ^= values_list.CheckAndCanonicalize(thread, &error_msg);
|
| ASSERT(!values_list.IsNull());
|
| }
|
|
|
|
|