| Index: dart/runtime/vm/class_finalizer.cc
|
| ===================================================================
|
| --- dart/runtime/vm/class_finalizer.cc (revision 31530)
|
| +++ dart/runtime/vm/class_finalizer.cc (working copy)
|
| @@ -121,9 +121,7 @@
|
| return true;
|
| }
|
|
|
| - LongJump* base = isolate->long_jump_base();
|
| - LongJump jump;
|
| - isolate->set_long_jump_base(&jump);
|
| + LongJumpScope jump;
|
| if (setjmp(*jump.Set()) == 0) {
|
| GrowableObjectArray& class_array = GrowableObjectArray::Handle();
|
| class_array = object_store->pending_classes();
|
| @@ -153,7 +151,6 @@
|
| } else {
|
| retval = false;
|
| }
|
| - isolate->set_long_jump_base(base);
|
| return retval;
|
| }
|
|
|
| @@ -320,7 +317,7 @@
|
| OS::Print("Resolving redirecting factory: %s\n",
|
| String::Handle(factory.name()).ToCString());
|
| }
|
| - ResolveType(cls, type, kCanonicalize);
|
| + ResolveType(cls, type);
|
| type ^= FinalizeType(cls, type, kCanonicalize);
|
| factory.SetRedirectionType(type);
|
| if (type.IsMalformedOrMalbounded()) {
|
| @@ -437,9 +434,7 @@
|
| }
|
|
|
|
|
| -void ClassFinalizer::ResolveType(const Class& cls,
|
| - const AbstractType& type,
|
| - FinalizationKind finalization) {
|
| +void ClassFinalizer::ResolveType(const Class& cls, const AbstractType& type) {
|
| if (type.IsResolved() || type.IsFinalized()) {
|
| return;
|
| }
|
| @@ -485,7 +480,7 @@
|
| AbstractType& type_argument = AbstractType::Handle();
|
| for (intptr_t i = 0; i < num_arguments; i++) {
|
| type_argument = arguments.TypeAt(i);
|
| - ResolveType(cls, type_argument, finalization);
|
| + ResolveType(cls, type_argument);
|
| }
|
| }
|
| }
|
| @@ -993,7 +988,7 @@
|
| AbstractType& type = AbstractType::Handle(function.result_type());
|
| // It is not a compile time error if this name does not resolve to a class or
|
| // interface.
|
| - ResolveType(cls, type, kCanonicalize);
|
| + ResolveType(cls, type);
|
| type = FinalizeType(cls, type, kCanonicalize);
|
| // The result type may be malformed or malbounded.
|
| function.set_result_type(type);
|
| @@ -1001,7 +996,7 @@
|
| const intptr_t num_parameters = function.NumParameters();
|
| for (intptr_t i = 0; i < num_parameters; i++) {
|
| type = function.ParameterTypeAt(i);
|
| - ResolveType(cls, type, kCanonicalize);
|
| + ResolveType(cls, type);
|
| type = FinalizeType(cls, type, kCanonicalize);
|
| // The parameter type may be malformed or malbounded.
|
| function.SetParameterTypeAt(i, type);
|
| @@ -1070,7 +1065,7 @@
|
| for (intptr_t i = 0; i < num_type_params; i++) {
|
| type_param ^= type_params.TypeAt(i);
|
| bound = type_param.bound();
|
| - ResolveType(cls, bound, kCanonicalize);
|
| + ResolveType(cls, bound);
|
| }
|
| }
|
|
|
| @@ -1130,7 +1125,7 @@
|
| for (intptr_t i = 0; i < num_fields; i++) {
|
| field ^= array.At(i);
|
| type = field.type();
|
| - ResolveType(cls, type, kCanonicalize);
|
| + ResolveType(cls, type);
|
| type = FinalizeType(cls, type, kCanonicalize);
|
| field.set_type(type);
|
| name = field.name();
|
| @@ -2156,7 +2151,7 @@
|
| const AbstractType& type,
|
| GrowableArray<intptr_t>* visited) {
|
| ASSERT(visited != NULL);
|
| - ResolveType(cls, type, kCanonicalize);
|
| + ResolveType(cls, type);
|
| if (type.IsType() && !type.IsMalformed()) {
|
| const Class& type_class = Class::Handle(type.type_class());
|
| if (!type_class.is_type_finalized() &&
|
| @@ -2316,7 +2311,7 @@
|
| GrowableObjectArray::Handle(GrowableObjectArray::New());
|
| AbstractType& mixin_super_type =
|
| AbstractType::Handle(mixin_app_type.super_type());
|
| - ResolveType(cls, mixin_super_type, kCanonicalizeWellFormed);
|
| + ResolveType(cls, mixin_super_type);
|
| ASSERT(mixin_super_type.HasResolvedTypeClass());
|
| // TODO(14453): May need to handle BoundedType here.
|
| ASSERT(mixin_super_type.IsType());
|
| @@ -2331,7 +2326,7 @@
|
| for (intptr_t i = 0; i < depth; i++) {
|
| mixin_type = mixin_app_type.MixinTypeAt(i);
|
| ASSERT(!mixin_type.IsNull());
|
| - ResolveType(cls, mixin_type, kCanonicalizeWellFormed);
|
| + ResolveType(cls, mixin_type);
|
| ASSERT(mixin_type.HasResolvedTypeClass());
|
| ASSERT(mixin_type.IsType());
|
| CollectTypeArguments(cls, Type::Cast(mixin_type), type_args);
|
| @@ -2446,7 +2441,7 @@
|
| Class& interface_class = Class::Handle();
|
|
|
| // Resolve super type. Failures lead to a longjmp.
|
| - ResolveType(cls, super_type, kCanonicalizeWellFormed);
|
| + ResolveType(cls, super_type);
|
| if (super_type.IsMalformedOrMalbounded()) {
|
| ReportError(Error::Handle(super_type.error()));
|
| }
|
| @@ -2523,7 +2518,7 @@
|
| // Resolve interfaces. Failures lead to a longjmp.
|
| for (intptr_t i = 0; i < super_interfaces.Length(); i++) {
|
| interface ^= super_interfaces.At(i);
|
| - ResolveType(cls, interface, kCanonicalizeWellFormed);
|
| + ResolveType(cls, interface);
|
| ASSERT(!interface.IsTypeParameter()); // Should be detected by parser.
|
| // A malbounded interface is only reported when involved in a type test.
|
| if (interface.IsMalformed()) {
|
|
|