Chromium Code Reviews| Index: pkg/compiler/lib/src/common/backend_api.dart |
| diff --git a/pkg/compiler/lib/src/common/backend_api.dart b/pkg/compiler/lib/src/common/backend_api.dart |
| index 2bb7001798d1f93dba50e4768471892cea45ef41..7c36cb168b50797fa8e7edbd1ad22161b872baa4 100644 |
| --- a/pkg/compiler/lib/src/common/backend_api.dart |
| +++ b/pkg/compiler/lib/src/common/backend_api.dart |
| @@ -82,7 +82,8 @@ abstract class Backend extends Target { |
| void initializeHelperClasses() {} |
| - void enqueueHelpers(ResolutionEnqueuer world); |
| + /// Compute the [WorldImpact] for backend helper methods. |
| + WorldImpact computeHelpersImpact(); |
| /// Creates an [Enqueuer] for code generation specific to this backend. |
| Enqueuer createCodegenEnqueuer(CompilerTask task, Compiler compiler); |
| @@ -116,21 +117,27 @@ abstract class Backend extends Target { |
| /// Enable deferred loading. Returns `true` if the backend supports deferred |
| /// loading. |
| - bool enableDeferredLoadingIfSupported( |
| - ResolutionEnqueuer enqueuer, Spannable node); |
| + bool enableDeferredLoadingIfSupported(Spannable node); |
| + |
| + /// Returns the [WorldImpact] of enabling deferred loading. |
| + WorldImpact computeDeferredLoadingImpact() => const WorldImpact(); |
| /// Called during codegen when [constant] has been used. |
| void computeImpactForCompileTimeConstant(ConstantValue constant, |
| WorldImpactBuilder impactBuilder, bool isForResolution) {} |
| - /// Called to notify to the backend that a class is being instantiated. |
| - // TODO(johnniwinther): Remove this. It's only called once for each [cls] and |
| - // only with [Compiler.globalDependencies] as [registry]. |
| - void registerInstantiatedClass(ClassElement cls, Enqueuer enqueuer) {} |
| + /// Called to notify to the backend that a class is being instantiated. Any |
| + /// backend specific [WorldImpact] of this is returned. |
| + WorldImpact registerInstantiatedClass(ClassElement cls, |
| + {bool forResolution}) => |
| + const WorldImpact(); |
| /// Called to notify to the backend that a class is implemented by an |
| - /// instantiated class. |
| - void registerImplementedClass(ClassElement cls, Enqueuer enqueuer) {} |
| + /// instantiated class. Any backend specific [WorldImpact] of this is |
| + /// returned. |
| + WorldImpact registerImplementedClass(ClassElement cls, |
| + {bool forResolution}) => |
| + const WorldImpact(); |
| /// Called to instruct to the backend register [type] as instantiated on |
| /// [enqueuer]. |
| @@ -141,40 +148,44 @@ abstract class Backend extends Target { |
| void registerTypeVariableBoundsSubtypeCheck( |
| DartType typeArgument, DartType bound) {} |
| - /** |
| - * Call this to register that an instantiated generic class has a call |
| - * method. |
| - */ |
| - void registerCallMethodWithFreeTypeVariables( |
| - Element callMethod, Enqueuer enqueuer) {} |
| + /// Called to register that an instantiated generic class has a call method. |
|
Harry Terkelsen
2016/11/28 19:03:06
is this method called even if the call method does
Johnni Winther
2016/11/29 08:01:37
Yes. Added a note to the comment.
|
| + /// Any backend specific [WorldImpact] of this is returned. |
| + WorldImpact registerCallMethodWithFreeTypeVariables(Element callMethod, |
| + {bool forResolution}) => |
| + const WorldImpact(); |
| /// Called to instruct the backend to register that a closure exists for a |
| - /// function on an instantiated generic class. |
| - void registerClosureWithFreeTypeVariables( |
| - Element closure, Enqueuer enqueuer) {} |
| + /// function on an instantiated generic class. Any backend specific |
| + /// [WorldImpact] of this is returned. |
| + WorldImpact registerClosureWithFreeTypeVariables(Element closure, |
| + {bool forResolution}) => |
| + const WorldImpact(); |
| - /// Call this to register that a member has been closurized. |
| - void registerBoundClosure(Enqueuer enqueuer) {} |
| + /// Called to register that a member has been closurized. Any backend specific |
| + /// [WorldImpact] of this is returned. |
| + WorldImpact registerBoundClosure() => const WorldImpact(); |
| - /// Call this to register that a static function has been closurized. |
| - void registerGetOfStaticFunction(Enqueuer enqueuer) {} |
| + /// Called to register that a static function has been closurized. Any backend |
| + /// specific [WorldImpact] of this is returned. |
| + WorldImpact registerGetOfStaticFunction() => const WorldImpact(); |
| - /** |
| - * Call this to register that the [:runtimeType:] property has been accessed. |
| - */ |
| - void registerRuntimeType(Enqueuer enqueuer) {} |
| + /// Called to register that the `runtimeType` property has been accessed. Any |
| + /// backend specific [WorldImpact] of this is returned. |
| + WorldImpact registerRuntimeType() => const WorldImpact(); |
| - /// Call this to register a `noSuchMethod` implementation. |
| + /// Called to register a `noSuchMethod` implementation. |
| void registerNoSuchMethod(FunctionElement noSuchMethodElement) {} |
| - /// Call this method to enable support for `noSuchMethod`. |
| - void enableNoSuchMethod(Enqueuer enqueuer) {} |
| + /// Called to enable support for `noSuchMethod`. Any backend specific |
| + /// [WorldImpact] of this is returned. |
| + WorldImpact enableNoSuchMethod() => const WorldImpact(); |
| /// Returns whether or not `noSuchMethod` support has been enabled. |
| bool get enabledNoSuchMethod => false; |
| - /// Call this method to enable support for isolates. |
| - void enableIsolateSupport(Enqueuer enqueuer) {} |
| + /// Called to enable support for isolates. Any backend specific [WorldImpact] |
| + /// of this is returned. |
| + WorldImpact enableIsolateSupport({bool forResolution}); |
| void registerConstSymbol(String name) {} |
| @@ -206,7 +217,10 @@ abstract class Backend extends Target { |
| return false; |
| } |
| - void registerStaticUse(Enqueuer enqueuer, Element element) {} |
| + /// Called to register that [element] is statically known to be used. Any |
| + /// backend specific [WorldImpact] of this is returned. |
| + WorldImpact registerStaticUse(Element element, {bool forResolution}) => |
| + const WorldImpact(); |
| /// This method is called immediately after the [LibraryElement] [library] has |
| /// been created. |
| @@ -314,7 +328,9 @@ abstract class Backend extends Target { |
| void forgetElement(Element element) {} |
| /// Computes the [WorldImpact] of calling [mainMethod] as the entry point. |
| - WorldImpact computeMainImpact(Enqueuer enqueuer, MethodElement mainMethod) {} |
| + WorldImpact computeMainImpact(MethodElement mainMethod, |
| + {bool forResolution}) => |
| + const WorldImpact(); |
| /// Returns the location of the patch-file associated with [libraryName] |
| /// resolved from [plaformConfigUri]. |