Index: runtime/vm/precompiler.cc |
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc |
index fa650c4027686b2d821132965e1e3fd391263353..f30f12714029913a4072b084414957917da09a3b 100644 |
--- a/runtime/vm/precompiler.cc |
+++ b/runtime/vm/precompiler.cc |
@@ -276,6 +276,7 @@ bool TypeRangeCache::InstanceOfHasClassRange(const AbstractType& type, |
HANDLESCOPE(thread_); |
if (!table->HasValidClassAt(cid)) continue; |
+ if (cid == kTypeArgumentsCid) continue; |
if (cid == kVoidCid) continue; |
if (cid == kDynamicCid) continue; |
if (cid == kNullCid) continue; // Instance is not at Bottom like Null type. |
@@ -673,8 +674,9 @@ void Precompiler::AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]) { |
if (!isolate()->class_table()->HasValidClassAt(cid)) { |
continue; |
} |
- if ((cid == kDynamicCid) || (cid == kVoidCid) || |
- (cid == kFreeListElement) || (cid == kForwardingCorpse)) { |
+ if ((cid == kTypeArgumentsCid) || (cid == kDynamicCid) || |
+ (cid == kVoidCid) || (cid == kFreeListElement) || |
+ (cid == kForwardingCorpse)) { |
continue; |
} |
cls = isolate()->class_table()->At(cid); |
@@ -964,6 +966,8 @@ void Precompiler::AddCalleesOf(const Function& function) { |
instance ^= entry.raw(); |
if (entry.IsAbstractType()) { |
AddType(AbstractType::Cast(entry)); |
+ } else if (entry.IsTypeArguments()) { |
+ AddTypeArguments(TypeArguments::Cast(entry)); |
} else { |
AddConstObject(instance); |
} |
@@ -977,8 +981,6 @@ void Precompiler::AddCalleesOf(const Function& function) { |
cls ^= target_code.owner(); |
AddInstantiatedClass(cls); |
} |
- } else if (entry.IsTypeArguments()) { |
- AddTypeArguments(TypeArguments::Cast(entry)); |
} |
} |
} |
@@ -1157,7 +1159,9 @@ void Precompiler::AddConstObject(const Instance& instance) { |
virtual void VisitPointers(RawObject** first, RawObject** last) { |
for (RawObject** current = first; current <= last; current++) { |
subinstance_ = *current; |
- if (subinstance_.IsInstance()) { |
+ if (subinstance_.IsTypeArguments()) { |
+ precompiler_->AddTypeArguments(TypeArguments::Cast(subinstance_)); |
+ } else if (subinstance_.IsInstance()) { |
precompiler_->AddConstObject(Instance::Cast(subinstance_)); |
} |
} |