| 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 4922a78ca2ef32bc1c7cddf85c7941bae33e897a..c66dcfc4c4a70a1433ac912eb9832893c1ba5fa6 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| @@ -200,6 +200,7 @@ class JavaScriptBackend extends Backend {
|
| ClassElement typeLiteralClass;
|
| ClassElement mapLiteralClass;
|
| ClassElement constMapLiteralClass;
|
| + ClassElement typeVariableClass;
|
|
|
| Element getInterceptorMethod;
|
| Element interceptedNames;
|
| @@ -406,6 +407,8 @@ class JavaScriptBackend extends Backend {
|
| checkedModeHelpers,
|
| key: (helper) => helper.name.slowToString());
|
|
|
| + TypeVariableHandler typeVariableHandler;
|
| +
|
| /// Number of methods compiled before considering reflection.
|
| int preMirrorsMethodCount = 0;
|
|
|
| @@ -424,6 +427,7 @@ class JavaScriptBackend extends Backend {
|
| builder = new SsaBuilderTask(this);
|
| optimizer = new SsaOptimizerTask(this);
|
| generator = new SsaCodeGeneratorTask(this);
|
| + typeVariableHandler = new TypeVariableHandler(this);
|
| customElementsAnalysis = new CustomElementsAnalysis(this);
|
| }
|
|
|
| @@ -670,6 +674,9 @@ class JavaScriptBackend extends Backend {
|
| new TypeMask.nonNullExact(jsFixedArrayClass));
|
| extendableArrayType = new HBoundedType(
|
| new TypeMask.nonNullExact(jsExtendableArrayClass));
|
| +
|
| + typeVariableClass =
|
| + compiler.findHelper(const SourceString('TypeVariable'));
|
| }
|
|
|
| void validateInterceptorImplementsAllObjectMethods(
|
| @@ -797,6 +804,10 @@ class JavaScriptBackend extends Backend {
|
| void registerInstantiatedClass(ClassElement cls,
|
| Enqueuer enqueuer,
|
| TreeElements elements) {
|
| + if (!cls.typeVariables.isEmpty) {
|
| + typeVariableHandler.registerClassWithTypeVariables(cls);
|
| + }
|
| +
|
| if (!seenAnyClass) {
|
| seenAnyClass = true;
|
| if (enqueuer.isResolutionQueue) {
|
| @@ -1846,6 +1857,13 @@ class JavaScriptBackend extends Backend {
|
| metadataConstants.clear();
|
| }
|
|
|
| + if (isTreeShakingDisabled) {
|
| + if (enqueuer.isResolutionQueue) {
|
| + typeVariableHandler.onResolutionQueueEmpty(enqueuer);
|
| + } else {
|
| + typeVariableHandler.onCodegenQueueEmpty();
|
| + }
|
| + }
|
| customElementsAnalysis.onQueueEmpty(enqueuer);
|
| }
|
| }
|
|
|