Index: pkg/compiler/lib/src/universe/world_builder.dart |
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart |
index 470adf3b6437a1ba8af1ca28866e5fe22d1c068f..fa4108aa282ab8ce8ca2fcb149cb9862be2891a1 100644 |
--- a/pkg/compiler/lib/src/universe/world_builder.dart |
+++ b/pkg/compiler/lib/src/universe/world_builder.dart |
@@ -6,14 +6,19 @@ library universe; |
import 'dart:collection'; |
+import '../cache_strategy.dart'; |
import '../common.dart'; |
+import '../common/backend_api.dart' show Backend; |
+import '../common/resolution.dart' show Resolution; |
import '../compiler.dart' show Compiler; |
+import '../core_types.dart' show CoreClasses; |
import '../dart_types.dart'; |
import '../elements/elements.dart'; |
+import '../types/masks.dart' show CommonMasks; |
import '../universe/class_set.dart' show Instantiation; |
import '../util/enumset.dart'; |
import '../util/util.dart'; |
-import '../world.dart' show World, ClosedWorld, OpenWorld; |
+import '../world.dart' show World, ClosedWorld, OpenWorld, WorldImpl; |
import 'selector.dart' show Selector; |
import 'use.dart' show DynamicUse, DynamicUseKind, StaticUse, StaticUseKind; |
@@ -120,7 +125,7 @@ abstract class WorldBuilder { |
/// Registers that [type] is checked in this universe. The unaliased type is |
/// returned. |
- DartType registerIsCheck(DartType type, Compiler compiler); |
+ DartType registerIsCheck(DartType type, Resolution resolution); |
/// All directly instantiated types, that is, the types of the directly |
/// instantiated classes. |
@@ -162,6 +167,19 @@ abstract class ResolutionWorldBuilder implements WorldBuilder { |
/// Call [f] for all directly or abstractly instantiated classes. |
void forEachInstantiatedClass( |
f(ClassElement cls, EnumSet<Instantiation> instantiations)); |
+ |
+ /// `true` of `Object.runtimeType` is supported. |
+ bool get hasRuntimeTypeSupport; |
+ |
+ /// `true` of use of the `dart:isolate` library is supported. |
+ bool get hasIsolateSupport; |
+ |
+ /// `true` of `Function.apply` is supported. |
+ bool get hasFunctionApplySupport; |
+ |
+ /// The [OpenWorld] being created by this world builder. |
+ // TODO(johnniwinther): Merge this with [ResolutionWorldBuilder]. |
+ OpenWorld get openWorld; |
} |
class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder { |
@@ -236,7 +254,18 @@ class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder { |
final SelectorConstraintsStrategy selectorConstraintsStrategy; |
- ResolutionWorldBuilderImpl(this.selectorConstraintsStrategy); |
+ bool hasRuntimeTypeSupport = false; |
+ bool hasIsolateSupport = false; |
+ bool hasFunctionApplySupport = false; |
+ |
+ OpenWorld _openWorld; |
+ |
+ ResolutionWorldBuilderImpl(Backend backend, CoreClasses coreClasses, |
+ CacheStrategy cacheStrategy, this.selectorConstraintsStrategy) { |
+ _openWorld = new WorldImpl(this, backend, coreClasses, cacheStrategy); |
+ } |
+ |
+ OpenWorld get openWorld => _openWorld; |
/// All directly instantiated classes, that is, classes with a generative |
/// constructor that has been called directly and not only through a |
@@ -365,8 +394,8 @@ class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder { |
return constraints.addReceiverConstraint(mask); |
} |
- DartType registerIsCheck(DartType type, Compiler compiler) { |
- type.computeUnaliased(compiler.resolution); |
+ DartType registerIsCheck(DartType type, Resolution resolution) { |
+ type.computeUnaliased(resolution); |
type = type.unaliased; |
// Even in checked mode, type annotations for return type and argument |
// types do not imply type checks, so there should never be a check |
@@ -644,8 +673,7 @@ class CodegenWorldBuilderImpl implements CodegenWorldBuilder { |
_invokedSetters.forEach(f); |
} |
- DartType registerIsCheck(DartType type, Compiler compiler) { |
- type.computeUnaliased(compiler.resolution); |
+ DartType registerIsCheck(DartType type, Resolution resolution) { |
type = type.unaliased; |
// Even in checked mode, type annotations for return type and argument |
// types do not imply type checks, so there should never be a check |