Index: runtime/vm/class_finalizer.cc |
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc |
index 763885088a074a9b5c0524838a6f8f84ad8bbf10..4d8178bc67252b9b224a18cdf367afe97f9fda3c 100644 |
--- a/runtime/vm/class_finalizer.cc |
+++ b/runtime/vm/class_finalizer.cc |
@@ -120,7 +120,8 @@ bool ClassFinalizer::ProcessPendingClasses() { |
ASSERT(isolate != NULL); |
HANDLESCOPE(thread); |
ObjectStore* object_store = isolate->object_store(); |
- const Error& error = Error::Handle(isolate, object_store->sticky_error()); |
+ const Error& error = |
+ Error::Handle(thread->zone(), object_store->sticky_error()); |
if (!error.IsNull()) { |
return false; |
} |
@@ -562,15 +563,15 @@ void ClassFinalizer::FinalizeTypeParameters( |
void ClassFinalizer::CheckRecursiveType(const Class& cls, |
const Type& type, |
PendingTypes* pending_types) { |
- Isolate* isolate = Isolate::Current(); |
+ Zone* zone = Thread::Current()->zone(); |
if (FLAG_trace_type_finalization) { |
THR_Print("Checking recursive type '%s': %s\n", |
String::Handle(type.Name()).ToCString(), |
type.ToCString()); |
} |
- const Class& type_cls = Class::Handle(isolate, type.type_class()); |
+ const Class& type_cls = Class::Handle(zone, type.type_class()); |
const TypeArguments& arguments = |
- TypeArguments::Handle(isolate, type.arguments()); |
+ TypeArguments::Handle(zone, type.arguments()); |
// A type can only be recursive via its type arguments. |
ASSERT(!arguments.IsNull()); |
const intptr_t num_type_args = arguments.Length(); |
@@ -589,7 +590,7 @@ void ClassFinalizer::CheckRecursiveType(const Class& cls, |
// The type parameters are not instantiated. Verify that there is no other |
// type pending finalization with the same type class, but different |
// uninstantiated type parameters. |
- TypeArguments& pending_arguments = TypeArguments::Handle(isolate); |
+ TypeArguments& pending_arguments = TypeArguments::Handle(zone); |
const intptr_t num_pending_types = pending_types->length(); |
for (intptr_t i = num_pending_types - 1; i >= 0; i--) { |
const Type& pending_type = Type::Cast(pending_types->At(i)); |
@@ -607,7 +608,7 @@ void ClassFinalizer::CheckRecursiveType(const Class& cls, |
!pending_arguments.IsSubvectorInstantiated(first_type_param, |
num_type_params)) { |
// Reject the non-contractive recursive type. |
- const String& type_name = String::Handle(isolate, type.Name()); |
+ const String& type_name = String::Handle(zone, type.Name()); |
ReportError(cls, type.token_pos(), |
"illegal recursive type '%s'", type_name.ToCString()); |
} |
@@ -1573,14 +1574,15 @@ void ClassFinalizer::ResolveAndFinalizeMemberTypes(const Class& cls) { |
// bound BT on T of M is applied to T of S&M. See comments below. |
void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
ASSERT(mixin_app_class.type_parameters() == TypeArguments::null()); |
- Isolate* isolate = Isolate::Current(); |
- const AbstractType& super_type = AbstractType::Handle(isolate, |
+ Thread* thread = Thread::Current(); |
+ Zone* zone = thread->zone(); |
+ const AbstractType& super_type = AbstractType::Handle(zone, |
mixin_app_class.super_type()); |
ASSERT(super_type.IsResolved()); |
- const Class& super_class = Class::Handle(isolate, super_type.type_class()); |
+ const Class& super_class = Class::Handle(zone, super_type.type_class()); |
const intptr_t num_super_type_params = super_class.NumTypeParameters(); |
- const Type& mixin_type = Type::Handle(isolate, mixin_app_class.mixin()); |
- const Class& mixin_class = Class::Handle(isolate, mixin_type.type_class()); |
+ const Type& mixin_type = Type::Handle(zone, mixin_app_class.mixin()); |
+ const Class& mixin_class = Class::Handle(zone, mixin_type.type_class()); |
const intptr_t num_mixin_type_params = mixin_class.NumTypeParameters(); |
// The mixin type (in raw form) should have been added to the interfaces |
@@ -1593,14 +1595,14 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
// If both the super type and the mixin type are non generic, the mixin |
// application class is non generic as well and we can skip type parameter |
// cloning. |
- TypeArguments& instantiator = TypeArguments::Handle(isolate); |
+ TypeArguments& instantiator = TypeArguments::Handle(zone); |
if ((num_super_type_params + num_mixin_type_params) > 0) { |
// If the last ampersand in the name of the mixin application class is |
// doubled, the same type parameters can propagate the type arguments to |
// the super type and to the mixin type. |
bool share_type_params = false; |
if (num_super_type_params == num_mixin_type_params) { |
- const String& name = String::Handle(isolate, mixin_app_class.Name()); |
+ const String& name = String::Handle(zone, mixin_app_class.Name()); |
for (intptr_t i = name.Length() - 1; i > 0; --i) { |
if (name.CharAt(i) == '&') { |
if (name.CharAt(i - 1) == '&') { |
@@ -1611,13 +1613,13 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
} |
} |
- const TypeArguments& cloned_type_params = TypeArguments::Handle(isolate, |
+ const TypeArguments& cloned_type_params = TypeArguments::Handle(zone, |
TypeArguments::New((share_type_params ? 0 : num_super_type_params) + |
num_mixin_type_params)); |
- TypeParameter& param = TypeParameter::Handle(isolate); |
- TypeParameter& cloned_param = TypeParameter::Handle(isolate); |
- String& param_name = String::Handle(isolate); |
- AbstractType& param_bound = AbstractType::Handle(isolate); |
+ TypeParameter& param = TypeParameter::Handle(zone); |
+ TypeParameter& cloned_param = TypeParameter::Handle(zone); |
+ String& param_name = String::Handle(zone); |
+ AbstractType& param_bound = AbstractType::Handle(zone); |
intptr_t cloned_index = 0; |
// First, clone the super class type parameters. Rename them so that |
@@ -1625,8 +1627,8 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
// class and the mixin class. |
if (!share_type_params && (num_super_type_params > 0)) { |
const TypeArguments& super_type_params = |
- TypeArguments::Handle(isolate, super_class.type_parameters()); |
- const TypeArguments& super_type_args = TypeArguments::Handle(isolate, |
+ TypeArguments::Handle(zone, super_class.type_parameters()); |
+ const TypeArguments& super_type_args = TypeArguments::Handle(zone, |
TypeArguments::New(num_super_type_params)); |
// The cloned super class type parameters do not need to repeat their |
// bounds, since the bound checks will be performed at the super class |
@@ -1636,7 +1638,7 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
// the super class of its mixin. Note also that the other mixin |
// application will only mixin the last mixin type listed in the first |
// mixin application it is mixing in. |
- param_bound = isolate->object_store()->object_type(); |
+ param_bound = thread->isolate()->object_store()->object_type(); |
for (intptr_t i = 0; i < num_super_type_params; i++) { |
param ^= super_type_params.TypeAt(i); |
param_name = param.name(); |
@@ -1665,10 +1667,10 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
// with that name. We also retain the type parameter bounds. |
if (num_mixin_type_params > 0) { |
const TypeArguments& mixin_params = |
- TypeArguments::Handle(isolate, mixin_class.type_parameters()); |
+ TypeArguments::Handle(zone, mixin_class.type_parameters()); |
const intptr_t offset = |
mixin_class.NumTypeArguments() - mixin_class.NumTypeParameters(); |
- const TypeArguments& mixin_type_args = TypeArguments::Handle(isolate, |
+ const TypeArguments& mixin_type_args = TypeArguments::Handle(zone, |
TypeArguments::New(num_mixin_type_params)); |
instantiator ^= TypeArguments::New(offset + num_mixin_type_params); |
bool has_uninstantiated_bounds = false; |
@@ -1700,7 +1702,7 @@ void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) { |
// is not a problem since they will get finalized shortly as the mixin |
// application class gets finalized. |
if (has_uninstantiated_bounds) { |
- Error& bound_error = Error::Handle(isolate); |
+ Error& bound_error = Error::Handle(zone); |
for (intptr_t i = 0; i < num_mixin_type_params; i++) { |
param ^= mixin_type_args.TypeAt(i); |
param_bound = param.bound(); |
@@ -1821,13 +1823,13 @@ 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. |
- Isolate* isolate = Isolate::Current(); |
- AbstractType& super_type = AbstractType::Handle(isolate, |
+ Zone* zone = Thread::Current()->zone(); |
+ AbstractType& super_type = AbstractType::Handle(zone, |
mixin_app_class.super_type()); |
- const Type& mixin_type = Type::Handle(isolate, mixin_app_class.mixin()); |
- const Class& mixin_class = Class::Handle(isolate, mixin_type.type_class()); |
+ const Type& mixin_type = Type::Handle(zone, mixin_app_class.mixin()); |
+ const Class& mixin_class = Class::Handle(zone, mixin_type.type_class()); |
ASSERT(mixin_class.is_mixin_app_alias()); |
- const Class& aliased_mixin_app_class = Class::Handle(isolate, |
+ const Class& aliased_mixin_app_class = Class::Handle(zone, |
mixin_class.SuperClass()); |
// Note that the super class of aliased_mixin_app_class can itself be a |
// mixin application class (this happens if the alias is mixing more than one |
@@ -1835,19 +1837,19 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
// super class of this inserted class, we apply the composition rules of the |
// spec and only mixin the members of aliased_mixin_app_class, not those of |
// its super class. In other words, we only mixin the last mixin of the alias. |
- const Type& aliased_mixin_type = Type::Handle(isolate, |
+ const Type& aliased_mixin_type = Type::Handle(zone, |
aliased_mixin_app_class.mixin()); |
// The name of the inserted mixin application class is the name of mixin |
// class name with a backtick added. |
- String& inserted_class_name = String::Handle(isolate, mixin_app_class.Name()); |
+ String& inserted_class_name = String::Handle(zone, mixin_app_class.Name()); |
inserted_class_name = String::Concat(inserted_class_name, |
Symbols::Backtick()); |
- const Library& library = Library::Handle(isolate, mixin_app_class.library()); |
- Class& inserted_class = Class::Handle(isolate, |
+ const Library& library = Library::Handle(zone, mixin_app_class.library()); |
+ Class& inserted_class = Class::Handle(zone, |
library.LookupLocalClass(inserted_class_name)); |
if (inserted_class.IsNull()) { |
inserted_class_name = Symbols::New(inserted_class_name); |
- const Script& script = Script::Handle(isolate, mixin_app_class.script()); |
+ const Script& script = Script::Handle(zone, mixin_app_class.script()); |
inserted_class = Class::New( |
inserted_class_name, script, mixin_app_class.token_pos()); |
inserted_class.set_is_synthesized_class(); |
@@ -1872,8 +1874,8 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
// After FinalizeTypesInClass, if the mixin type and interface type are |
// generic, their type arguments will refer to the type parameters of |
// inserted_class. |
- const Type& inserted_class_mixin_type = Type::Handle(isolate, |
- Type::New(Class::Handle(isolate, aliased_mixin_type.type_class()), |
+ const Type& inserted_class_mixin_type = Type::Handle(zone, |
+ Type::New(Class::Handle(zone, aliased_mixin_type.type_class()), |
Object::null_type_arguments(), |
aliased_mixin_type.token_pos())); |
inserted_class.set_mixin(inserted_class_mixin_type); |
@@ -1904,33 +1906,33 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
// It is important that the type parameters of the mixin application class |
// are not finalized yet, because new type parameters may have been added |
// to the super class. |
- const Class& super_class = Class::Handle(isolate, super_type.type_class()); |
+ const Class& super_class = Class::Handle(zone, super_type.type_class()); |
ASSERT(mixin_app_class.SuperClass() == super_class.raw()); // Will change. |
const intptr_t num_super_type_params = super_class.NumTypeParameters(); |
- AbstractType& type = AbstractType::Handle(isolate); |
+ AbstractType& type = AbstractType::Handle(zone); |
// The instantiator is mapping finalized type parameters of mixin_class to |
// unfinalized type parameters of mixin_app_class. |
ASSERT(aliased_mixin_type.IsFinalized()); |
- const Class& aliased_mixin_type_class = Class::Handle(isolate, |
+ const Class& aliased_mixin_type_class = Class::Handle(zone, |
aliased_mixin_type.type_class()); |
const intptr_t num_aliased_mixin_type_params = |
aliased_mixin_type_class.NumTypeParameters(); |
ASSERT(inserted_class.NumTypeParameters() == |
(num_super_type_params + num_aliased_mixin_type_params)); |
const AbstractType& mixin_class_super_type = |
- AbstractType::Handle(isolate, mixin_class.super_type()); |
+ AbstractType::Handle(zone, mixin_class.super_type()); |
ASSERT(mixin_class_super_type.IsFinalized()); |
// The aliased_mixin_type may be raw. |
const TypeArguments& mixin_class_super_type_args = |
- TypeArguments::Handle(isolate, mixin_class_super_type.arguments()); |
- TypeArguments& new_mixin_type_args = TypeArguments::Handle(isolate); |
+ TypeArguments::Handle(zone, mixin_class_super_type.arguments()); |
+ TypeArguments& new_mixin_type_args = TypeArguments::Handle(zone); |
if ((num_aliased_mixin_type_params > 0) && |
!mixin_class_super_type_args.IsNull()) { |
new_mixin_type_args = TypeArguments::New(num_aliased_mixin_type_params); |
- AbstractType& bounded_type = AbstractType::Handle(isolate); |
- AbstractType& upper_bound = AbstractType::Handle(isolate); |
- TypeParameter& type_parameter = TypeParameter::Handle(isolate); |
- Error& bound_error = Error::Handle(isolate); |
+ AbstractType& bounded_type = AbstractType::Handle(zone); |
+ AbstractType& upper_bound = AbstractType::Handle(zone); |
+ TypeParameter& type_parameter = TypeParameter::Handle(zone); |
+ Error& bound_error = Error::Handle(zone); |
const intptr_t offset = |
mixin_class_super_type_args.Length() - num_aliased_mixin_type_params; |
for (intptr_t i = 0; i < num_aliased_mixin_type_params; i++) { |
@@ -1960,12 +1962,12 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
new_mixin_type_args.SetTypeAt(i, type); |
} |
} |
- TypeArguments& new_super_type_args = TypeArguments::Handle(isolate); |
+ TypeArguments& new_super_type_args = TypeArguments::Handle(zone); |
if ((num_super_type_params + num_aliased_mixin_type_params) > 0) { |
new_super_type_args = TypeArguments::New(num_super_type_params + |
num_aliased_mixin_type_params); |
const TypeArguments& type_params = |
- TypeArguments::Handle(isolate, mixin_app_class.type_parameters()); |
+ TypeArguments::Handle(zone, mixin_app_class.type_parameters()); |
for (intptr_t i = 0; i < num_super_type_params; i++) { |
type = type_params.TypeAt(i); |
new_super_type_args.SetTypeAt(i, type); |
@@ -1995,7 +1997,7 @@ void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class, |
String::Handle(inserted_class.Name()).ToCString(), |
TypeArguments::Handle( |
inserted_class.type_parameters()).ToCString(), |
- String::Handle(isolate, super_type.Name()).ToCString(), |
+ String::Handle(zone, super_type.Name()).ToCString(), |
num_super_type_params + num_aliased_mixin_type_params, |
super_type.ToCString(), |
String::Handle(mixin_app_class.Name()).ToCString(), |
@@ -2627,27 +2629,27 @@ 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. |
- Isolate* isolate = Isolate::Current(); |
- const Library& library = Library::Handle(isolate, cls.library()); |
+ Zone* zone = Thread::Current()->zone(); |
+ const Library& library = Library::Handle(zone, cls.library()); |
ASSERT(!library.IsNull()); |
- const Script& script = Script::Handle(isolate, cls.script()); |
+ const Script& script = Script::Handle(zone, cls.script()); |
ASSERT(!script.IsNull()); |
const GrowableObjectArray& type_args = |
- GrowableObjectArray::Handle(isolate, GrowableObjectArray::New()); |
+ GrowableObjectArray::Handle(zone, GrowableObjectArray::New()); |
AbstractType& mixin_super_type = |
- AbstractType::Handle(isolate, mixin_app_type.super_type()); |
+ AbstractType::Handle(zone, mixin_app_type.super_type()); |
ResolveType(cls, mixin_super_type); |
ASSERT(mixin_super_type.HasResolvedTypeClass()); // Even if malformed. |
// The super type may have a BoundedType as type argument, but cannot be |
// a BoundedType itself. |
CollectTypeArguments(cls, Type::Cast(mixin_super_type), type_args); |
- AbstractType& mixin_type = AbstractType::Handle(isolate); |
- Class& mixin_type_class = Class::Handle(isolate); |
- Class& mixin_app_class = Class::Handle(isolate); |
- String& mixin_app_class_name = String::Handle(isolate); |
- String& mixin_type_class_name = String::Handle(isolate); |
- AbstractType& super_type_arg = AbstractType::Handle(isolate); |
- AbstractType& mixin_type_arg = AbstractType::Handle(isolate); |
+ AbstractType& mixin_type = AbstractType::Handle(zone); |
+ Class& mixin_type_class = Class::Handle(zone); |
+ Class& mixin_app_class = Class::Handle(zone); |
+ String& mixin_app_class_name = String::Handle(zone); |
+ String& mixin_type_class_name = String::Handle(zone); |
+ AbstractType& super_type_arg = AbstractType::Handle(zone); |
+ AbstractType& mixin_type_arg = AbstractType::Handle(zone); |
const intptr_t depth = mixin_app_type.Depth(); |
for (intptr_t i = 0; i < depth; i++) { |
mixin_type = mixin_app_type.MixinTypeAt(i); |
@@ -2702,7 +2704,7 @@ RawType* ClassFinalizer::ResolveMixinAppType( |
mixin_type.token_pos()); |
mixin_app_class.set_super_type(mixin_super_type); |
mixin_type_class = mixin_type.type_class(); |
- const Type& generic_mixin_type = Type::Handle(isolate, |
+ const Type& generic_mixin_type = Type::Handle(zone, |
Type::New(mixin_type_class, |
Object::null_type_arguments(), |
mixin_type.token_pos())); |
@@ -2710,7 +2712,7 @@ RawType* ClassFinalizer::ResolveMixinAppType( |
// Add the mixin type to the list of interfaces that the mixin application |
// class implements. This is necessary so that cycle check work at |
// compile time (type arguments are ignored by that check). |
- const Array& interfaces = Array::Handle(isolate, Array::New(1)); |
+ const Array& interfaces = Array::Handle(zone, Array::New(1)); |
interfaces.SetAt(0, generic_mixin_type); |
ASSERT(mixin_app_class.interfaces() == Object::empty_array().raw()); |
mixin_app_class.set_interfaces(interfaces); |
@@ -2732,10 +2734,10 @@ RawType* ClassFinalizer::ResolveMixinAppType( |
Object::null_type_arguments(), |
mixin_type.token_pos()); |
} |
- TypeArguments& mixin_app_args = TypeArguments::Handle(isolate); |
+ TypeArguments& mixin_app_args = TypeArguments::Handle(zone); |
if (type_args.Length() > 0) { |
mixin_app_args = TypeArguments::New(type_args.Length()); |
- AbstractType& type_arg = AbstractType::Handle(isolate); |
+ AbstractType& type_arg = AbstractType::Handle(zone); |
for (intptr_t i = 0; i < type_args.Length(); i++) { |
type_arg ^= type_args.At(i); |
mixin_app_args.SetTypeAt(i, type_arg); |
@@ -2771,12 +2773,12 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
if (FLAG_trace_class_finalization) { |
THR_Print("Resolving super and interfaces: %s\n", cls.ToCString()); |
} |
- Isolate* isolate = Isolate::Current(); |
+ Zone* zone = Thread::Current()->zone(); |
const intptr_t cls_index = cls.id(); |
for (intptr_t i = 0; i < visited->length(); i++) { |
if ((*visited)[i] == cls_index) { |
// We have already visited class 'cls'. We found a cycle. |
- const String& class_name = String::Handle(isolate, cls.Name()); |
+ const String& class_name = String::Handle(zone, cls.Name()); |
ReportError(cls, cls.token_pos(), |
"cyclic reference found for class '%s'", |
class_name.ToCString()); |
@@ -2785,8 +2787,8 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
// If the class/interface has no explicit super class/interfaces |
// and is not a mixin application, we are done. |
- AbstractType& super_type = AbstractType::Handle(isolate, cls.super_type()); |
- Array& super_interfaces = Array::Handle(isolate, cls.interfaces()); |
+ AbstractType& super_type = AbstractType::Handle(zone, cls.super_type()); |
+ Array& super_interfaces = Array::Handle(zone, cls.interfaces()); |
if ((super_type.IsNull() || super_type.IsObjectType()) && |
(super_interfaces.Length() == 0)) { |
cls.set_is_cycle_free(); |
@@ -2809,32 +2811,32 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
// Resolve and check the super type and interfaces of cls. |
visited->Add(cls_index); |
- AbstractType& interface = AbstractType::Handle(isolate); |
- Class& interface_class = Class::Handle(isolate); |
+ AbstractType& interface = AbstractType::Handle(zone); |
+ Class& interface_class = Class::Handle(zone); |
// Resolve super type. Failures lead to a longjmp. |
ResolveType(cls, super_type); |
if (super_type.IsMalformedOrMalbounded()) { |
- ReportError(Error::Handle(isolate, super_type.error())); |
+ ReportError(Error::Handle(zone, super_type.error())); |
} |
if (super_type.IsDynamicType()) { |
ReportError(cls, cls.token_pos(), |
"class '%s' may not extend 'dynamic'", |
- String::Handle(isolate, cls.Name()).ToCString()); |
+ String::Handle(zone, cls.Name()).ToCString()); |
} |
interface_class = super_type.type_class(); |
if (interface_class.IsSignatureClass()) { |
ReportError(cls, cls.token_pos(), |
"class '%s' may not extend function type alias '%s'", |
- String::Handle(isolate, cls.Name()).ToCString(), |
- String::Handle(isolate, |
+ String::Handle(zone, cls.Name()).ToCString(), |
+ String::Handle(zone, |
super_type.UserVisibleName()).ToCString()); |
} |
if (interface_class.is_enum_class()) { |
ReportError(cls, cls.token_pos(), |
"class '%s' may not extend enum '%s'", |
- String::Handle(isolate, cls.Name()).ToCString(), |
- String::Handle(isolate, interface_class.Name()).ToCString()); |
+ String::Handle(zone, cls.Name()).ToCString(), |
+ String::Handle(zone, interface_class.Name()).ToCString()); |
} |
// If cls belongs to core lib or to core lib's implementation, restrictions |
@@ -2879,11 +2881,11 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
} |
} |
if (is_error) { |
- const String& interface_name = String::Handle(isolate, |
+ const String& interface_name = String::Handle(zone, |
interface_class.Name()); |
ReportError(cls, cls.token_pos(), |
"'%s' is not allowed to extend '%s'", |
- String::Handle(isolate, cls.Name()).ToCString(), |
+ String::Handle(zone, cls.Name()).ToCString(), |
interface_name.ToCString()); |
} |
} |
@@ -2897,7 +2899,7 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
ASSERT(!interface.IsTypeParameter()); // Should be detected by parser. |
// A malbounded interface is only reported when involved in a type test. |
if (interface.IsMalformed()) { |
- ReportError(Error::Handle(isolate, interface.error())); |
+ ReportError(Error::Handle(zone, interface.error())); |
} |
if (interface.IsDynamicType()) { |
ReportError(cls, cls.token_pos(), |
@@ -2905,14 +2907,14 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
} |
interface_class = interface.type_class(); |
if (interface_class.IsSignatureClass()) { |
- const String& interface_name = String::Handle(isolate, |
+ const String& interface_name = String::Handle(zone, |
interface_class.Name()); |
ReportError(cls, cls.token_pos(), |
"function type alias '%s' may not be used as interface", |
interface_name.ToCString()); |
} |
if (interface_class.is_enum_class()) { |
- const String& interface_name = String::Handle(isolate, |
+ const String& interface_name = String::Handle(zone, |
interface_class.Name()); |
ReportError(cls, cls.token_pos(), |
"enum '%s' may not be used as interface", |
@@ -2928,7 +2930,7 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
interface.IsDoubleType() || |
interface.IsStringType() || |
interface.IsDynamicType()) { |
- const String& interface_name = String::Handle(isolate, |
+ const String& interface_name = String::Handle(zone, |
interface_class.Name()); |
if (cls.IsMixinApplication()) { |
ReportError(cls, cls.token_pos(), |
@@ -2937,7 +2939,7 @@ void ClassFinalizer::ResolveSuperTypeAndInterfaces( |
} else { |
ReportError(cls, cls.token_pos(), |
"'%s' is not allowed to extend or implement '%s'", |
- String::Handle(isolate, cls.Name()).ToCString(), |
+ String::Handle(zone, cls.Name()).ToCString(), |
interface_name.ToCString()); |
} |
} |