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

Unified Diff: pkg/compiler/lib/src/world.dart

Issue 2975433002: Assert that we don't mix K and J elements (Closed)
Patch Set: Updated cf. comments 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
Index: pkg/compiler/lib/src/world.dart
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 7b96e20421ec3b6bfe87ac720891e41c3e7b2f4c..0dcb9fec2a9e48c213d05347682ca198168ba56d 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -22,12 +22,16 @@ import 'elements/types.dart';
import 'js_backend/backend_usage.dart' show BackendUsage;
import 'js_backend/interceptor_data.dart' show InterceptorData;
import 'js_backend/native_data.dart' show NativeData;
+import 'js_backend/runtime_types.dart'
+ show RuntimeTypesNeed, RuntimeTypesNeedBuilder;
import 'ordered_typeset.dart';
+import 'options.dart';
import 'types/masks.dart' show CommonMasks, FlatTypeMask, TypeMask;
import 'universe/class_set.dart';
import 'universe/function_set.dart' show FunctionSet;
import 'universe/selector.dart' show Selector;
import 'universe/side_effects.dart' show SideEffects;
+import 'universe/world_builder.dart';
import 'util/util.dart' show Link;
/// Common superinterface for [OpenWorld] and [ClosedWorld].
@@ -58,6 +62,10 @@ abstract class ClosedWorld implements World {
ConstantSystem get constantSystem;
+ RuntimeTypesNeed get rtiNeed;
+
+ Iterable<ClassEntity> get liveNativeClasses;
+
/// Returns `true` if [cls] is either directly or indirectly instantiated.
bool isInstantiated(ClassEntity cls);
@@ -451,6 +459,8 @@ abstract class ClosedWorldBase implements ClosedWorld, ClosedWorldRefiner {
/// Members that are written either directly or through a setter selector.
final Iterable<MemberEntity> assignedInstanceMembers;
+ final Iterable<ClassEntity> liveNativeClasses;
+
ClosedWorldBase(
this.elementEnvironment,
this.dartTypes,
@@ -460,6 +470,7 @@ abstract class ClosedWorldBase implements ClosedWorld, ClosedWorldRefiner {
this.interceptorData,
this.backendUsage,
Set<ClassEntity> implementedClasses,
+ this.liveNativeClasses,
this.liveInstanceMembers,
this.assignedInstanceMembers,
Set<TypedefElement> allTypedefs,
@@ -1167,16 +1178,20 @@ abstract class ClosedWorldBase implements ClosedWorld, ClosedWorldRefiner {
}
}
-class ClosedWorldImpl extends ClosedWorldBase {
+class ClosedWorldImpl extends ClosedWorldBase with ClosedWorldRtiNeedMixin {
ClosedWorldImpl(
- {ElementEnvironment elementEnvironment,
+ {CompilerOptions options,
+ ElementEnvironment elementEnvironment,
DartTypes dartTypes,
CommonElements commonElements,
ConstantSystem constantSystem,
NativeData nativeData,
InterceptorData interceptorData,
BackendUsage backendUsage,
+ ResolutionWorldBuilder resolutionWorldBuilder,
+ RuntimeTypesNeedBuilder rtiNeedBuilder,
Set<ClassEntity> implementedClasses,
+ Iterable<ClassEntity> liveNativeClasses,
Iterable<MemberEntity> liveInstanceMembers,
Iterable<MemberEntity> assignedInstanceMembers,
Set<TypedefElement> allTypedefs,
@@ -1193,13 +1208,17 @@ class ClosedWorldImpl extends ClosedWorldBase {
interceptorData,
backendUsage,
implementedClasses,
+ liveNativeClasses,
liveInstanceMembers,
assignedInstanceMembers,
allTypedefs,
mixinUses,
typesImplementedBySubclasses,
classHierarchyNodes,
- classSets);
+ classSets) {
+ computeRtiNeed(resolutionWorldBuilder, rtiNeedBuilder,
+ enableTypeAssertions: options.enableTypeAssertions);
+ }
bool checkClass(ClassElement cls) => cls.isDeclaration;
@@ -1315,3 +1334,17 @@ class ClosedWorldImpl extends ClosedWorldBase {
return super.getSideEffectsOfElement(element);
}
}
+
+abstract class ClosedWorldRtiNeedMixin implements ClosedWorld {
+ RuntimeTypesNeed _rtiNeed;
+
+ void computeRtiNeed(ResolutionWorldBuilder resolutionWorldBuilder,
+ RuntimeTypesNeedBuilder rtiNeedBuilder,
+ {bool enableTypeAssertions}) {
+ _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed(
+ resolutionWorldBuilder, this,
+ enableTypeAssertions: enableTypeAssertions);
+ }
+
+ RuntimeTypesNeed get rtiNeed => _rtiNeed;
+}
« no previous file with comments | « pkg/compiler/lib/src/universe/world_builder.dart ('k') | tests/compiler/dart2js/equivalence/check_functions.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698