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

Unified Diff: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart

Issue 2824823004: Remove Compiler and JavaScriptBackend from program_builder and collector. (Closed)
Patch Set: Created 3 years, 8 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/js_emitter/program_builder/program_builder.dart
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 6569913d993b923d4811c1711ba5dba5631d218a..8e14fbfdb84a5835230572ac7b2bc55c55257afb 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -7,7 +7,6 @@ library dart2js.js_emitter.program_builder;
import '../../closure.dart' show ClosureTask, ClosureFieldElement;
import '../../common.dart';
import '../../common/names.dart' show Names, Selectors;
-import '../../compiler.dart' show Compiler;
import '../../constants/values.dart'
show ConstantValue, InterceptorConstantValue;
import '../../common_elements.dart' show CommonElements;
@@ -35,7 +34,6 @@ import '../../elements/types.dart' show DartType;
import '../../js/js.dart' as js;
import '../../js_backend/backend.dart'
show
- JavaScriptBackend,
RuntimeTypesChecks,
RuntimeTypesNeed,
RuntimeTypesEncoder,
@@ -76,7 +74,27 @@ part 'registry.dart';
/// Builds a self-contained representation of the program that can then be
/// emitted more easily by the individual emitters.
class ProgramBuilder {
- final Compiler _compiler;
+ final CompilerOptions _options;
+ final CommonElements _commonElements;
+ final Types _types;
+ final DeferredLoadTask _deferredLoadTask;
+ final ClosureTask _closureToClassMapper;
+ final CodegenWorldBuilder _worldBuilder;
+ final NativeCodegenEnqueuer _nativeCodegenEnqueuer;
+ final BackendUsage _backendUsage;
+ final JavaScriptConstantCompiler _constantHandler;
+ final NativeData _nativeData;
+ final RuntimeTypesNeed _rtiNeed;
+ final MirrorsData _mirrorsData;
+ final InterceptorData _interceptorData;
+ final SuperMemberData _superMemberData;
+ final RuntimeTypesChecks _rtiChecks;
+ final RuntimeTypesEncoder _rtiEncoder;
+ final RuntimeTypesSubstitutions _rtiSubstitutions;
+ final JsInteropAnalysis _jsInteropAnalysis;
+ final OneShotInterceptorData _oneShotInterceptorData;
+ final CustomElementsCodegenAnalysis _customElementsCodegenAnalysis;
+ final Map<MemberElement, js.Expression> _generatedCode;
final Namer _namer;
final CodeEmitterTask _task;
final ClosedWorld _closedWorld;
@@ -90,42 +108,57 @@ class ProgramBuilder {
final Registry _registry;
+ final FunctionEntity _mainFunction;
+ final bool _isMockCompilation;
+
/// True if the program should store function types in the metadata.
bool _storeFunctionTypesInMetadata = false;
- ProgramBuilder(Compiler compiler, Namer _namer, this._task, Emitter emitter,
- ClosedWorld closedWorld, Set<ClassElement> rtiNeededClasses)
- : this._compiler = compiler,
- this._namer = _namer,
- this._closedWorld = closedWorld,
+ ProgramBuilder(
+ this._options,
+ this._commonElements,
+ this._types,
+ this._deferredLoadTask,
+ this._closureToClassMapper,
+ this._worldBuilder,
+ this._nativeCodegenEnqueuer,
+ this._backendUsage,
+ this._constantHandler,
+ this._nativeData,
+ this._rtiNeed,
+ this._mirrorsData,
+ this._interceptorData,
+ this._superMemberData,
+ this._rtiChecks,
+ this._rtiEncoder,
+ this._rtiSubstitutions,
+ this._jsInteropAnalysis,
+ this._oneShotInterceptorData,
+ this._customElementsCodegenAnalysis,
+ this._generatedCode,
+ this._namer,
+ this._task,
+ this._closedWorld,
+ Set<ClassElement> rtiNeededClasses,
+ this._mainFunction,
+ {bool isMockCompilation})
+ : this._isMockCompilation = isMockCompilation,
this.collector = new Collector(
- compiler, _namer, closedWorld, rtiNeededClasses, emitter),
- this._registry = new Registry(compiler);
-
- JavaScriptBackend get _backend => _compiler.backend;
- CodegenWorldBuilder get _worldBuilder => _compiler.codegenWorldBuilder;
- DeferredLoadTask get _deferredLoadTask => _compiler.deferredLoadTask;
- Types get _types => _compiler.types;
- CommonElements get _commonElements => _compiler.commonElements;
- CompilerOptions get _options => _compiler.options;
- ClosureTask get _closureToClassMapper => _compiler.closureToClassMapper;
- NativeCodegenEnqueuer get _nativeCodegenEnqueuer =>
- _backend.nativeCodegenEnqueuer;
- BackendUsage get _backendUsage => _backend.backendUsage;
- JavaScriptConstantCompiler get _constantHandler => _backend.constants;
- NativeData get _nativeData => _backend.nativeData;
- RuntimeTypesNeed get _rtiNeed => _backend.rtiNeed;
- MirrorsData get _mirrorsData => _backend.mirrorsData;
- InterceptorData get _interceptorData => _backend.interceptorData;
- SuperMemberData get _superMemberData => _backend.superMemberData;
- RuntimeTypesChecks get _rtiChecks => _backend.rtiChecks;
- RuntimeTypesEncoder get _rtiEncoder => _backend.rtiEncoder;
- RuntimeTypesSubstitutions get _rtiSubstitutions => _backend.rtiSubstitutions;
- JsInteropAnalysis get _jsInteropAnalysis => _backend.jsInteropAnalysis;
- OneShotInterceptorData get _oneShotInterceptorData =>
- _backend.oneShotInterceptorData;
- CustomElementsCodegenAnalysis get _customElementsCodegenAnalysis =>
- _backend.customElementsCodegenAnalysis;
+ _options,
+ _commonElements,
+ _deferredLoadTask,
+ _worldBuilder,
+ _namer,
+ _task.emitter,
+ _constantHandler,
+ _nativeData,
+ _interceptorData,
+ _oneShotInterceptorData,
+ _mirrorsData,
+ _closedWorld,
+ rtiNeededClasses,
+ _generatedCode),
+ this._registry = new Registry(_deferredLoadTask);
/// Mapping from [ClassElement] to constructed [Class]. We need this to
/// update the superclass in the [Class].
@@ -279,17 +312,18 @@ class ProgramBuilder {
}
js.Statement _buildInvokeMain() {
- if (_compiler.isMockCompilation) return js.js.comment("Mock compilation");
+ if (_isMockCompilation) return js.js.comment("Mock compilation");
MainCallStubGenerator generator = new MainCallStubGenerator(
_commonElements, _task.emitter, _backendUsage);
- return generator.generateInvokeMain(_compiler.mainFunction);
+ return generator.generateInvokeMain(_mainFunction);
}
DeferredFragment _buildDeferredFragment(LibrariesMap librariesMap) {
DeferredFragment result = new DeferredFragment(
librariesMap.outputUnit,
- _backend.deferredPartFileName(librariesMap.name, addExtension: false),
+ _deferredLoadTask.deferredPartFileName(librariesMap.name,
+ addExtension: false),
librariesMap.name,
_buildLibraries(librariesMap),
_buildStaticNonFinalFields(librariesMap),
@@ -351,7 +385,7 @@ class ProgramBuilder {
}
StaticField _buildLazyField(FieldElement element) {
- js.Expression code = _backend.generatedCode[element];
+ js.Expression code = _generatedCode[element];
// The code is null if we ended up not needing the lazily
// initialized field after all because of constant folding
// before code generation.
@@ -655,7 +689,7 @@ class ProgramBuilder {
if (field.needsCheckedSetter) {
assert(!field.needsUncheckedSetter);
FieldElement element = field.element;
- js.Expression code = _backend.generatedCode[element];
+ js.Expression code = _generatedCode[element];
assert(code != null);
js.Name name = _namer.deriveSetterName(field.accessorName);
checkedSetters.add(_buildStubMethod(name, code, element: element));
@@ -753,7 +787,7 @@ class ProgramBuilder {
DartMethod _buildMethod(MethodElement element) {
assert(element.isDeclaration);
js.Name name = _namer.methodPropertyName(element);
- js.Expression code = _backend.generatedCode[element];
+ js.Expression code = _generatedCode[element];
// TODO(kasperl): Figure out under which conditions code is null.
if (code == null) return null;
@@ -999,7 +1033,7 @@ class ProgramBuilder {
StaticDartMethod _buildStaticMethod(MethodElement element) {
js.Name name = _namer.methodPropertyName(element);
String holder = _namer.globalObjectFor(element);
- js.Expression code = _backend.generatedCode[element];
+ js.Expression code = _generatedCode[element];
bool isApplyTarget = !element.isConstructor && !element.isAccessor;
bool canBeApplied = _methodCanBeApplied(element);

Powered by Google App Engine
This is Rietveld 408576698