Index: sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
index 3bc06c91da6a14d4f45bf466365ad3a304afe449..ceb5eb4a5f58c0db4d95c556b268c13f75b36da2 100644 |
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart |
@@ -988,6 +988,14 @@ class JavaScriptBackend extends Backend { |
enqueueInResolution(getTraceFromException()); |
} |
+ void registerSetRuntimeType() { |
+ enqueueInResolution(getSetRuntimeTypeInfo()); |
+ } |
+ |
+ void registerGetRuntimeTypeArgument() { |
+ enqueueInResolution(getGetRuntimeTypeArgument()); |
+ } |
+ |
void registerRuntimeType() { |
enqueueInResolution(getSetRuntimeTypeInfo()); |
enqueueInResolution(getGetRuntimeTypeInfo()); |
@@ -995,11 +1003,13 @@ class JavaScriptBackend extends Backend { |
} |
void registerIsCheck(DartType type, Enqueuer world) { |
- if (!type.isRaw) { |
+ bool isTypeVariable = type.kind == TypeKind.TYPE_VARIABLE; |
+ if (!type.isRaw || isTypeVariable) { |
enqueueInResolution(getSetRuntimeTypeInfo()); |
enqueueInResolution(getGetRuntimeTypeInfo()); |
enqueueInResolution(getGetRuntimeTypeArgument()); |
enqueueInResolution(getCheckArguments()); |
+ if (isTypeVariable) enqueueInResolution(getGetObjectIsSubtype()); |
} |
// [registerIsCheck] is also called for checked mode checks, so we |
// need to register checked mode helpers. |
@@ -1444,6 +1454,10 @@ class JavaScriptBackend extends Backend { |
return compiler.findHelper(const SourceString('checkArguments')); |
} |
+ Element getGetObjectIsSubtype() { |
+ return compiler.findHelper(const SourceString('objectIsSubtype')); |
+ } |
+ |
Element getThrowNoSuchMethod() { |
return compiler.findHelper(const SourceString('throwNoSuchMethod')); |
} |