Index: pkg/compiler/lib/src/js_model/js_strategy.dart |
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart |
index 43a2a78b5cbfd4123e0b6d91c2491d8cfab53c7b..aef74210117f49af1b08409fa7c1440e40ef423f 100644 |
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart |
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart |
@@ -19,6 +19,7 @@ import '../js_backend/backend_usage.dart'; |
import '../js_backend/constant_system_javascript.dart'; |
import '../js_backend/interceptor_data.dart'; |
import '../js_backend/native_data.dart'; |
+import '../js_backend/runtime_types.dart'; |
import '../kernel/element_map.dart'; |
import '../kernel/element_map_impl.dart'; |
import '../kernel/kernel_backend_strategy.dart'; |
@@ -142,6 +143,12 @@ class JsBackendStrategy implements KernelBackendStrategy { |
Iterable<MemberEntity> assignedInstanceMembers = |
closedWorld.assignedInstanceMembers.map(_map.toBackendMember).toList(); |
+ Iterable<ClassEntity> liveNativeClasses = |
+ closedWorld.liveNativeClasses.map(_map.toBackendClass).toList(); |
+ |
+ RuntimeTypesNeed rtiNeed = |
+ new JsRuntimeTypesNeed(_map, closedWorld.rtiNeed); |
+ |
return new JsClosedWorld(_elementMap, |
elementEnvironment: _elementEnvironment, |
dartTypes: _elementMap.types, |
@@ -150,9 +157,11 @@ class JsBackendStrategy implements KernelBackendStrategy { |
backendUsage: backendUsage, |
nativeData: nativeData, |
interceptorData: interceptorData, |
+ rtiNeed: rtiNeed, |
classHierarchyNodes: classHierarchyNodes, |
classSets: classSets, |
implementedClasses: implementedClasses, |
+ liveNativeClasses: liveNativeClasses, |
liveInstanceMembers: liveInstanceMembers, |
assignedInstanceMembers: assignedInstanceMembers, |
mixinUses: mixinUses, |
@@ -200,3 +209,35 @@ class JsBackendStrategy implements KernelBackendStrategy { |
selectorConstraintsStrategy); |
} |
} |
+ |
+class JsRuntimeTypesNeed implements RuntimeTypesNeed { |
+ final JsToFrontendMap _map; |
+ final RuntimeTypesNeed _rtiNeed; |
+ |
+ JsRuntimeTypesNeed(this._map, this._rtiNeed); |
+ |
+ @override |
+ bool classNeedsRti(ClassEntity cls) { |
+ return _rtiNeed.classNeedsRti(_map.toFrontendClass(cls)); |
+ } |
+ |
+ @override |
+ bool classUsesTypeVariableExpression(ClassEntity cls) { |
+ return _rtiNeed.classUsesTypeVariableExpression(_map.toFrontendClass(cls)); |
+ } |
+ |
+ @override |
+ bool localFunctionNeedsRti(Local function) { |
+ throw new UnimplementedError('JsRuntimeTypesNeed.localFunctionNeedsRti'); |
+ } |
+ |
+ @override |
+ bool methodNeedsRti(FunctionEntity function) { |
+ return _rtiNeed.methodNeedsRti(_map.toFrontendMember(function)); |
+ } |
+ |
+ @override |
+ bool classNeedsRtiField(ClassEntity cls) { |
+ return _rtiNeed.classNeedsRtiField(_map.toFrontendClass(cls)); |
+ } |
+} |