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

Unified Diff: pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart

Issue 2568723007: Create Namer and Emitter on codegen start. (Closed)
Patch Set: Small fix. Created 4 years 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/full_emitter/emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index af5e7644cab37a0411129404692a85ce2dd3668f..1affdaf84ce5adaeb4b72ea9b0777e143064a0f4 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -52,13 +52,15 @@ import '../../js_backend/js_backend.dart'
TypeVariableHandler;
import '../../universe/call_structure.dart' show CallStructure;
import '../../universe/selector.dart' show Selector;
+import '../../universe/world_builder.dart' show CodegenWorldBuilder;
import '../../util/characters.dart' show $$, $A, $HASH, $Z, $a, $z;
import '../../util/uri_extras.dart' show relativize;
import '../../util/util.dart' show equalElements;
+import '../../world.dart' show ClosedWorld;
import '../constant_ordering.dart' show deepCompareConstants;
import '../headers.dart';
-import '../js_emitter.dart' hide Emitter;
-import '../js_emitter.dart' as js_emitter show Emitter;
+import '../js_emitter.dart' hide Emitter, EmitterFactory;
+import '../js_emitter.dart' as js_emitter show Emitter, EmitterFactory;
import '../model.dart';
import '../program_builder/program_builder.dart';
@@ -72,6 +74,25 @@ part 'interceptor_emitter.dart';
part 'nsm_emitter.dart';
part 'setup_program_builder.dart';
+class EmitterFactory implements js_emitter.EmitterFactory {
+ final bool generateSourceMap;
+
+ EmitterFactory({this.generateSourceMap});
+
+ @override
+ String get patchVersion => "full";
+
+ @override
+ bool get supportsReflection => true;
+
+ @override
+ Emitter createEmitter(
+ CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) {
+ return new Emitter(
+ task.compiler, namer, closedWorld, generateSourceMap, task);
+ }
+}
+
class Emitter implements js_emitter.Emitter {
final Compiler compiler;
final CodeEmitterTask task;
@@ -83,9 +104,9 @@ class Emitter implements js_emitter.Emitter {
List<TypedefElement> typedefsNeededForReflection;
final ContainerBuilder containerBuilder = new ContainerBuilder();
- final ClassEmitter classEmitter = new ClassEmitter();
- final NsmEmitter nsmEmitter = new NsmEmitter();
- final InterceptorEmitter interceptorEmitter = new InterceptorEmitter();
+ final ClassEmitter classEmitter;
+ final NsmEmitter nsmEmitter;
+ final InterceptorEmitter interceptorEmitter;
// TODO(johnniwinther): Wrap these fields in a caching strategy.
final Set<ConstantValue> cachedEmittedConstants;
@@ -154,18 +175,30 @@ class Emitter implements js_emitter.Emitter {
final bool generateSourceMap;
- Emitter(Compiler compiler, Namer namer, this.generateSourceMap, this.task)
+ Emitter(Compiler compiler, Namer namer, ClosedWorld closedWorld,
+ this.generateSourceMap, this.task)
: this.compiler = compiler,
this.namer = namer,
cachedEmittedConstants = compiler.cacheStrategy.newSet(),
cachedClassBuilders = compiler.cacheStrategy.newMap(),
- cachedElements = compiler.cacheStrategy.newSet() {
+ cachedElements = compiler.cacheStrategy.newSet(),
+ classEmitter = new ClassEmitter(closedWorld),
+ interceptorEmitter = new InterceptorEmitter(closedWorld),
+ nsmEmitter = new NsmEmitter(closedWorld) {
constantEmitter = new ConstantEmitter(
compiler, namer, this.constantReference, constantListGenerator);
containerBuilder.emitter = this;
classEmitter.emitter = this;
nsmEmitter.emitter = this;
interceptorEmitter.emitter = this;
+ if (compiler.options.hasIncrementalSupport) {
+ // Much like a scout, an incremental compiler is always prepared. For
+ // mixins, classes, and lazy statics, at least.
+ needsClassSupport = true;
+ needsMixinSupport = true;
+ needsLazyInitializer = true;
+ needsStructuredMemberInfo = true;
+ }
}
DiagnosticReporter get reporter => compiler.reporter;
@@ -189,9 +222,6 @@ class Emitter implements js_emitter.Emitter {
}
@override
- String get patchVersion => "full";
-
- @override
bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
if (constant.isFunction) return true; // Already emitted.
if (constant.isPrimitive) return true; // Inlined.
@@ -273,9 +303,6 @@ class Emitter implements js_emitter.Emitter {
String get globalsHolder => r"$globals$";
@override
- bool get supportsReflection => true;
-
- @override
jsAst.Expression generateEmbeddedGlobalAccess(String global) {
return js(generateEmbeddedGlobalAccessString(global));
}

Powered by Google App Engine
This is Rietveld 408576698