Index: runtime/vm/class_finalizer.cc |
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc |
index 9497eab2d2e9625a4a653be9878863461c2c4339..1db03051a164a076847afb7bb13c2a246216395d 100644 |
--- a/runtime/vm/class_finalizer.cc |
+++ b/runtime/vm/class_finalizer.cc |
@@ -1709,7 +1709,8 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
for (intptr_t i = 0; i < num_super_type_params; i++) { |
param ^= super_type_params.TypeAt(i); |
param_name = param.name(); |
- param_name = Symbols::FromConcat(param_name, Symbols::Backtick()); |
+ param_name = Symbols::FromConcat(thread, |
+ param_name, Symbols::Backtick()); |
cloned_param = TypeParameter::New(mixin_app_class, |
cloned_index, |
param_name, |
@@ -1890,7 +1891,8 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
// If this mixin alias is aliasing another mixin alias, another class |
// will be inserted via recursion. No need to check here. |
// The mixin type may or may not be finalized yet. |
- Zone* zone = Thread::Current()->zone(); |
+ Thread* thread = Thread::Current(); |
+ Zone* zone = thread->zone(); |
AbstractType& super_type = AbstractType::Handle(zone, |
mixin_app_class.super_type()); |
const Type& mixin_type = Type::Handle(zone, mixin_app_class.mixin()); |
@@ -1915,7 +1917,7 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
Class& inserted_class = Class::Handle(zone, |
library.LookupLocalClass(inserted_class_name)); |
if (inserted_class.IsNull()) { |
- inserted_class_name = Symbols::New(inserted_class_name); |
+ inserted_class_name = Symbols::New(thread, inserted_class_name); |
const Script& script = Script::Handle(zone, mixin_app_class.script()); |
inserted_class = Class::New( |
inserted_class_name, script, mixin_app_class.token_pos()); |
@@ -2144,21 +2146,23 @@ void ClassFinalizer::CreateForwardingConstructors( |
const Class& mixin_app, |
const Class& mixin_cls, |
const GrowableObjectArray& cloned_funcs) { |
- const String& mixin_name = String::Handle(mixin_app.Name()); |
- const Class& super_class = Class::Handle(mixin_app.SuperClass()); |
- const String& super_name = String::Handle(super_class.Name()); |
- const Array& functions = Array::Handle(super_class.functions()); |
+ Thread* T = Thread::Current(); |
+ Zone* Z = T->zone(); |
+ const String& mixin_name = String::Handle(Z, mixin_app.Name()); |
+ const Class& super_class = Class::Handle(Z, mixin_app.SuperClass()); |
+ const String& super_name = String::Handle(Z, super_class.Name()); |
+ const Array& functions = Array::Handle(Z, super_class.functions()); |
const intptr_t num_functions = functions.Length(); |
- Function& func = Function::Handle(); |
+ Function& func = Function::Handle(Z); |
for (intptr_t i = 0; i < num_functions; i++) { |
func ^= functions.At(i); |
if (func.IsGenerativeConstructor()) { |
// Build constructor name from mixin application class name |
// and name of cloned super class constructor. |
- const String& ctor_name = String::Handle(func.name()); |
- String& clone_name = String::Handle( |
+ const String& ctor_name = String::Handle(Z, func.name()); |
+ String& clone_name = String::Handle(Z, |
String::SubString(ctor_name, super_name.Length())); |
- clone_name = Symbols::FromConcat(mixin_name, clone_name); |
+ clone_name = Symbols::FromConcat(T, mixin_name, clone_name); |
if (FLAG_trace_class_finalization) { |
THR_Print("Cloning constructor '%s' as '%s'\n", |
@@ -2170,9 +2174,9 @@ void ClassFinalizer::CreateForwardingConstructors( |
// class. The source is the mixin class. The source may be needed |
// to parse field initializer expressions in the mixin class. |
const PatchClass& owner = |
- PatchClass::Handle(PatchClass::New(mixin_app, mixin_cls)); |
+ PatchClass::Handle(Z, PatchClass::New(mixin_app, mixin_cls)); |
- const Function& clone = Function::Handle( |
+ const Function& clone = Function::Handle(Z, |
Function::New(clone_name, |
func.kind(), |
func.is_static(), |
@@ -2191,11 +2195,11 @@ void ClassFinalizer::CreateForwardingConstructors( |
const intptr_t num_parameters = func.NumParameters(); |
// The cloned ctor shares the parameter names array with the |
// original. |
- const Array& parameter_names = Array::Handle(func.parameter_names()); |
+ const Array& parameter_names = Array::Handle(Z, func.parameter_names()); |
ASSERT(parameter_names.Length() == num_parameters); |
clone.set_parameter_names(parameter_names); |
// The parameter types of the cloned constructor are 'dynamic'. |
- clone.set_parameter_types(Array::Handle(Array::New(num_parameters))); |
+ clone.set_parameter_types(Array::Handle(Z, Array::New(num_parameters))); |
for (intptr_t n = 0; n < num_parameters; n++) { |
clone.SetParameterTypeAt(n, Object::dynamic_type()); |
} |
@@ -2726,7 +2730,8 @@ RawType* ClassFinalizer::ResolveMixinAppType( |
const MixinAppType& mixin_app_type) { |
// Lookup or create mixin application classes in the library of cls |
// and resolve super type and mixin types. |
- Zone* zone = Thread::Current()->zone(); |
+ Thread* thread = Thread::Current(); |
+ Zone* zone = thread->zone(); |
const Library& library = Library::Handle(zone, cls.library()); |
ASSERT(!library.IsNull()); |
const Script& script = Script::Handle(zone, cls.script()); |
@@ -2803,7 +2808,7 @@ RawType* ClassFinalizer::ResolveMixinAppType( |
mixin_type_class_name); |
mixin_app_class = library.LookupLocalClass(mixin_app_class_name); |
if (mixin_app_class.IsNull()) { |
- mixin_app_class_name = Symbols::New(mixin_app_class_name); |
+ mixin_app_class_name = Symbols::New(thread, mixin_app_class_name); |
mixin_app_class = Class::New(mixin_app_class_name, |
script, |
mixin_type.token_pos()); |