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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart

Issue 2907373002: Use entities for globals in Namer. (Closed)
Patch Set: Updated cf. comments Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.js_emitter.lazy_emitter; 5 library dart2js.js_emitter.lazy_emitter;
6 6
7 import 'package:js_runtime/shared/embedded_names.dart' show JsBuiltin; 7 import 'package:js_runtime/shared/embedded_names.dart' show JsBuiltin;
8 8
9 import '../../common.dart'; 9 import '../../common.dart';
10 import '../../compiler.dart' show Compiler; 10 import '../../compiler.dart' show Compiler;
11 import '../../constants/values.dart' show ConstantValue; 11 import '../../constants/values.dart' show ConstantValue;
12 import '../../deferred_load.dart' show OutputUnit; 12 import '../../deferred_load.dart' show OutputUnit;
13 import '../../elements/elements.dart' 13 import '../../elements/elements.dart'
14 show ClassElement, Element, FieldElement, MethodElement; 14 show ClassElement, FieldElement, MethodElement;
15 import '../../elements/entities.dart'; 15 import '../../elements/entities.dart';
16 import '../../js/js.dart' as js; 16 import '../../js/js.dart' as js;
17 import '../../js_backend/js_backend.dart' show JavaScriptBackend, Namer; 17 import '../../js_backend/js_backend.dart' show JavaScriptBackend, Namer;
18 import '../../world.dart' show ClosedWorld; 18 import '../../world.dart' show ClosedWorld;
19 import '../js_emitter.dart' show CodeEmitterTask, NativeEmitter; 19 import '../js_emitter.dart' show CodeEmitterTask, NativeEmitter;
20 import '../js_emitter.dart' as emitterTask show Emitter, EmitterFactory; 20 import '../js_emitter.dart' as emitterTask show EmitterBase, EmitterFactory;
21 import '../model.dart'; 21 import '../model.dart';
22 import '../program_builder/program_builder.dart' show ProgramBuilder; 22 import '../program_builder/program_builder.dart' show ProgramBuilder;
23 import 'model_emitter.dart'; 23 import 'model_emitter.dart';
24 24
25 class EmitterFactory implements emitterTask.EmitterFactory { 25 class EmitterFactory implements emitterTask.EmitterFactory {
26 @override 26 @override
27 bool get supportsReflection => false; 27 bool get supportsReflection => false;
28 28
29 @override 29 @override
30 Emitter createEmitter( 30 Emitter createEmitter(
31 CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) { 31 CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) {
32 return new Emitter( 32 return new Emitter(
33 task.compiler, namer, task.nativeEmitter, closedWorld, task); 33 task.compiler, namer, task.nativeEmitter, closedWorld, task);
34 } 34 }
35 } 35 }
36 36
37 class Emitter implements emitterTask.Emitter { 37 class Emitter extends emitterTask.EmitterBase {
38 final Compiler _compiler; 38 final Compiler _compiler;
39 final Namer namer; 39 final Namer namer;
40 final ModelEmitter _emitter; 40 final ModelEmitter _emitter;
41 41
42 JavaScriptBackend get _backend => _compiler.backend; 42 JavaScriptBackend get _backend => _compiler.backend;
43 43
44 Emitter(Compiler compiler, Namer namer, NativeEmitter nativeEmitter, 44 Emitter(Compiler compiler, Namer namer, NativeEmitter nativeEmitter,
45 ClosedWorld closedWorld, CodeEmitterTask task) 45 ClosedWorld closedWorld, CodeEmitterTask task)
46 : this._compiler = compiler, 46 : this._compiler = compiler,
47 this.namer = namer, 47 this.namer = namer,
(...skipping 29 matching lines...) Expand all
77 js.Expression generateEmbeddedGlobalAccess(String global) { 77 js.Expression generateEmbeddedGlobalAccess(String global) {
78 return _emitter.generateEmbeddedGlobalAccess(global); 78 return _emitter.generateEmbeddedGlobalAccess(global);
79 } 79 }
80 80
81 @override 81 @override
82 // TODO(herhut): Use a single shared function. 82 // TODO(herhut): Use a single shared function.
83 js.Expression generateFunctionThatReturnsNull() { 83 js.Expression generateFunctionThatReturnsNull() {
84 return js.js('function() {}'); 84 return js.js('function() {}');
85 } 85 }
86 86
87 js.PropertyAccess _globalPropertyAccess(Element element) {
88 js.Name name = namer.globalPropertyName(element);
89 js.PropertyAccess pa = new js.PropertyAccess(
90 new js.VariableUse(namer.globalObjectFor(element)), name);
91 return pa;
92 }
93
94 @override 87 @override
95 js.Expression isolateLazyInitializerAccess(FieldElement element) { 88 js.Expression isolateLazyInitializerAccess(FieldElement element) {
96 return js.js('#.#', 89 return js.js('#.#', [
97 [namer.globalObjectFor(element), namer.lazyInitializerName(element)]); 90 namer.globalObjectForMember(element),
91 namer.lazyInitializerName(element)
92 ]);
98 } 93 }
99 94
100 @override 95 @override
101 js.Expression isolateStaticClosureAccess(MethodElement element) { 96 js.Expression isolateStaticClosureAccess(MethodElement element) {
102 return _emitter.generateStaticClosureAccess(element); 97 return _emitter.generateStaticClosureAccess(element);
103 } 98 }
104 99
105 @override 100 @override
106 js.PropertyAccess staticFieldAccess(FieldElement element) {
107 return _globalPropertyAccess(element);
108 }
109
110 @override
111 js.PropertyAccess staticFunctionAccess(MethodElement element) {
112 return _globalPropertyAccess(element);
113 }
114
115 @override
116 js.PropertyAccess constructorAccess(ClassElement element) {
117 return _globalPropertyAccess(element);
118 }
119
120 @override
121 js.PropertyAccess prototypeAccess( 101 js.PropertyAccess prototypeAccess(
122 ClassElement element, bool hasBeenInstantiated) { 102 ClassElement element, bool hasBeenInstantiated) {
123 js.Expression constructor = 103 js.Expression constructor =
124 hasBeenInstantiated ? constructorAccess(element) : typeAccess(element); 104 hasBeenInstantiated ? constructorAccess(element) : typeAccess(element);
125 return js.js('#.prototype', constructor); 105 return js.js('#.prototype', constructor);
126 } 106 }
127 107
128 @override 108 @override
129 js.Expression interceptorClassAccess(ClassElement element) { 109 js.Expression interceptorClassAccess(ClassEntity element) {
130 // Some interceptors are eagerly constructed. However, native interceptors 110 // Some interceptors are eagerly constructed. However, native interceptors
131 // aren't. 111 // aren't.
132 return js.js('#.ensureResolved()', _globalPropertyAccess(element)); 112 return js.js('#.ensureResolved()', globalPropertyAccessForClass(element));
133 } 113 }
134 114
135 @override 115 @override
136 js.Expression typeAccess(Entity element) { 116 js.Expression typeAccess(Entity element) {
137 // TODO(floitsch): minify 'ensureResolved'. 117 // TODO(floitsch): minify 'ensureResolved'.
138 // TODO(floitsch): don't emit `ensureResolved` for eager classes. 118 // TODO(floitsch): don't emit `ensureResolved` for eager classes.
139 return js.js('#.ensureResolved()', _globalPropertyAccess(element)); 119 return js.js('#.ensureResolved()', globalPropertyAccessForType(element));
140 } 120 }
141 121
142 @override 122 @override
143 js.Template templateForBuiltin(JsBuiltin builtin) { 123 js.Template templateForBuiltin(JsBuiltin builtin) {
144 String typeNameProperty = ModelEmitter.typeNameProperty; 124 String typeNameProperty = ModelEmitter.typeNameProperty;
145 125
146 switch (builtin) { 126 switch (builtin) {
147 case JsBuiltin.dartObjectConstructor: 127 case JsBuiltin.dartObjectConstructor:
148 return js.js.expressionTemplateYielding( 128 return js.js.expressionTemplateYielding(
149 typeAccess(_compiler.commonElements.objectClass)); 129 typeAccess(_compiler.commonElements.objectClass));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 reporter.internalError( 166 reporter.internalError(
187 NO_LOCATION_SPANNABLE, "Unhandled Builtin: $builtin"); 167 NO_LOCATION_SPANNABLE, "Unhandled Builtin: $builtin");
188 return null; 168 return null;
189 } 169 }
190 } 170 }
191 171
192 @override 172 @override
193 // TODO(het): Generate this correctly 173 // TODO(het): Generate this correctly
194 int generatedSize(OutputUnit unit) => 0; 174 int generatedSize(OutputUnit unit) => 0;
195 } 175 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698