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

Unified Diff: pkg/compiler/lib/src/js_model/elements.dart

Issue 2978613002: Convert data objects eagerly from K to J (Closed)
Patch Set: Created 3 years, 5 months 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 | « pkg/compiler/lib/src/js_backend/runtime_types.dart ('k') | pkg/compiler/lib/src/js_model/js_strategy.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_model/elements.dart
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index 30244c06d019de9266f6598c5c4acf1970b08180..44d1f2aa62a1425866cd6596117f002a633787ad 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -4,23 +4,13 @@
library dart2js.js_model.elements;
-import '../common_elements.dart';
-import '../constants/constant_system.dart';
-import '../elements/elements.dart';
import '../elements/entities.dart';
import '../elements/names.dart';
import '../elements/types.dart';
-import '../js_backend/backend_usage.dart';
-import '../js_backend/interceptor_data.dart';
-import '../js_backend/native_data.dart';
-import '../js_backend/runtime_types.dart';
import '../kernel/elements.dart';
import '../kernel/element_map_impl.dart';
-import '../native/behavior.dart';
-import '../universe/class_set.dart';
-import '../world.dart';
-/// Bidirectional map between 'frontend' and 'backend' elements.
+/// Map from 'frontend' to 'backend' elements.
///
/// Frontend elements are what we read in, these typically represents concepts
/// in Dart. Backend elements are what we generate, these may include elements
@@ -30,23 +20,63 @@ import '../world.dart';
/// exception.
class JsToFrontendMap {
LibraryEntity toBackendLibrary(LibraryEntity library) => library;
- LibraryEntity toFrontendLibrary(LibraryEntity library) => library;
ClassEntity toBackendClass(ClassEntity cls) => cls;
- ClassEntity toFrontendClass(ClassEntity cls) => cls;
MemberEntity toBackendMember(MemberEntity member) => member;
- MemberEntity toFrontendMember(MemberEntity member) => member;
DartType toBackendType(DartType type) => type;
- DartType toFrontendType(DartType type) => type;
+
+ Set<LibraryEntity> toBackendLibrarySet(Iterable<LibraryEntity> set) {
+ return set.map(toBackendLibrary).toSet();
+ }
+
+ Set<ClassEntity> toBackendClassSet(Iterable<ClassEntity> set) {
+ return set.map(toBackendClass).toSet();
+ }
+
+ Set<MemberEntity> toBackendMemberSet(Iterable<MemberEntity> set) {
+ return set.map(toBackendMember).toSet();
+ }
+
+ Set<FunctionEntity> toBackendFunctionSet(Iterable<FunctionEntity> set) {
+ Set<FunctionEntity> newSet = new Set<FunctionEntity>();
+ for (FunctionEntity element in set) {
+ newSet.add(toBackendMember(element));
+ }
+ return newSet;
+ }
+
+ Map<LibraryEntity, V> toBackendLibraryMap<V>(
+ Map<LibraryEntity, V> map, V convert(V value)) {
+ return convertMap(map, toBackendLibrary, convert);
+ }
+
+ Map<ClassEntity, V> toBackendClassMap<V>(
+ Map<ClassEntity, V> map, V convert(V value)) {
+ return convertMap(map, toBackendClass, convert);
+ }
+
+ Map<MemberEntity, V> toBackendMemberMap<V>(
+ Map<MemberEntity, V> map, V convert(V value)) {
+ return convertMap(map, toBackendMember, convert);
+ }
}
-abstract class JsToFrontendMapBase implements JsToFrontendMap {
+E identity<E>(E element) => element;
+
+Map<K, V> convertMap<K, V>(
+ Map<K, V> map, K convertKey(K key), V convertValue(V value)) {
+ Map<K, V> newMap = <K, V>{};
+ map.forEach((K key, V value) {
+ newMap[convertKey(key)] = convertValue(value);
+ });
+ return newMap;
+}
+
+abstract class JsToFrontendMapBase extends JsToFrontendMap {
DartType toBackendType(DartType type) =>
const TypeConverter().visit(type, _toBackendEntity);
- DartType toFrontendType(DartType type) =>
- const TypeConverter().visit(type, _toFrontendEntity);
Entity _toBackendEntity(Entity entity) {
if (entity is ClassEntity) return toBackendClass(entity);
@@ -54,16 +84,7 @@ abstract class JsToFrontendMapBase implements JsToFrontendMap {
return toBackendTypeVariable(entity);
}
- Entity _toFrontendEntity(Entity entity) {
- if (entity is ClassEntity) return toFrontendClass(entity);
- assert(entity is TypeVariableEntity);
- TypeVariableEntity typeVariable = toFrontendTypeVariable(entity);
- assert(typeVariable != null, "No front end type variable for $entity");
- return typeVariable;
- }
-
TypeVariableEntity toBackendTypeVariable(TypeVariableEntity typeVariable);
- TypeVariableEntity toFrontendTypeVariable(TypeVariableEntity typeVariable);
}
// TODO(johnniwinther): Merge this with [JsKernelToElementMap].
@@ -534,218 +555,3 @@ class JLocalFunction implements Local {
String toString() => '${jsElementPrefix}local_function'
'(${memberContext.name}.${name ?? '<anonymous>'})';
}
-
-class JsClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin {
- final JsKernelToElementMap elementMap;
- final RuntimeTypesNeed rtiNeed;
-
- JsClosedWorld(this.elementMap,
- {ElementEnvironment elementEnvironment,
- DartTypes dartTypes,
- CommonElements commonElements,
- ConstantSystem constantSystem,
- NativeData nativeData,
- InterceptorData interceptorData,
- BackendUsage backendUsage,
- this.rtiNeed,
- Set<ClassEntity> implementedClasses,
- Iterable<ClassEntity> liveNativeClasses,
- Iterable<MemberEntity> liveInstanceMembers,
- Iterable<MemberEntity> assignedInstanceMembers,
- Set<TypedefElement> allTypedefs,
- Map<ClassEntity, Set<ClassEntity>> mixinUses,
- Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses,
- Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes,
- Map<ClassEntity, ClassSet> classSets})
- : super(
- elementEnvironment,
- dartTypes,
- commonElements,
- constantSystem,
- nativeData,
- interceptorData,
- backendUsage,
- implementedClasses,
- liveNativeClasses,
- liveInstanceMembers,
- assignedInstanceMembers,
- allTypedefs,
- mixinUses,
- typesImplementedBySubclasses,
- classHierarchyNodes,
- classSets);
-
- @override
- void registerClosureClass(ClassElement cls) {
- throw new UnimplementedError('JsClosedWorld.registerClosureClass');
- }
-}
-
-class JsNativeData implements NativeData {
- final JsToFrontendMap _map;
- final NativeData _nativeData;
-
- JsNativeData(this._map, this._nativeData);
-
- @override
- bool isNativeClass(ClassEntity element) {
- return _nativeData.isNativeClass(_map.toFrontendClass(element));
- }
-
- @override
- String computeUnescapedJSInteropName(String name) {
- return _nativeData.computeUnescapedJSInteropName(name);
- }
-
- @override
- String getJsInteropMemberName(MemberEntity element) {
- return _nativeData.getJsInteropMemberName(_map.toFrontendMember(element));
- }
-
- @override
- String getJsInteropClassName(ClassEntity element) {
- return _nativeData.getJsInteropClassName(_map.toFrontendClass(element));
- }
-
- @override
- bool isAnonymousJsInteropClass(ClassEntity element) {
- return _nativeData.isAnonymousJsInteropClass(_map.toFrontendClass(element));
- }
-
- @override
- String getJsInteropLibraryName(LibraryEntity element) {
- return _nativeData.getJsInteropLibraryName(_map.toFrontendLibrary(element));
- }
-
- @override
- bool isJsInteropMember(MemberEntity element) {
- return _nativeData.isJsInteropMember(_map.toFrontendMember(element));
- }
-
- @override
- String getFixedBackendMethodPath(FunctionEntity element) {
- return _nativeData
- .getFixedBackendMethodPath(_map.toFrontendMember(element));
- }
-
- @override
- String getFixedBackendName(MemberEntity element) {
- return _nativeData.getFixedBackendName(_map.toFrontendMember(element));
- }
-
- @override
- bool hasFixedBackendName(MemberEntity element) {
- return _nativeData.hasFixedBackendName(_map.toFrontendMember(element));
- }
-
- @override
- NativeBehavior getNativeFieldStoreBehavior(FieldEntity field) {
- return _nativeData
- .getNativeFieldStoreBehavior(_map.toFrontendMember(field));
- }
-
- @override
- NativeBehavior getNativeFieldLoadBehavior(FieldEntity field) {
- return _nativeData.getNativeFieldLoadBehavior(_map.toFrontendMember(field));
- }
-
- @override
- NativeBehavior getNativeMethodBehavior(FunctionEntity method) {
- return _nativeData.getNativeMethodBehavior(_map.toFrontendMember(method));
- }
-
- @override
- bool isNativeMember(MemberEntity element) {
- return _nativeData.isNativeMember(_map.toFrontendMember(element));
- }
-
- @override
- bool isJsInteropClass(ClassEntity element) {
- return _nativeData.isJsInteropClass(_map.toFrontendClass(element));
- }
-
- @override
- bool isJsInteropLibrary(LibraryEntity element) {
- return _nativeData.isJsInteropLibrary(_map.toFrontendLibrary(element));
- }
-
- @override
- bool get isJsInteropUsed {
- return _nativeData.isJsInteropUsed;
- }
-
- @override
- bool isNativeOrExtendsNative(ClassEntity element) {
- return _nativeData.isNativeOrExtendsNative(_map.toFrontendClass(element));
- }
-
- @override
- bool hasNativeTagsForcedNonLeaf(ClassEntity cls) {
- return _nativeData.hasNativeTagsForcedNonLeaf(_map.toFrontendClass(cls));
- }
-
- @override
- List<String> getNativeTagsOfClass(ClassEntity cls) {
- return _nativeData.getNativeTagsOfClass(_map.toFrontendClass(cls));
- }
-}
-
-class JsBackendUsage implements BackendUsage {
- final JsToFrontendMap _map;
- final BackendUsage _backendUsage;
-
- @override
- bool needToInitializeIsolateAffinityTag;
- @override
- bool needToInitializeDispatchProperty;
-
- JsBackendUsage(this._map, this._backendUsage) {
- needToInitializeIsolateAffinityTag =
- _backendUsage.needToInitializeIsolateAffinityTag;
- needToInitializeDispatchProperty =
- _backendUsage.needToInitializeDispatchProperty;
- }
-
- @override
- bool isFunctionUsedByBackend(FunctionEntity element) {
- return _backendUsage
- .isFunctionUsedByBackend(_map.toFrontendMember(element));
- }
-
- @override
- bool isFieldUsedByBackend(FieldEntity element) {
- return _backendUsage.isFieldUsedByBackend(_map.toFrontendMember(element));
- }
-
- @override
- Iterable<FunctionEntity> get globalFunctionDependencies {
- FunctionEntity f(FunctionEntity e) => _map.toBackendMember(e);
- return _backendUsage.globalFunctionDependencies.map(f);
- }
-
- @override
- Iterable<ClassEntity> get globalClassDependencies {
- return _backendUsage.globalClassDependencies.map(_map.toBackendClass);
- }
-
- @override
- bool get requiresPreamble => _backendUsage.requiresPreamble;
-
- @override
- bool get isInvokeOnUsed => _backendUsage.isInvokeOnUsed;
-
- @override
- bool get isRuntimeTypeUsed => _backendUsage.isRuntimeTypeUsed;
-
- @override
- bool get isIsolateInUse => _backendUsage.isIsolateInUse;
-
- @override
- bool get isFunctionApplyUsed => _backendUsage.isFunctionApplyUsed;
-
- @override
- bool get isMirrorsUsed => _backendUsage.isMirrorsUsed;
-
- @override
- bool get isNoSuchMethodUsed => _backendUsage.isNoSuchMethodUsed;
-}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/runtime_types.dart ('k') | pkg/compiler/lib/src/js_model/js_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698