Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(395)

Unified Diff: runtime/vm/class_finalizer.cc

Issue 2600313002: Revert "Fix resolution and canonicalization of typedefs and function types..." (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/vm/isolate_reload.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/class_finalizer.cc
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index adf967e79ecef0c1fe8d04285cdf2d0cd911c4c6..f13d562061ef4a27dbfcfa430baea9bc8c33593c 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -549,34 +549,11 @@ void ClassFinalizer::ResolveType(const Class& cls, const AbstractType& type) {
// Resolve signature if function type.
if (type.IsFunctionType()) {
const Function& signature = Function::Handle(Type::Cast(type).signature());
- Type& signature_type = Type::Handle(signature.SignatureType());
- if (signature_type.raw() != type.raw()) {
- ResolveType(cls, signature_type);
+ const Class& scope_class = Class::Handle(type.type_class());
+ if (scope_class.IsTypedefClass()) {
+ ResolveSignature(scope_class, signature);
} else {
- const Class& scope_class = Class::Handle(type.type_class());
- if (scope_class.IsTypedefClass()) {
- ResolveSignature(scope_class, signature);
- } else {
- ResolveSignature(cls, signature);
- }
- if (signature.IsSignatureFunction()) {
- // Drop fields that are not necessary anymore after resolution.
- // The parent function, owner, and token position of a shared
- // canonical function type are meaningless, since the canonical
- // representent is picked arbitrarily.
- signature.set_parent_function(Function::Handle());
- // TODO(regis): As long as we support metadata in typedef signatures,
- // we cannot reset these fields used to reparse a typedef.
- // Note that the scope class of a typedef function type is always
- // preserved as the typedef class (not reset to _Closure class), thereby
- // preventing sharing of canonical function types between typedefs.
- // Not being shared, these fields are therefore always meaningful for
- // typedefs.
- if (!scope_class.IsTypedefClass()) {
- signature.set_owner(Object::Handle());
- signature.set_token_pos(TokenPosition::kNoSource);
- }
- }
+ ResolveSignature(cls, signature);
}
}
}
@@ -2354,9 +2331,8 @@ void ClassFinalizer::FinalizeTypesInClass(const Class& cls) {
cls.set_mixin(mixin_type);
}
if (cls.IsTypedefClass()) {
- Function& signature = Function::Handle(cls.signature_function());
+ const Function& signature = Function::Handle(cls.signature_function());
Type& type = Type::Handle(signature.SignatureType());
- ASSERT(type.signature() == signature.raw());
// Check for illegal self references.
GrowableArray<intptr_t> visited_aliases;
@@ -2374,12 +2350,7 @@ void ClassFinalizer::FinalizeTypesInClass(const Class& cls) {
// Resolve and finalize the signature type of this typedef.
type ^= FinalizeType(cls, type, kCanonicalizeWellFormed);
-
- // If a different canonical signature type is returned, update the signature
- // function of the typedef.
- signature = type.signature();
signature.SetSignatureType(type);
- cls.set_signature_function(signature);
// Closure instances do not refer to this typedef as their class, so there
// is no need to add this typedef class to the subclasses of _Closure.
« no previous file with comments | « runtime/lib/mirrors.cc ('k') | runtime/vm/isolate_reload.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698