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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/startup_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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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.startup_emitter; 5 library dart2js.js_emitter.startup_emitter;
6 6
7 import 'package:js_runtime/shared/embedded_names.dart' 7 import 'package:js_runtime/shared/embedded_names.dart'
8 show JsBuiltin, METADATA, STATIC_FUNCTION_NAME_TO_CLOSURE, TYPES; 8 show JsBuiltin, METADATA, STATIC_FUNCTION_NAME_TO_CLOSURE, TYPES;
9 9
10 import '../../common.dart'; 10 import '../../common.dart';
11 import '../../compiler.dart' show Compiler; 11 import '../../compiler.dart' show Compiler;
12 import '../../constants/values.dart' show ConstantValue; 12 import '../../constants/values.dart' show ConstantValue;
13 import '../../deferred_load.dart' show OutputUnit; 13 import '../../deferred_load.dart' show OutputUnit;
14 import '../../elements/elements.dart' 14 import '../../elements/elements.dart' show ClassElement, MethodElement;
15 show ClassElement, Element, FieldElement, MethodElement; 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 final bool generateSourceMap; 26 final bool generateSourceMap;
27 27
28 EmitterFactory({this.generateSourceMap}); 28 EmitterFactory({this.generateSourceMap});
29 29
30 @override 30 @override
31 bool get supportsReflection => false; 31 bool get supportsReflection => false;
32 32
33 @override 33 @override
34 Emitter createEmitter( 34 Emitter createEmitter(
35 CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) { 35 CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) {
36 return new Emitter(task.compiler, namer, task.nativeEmitter, closedWorld, 36 return new Emitter(task.compiler, namer, task.nativeEmitter, closedWorld,
37 task, generateSourceMap); 37 task, generateSourceMap);
38 } 38 }
39 } 39 }
40 40
41 class Emitter implements emitterTask.Emitter { 41 class Emitter extends emitterTask.EmitterBase {
42 final Compiler _compiler; 42 final Compiler _compiler;
43 final Namer namer; 43 final Namer namer;
44 final ModelEmitter _emitter; 44 final ModelEmitter _emitter;
45 45
46 JavaScriptBackend get _backend => _compiler.backend; 46 JavaScriptBackend get _backend => _compiler.backend;
47 47
48 Emitter( 48 Emitter(
49 Compiler compiler, 49 Compiler compiler,
50 Namer namer, 50 Namer namer,
51 NativeEmitter nativeEmitter, 51 NativeEmitter nativeEmitter,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 js.Expression generateEmbeddedGlobalAccess(String global) { 84 js.Expression generateEmbeddedGlobalAccess(String global) {
85 return _emitter.generateEmbeddedGlobalAccess(global); 85 return _emitter.generateEmbeddedGlobalAccess(global);
86 } 86 }
87 87
88 @override 88 @override
89 // TODO(herhut): Use a single shared function. 89 // TODO(herhut): Use a single shared function.
90 js.Expression generateFunctionThatReturnsNull() { 90 js.Expression generateFunctionThatReturnsNull() {
91 return js.js('function() {}'); 91 return js.js('function() {}');
92 } 92 }
93 93
94 js.PropertyAccess _globalPropertyAccess(Element element) { 94 @override
95 js.Name name = namer.globalPropertyName(element); 95 js.Expression isolateLazyInitializerAccess(FieldEntity element) {
96 js.PropertyAccess pa = new js.PropertyAccess( 96 return js.js('#.#', [
97 new js.VariableUse(namer.globalObjectFor(element)), name); 97 namer.globalObjectForMember(element),
98 return pa; 98 namer.lazyInitializerName(element)
99 ]);
99 } 100 }
100 101
101 @override 102 @override
102 js.Expression isolateLazyInitializerAccess(FieldElement element) {
103 return js.js('#.#',
104 [namer.globalObjectFor(element), namer.lazyInitializerName(element)]);
105 }
106
107 @override
108 js.Expression isolateStaticClosureAccess(MethodElement element) { 103 js.Expression isolateStaticClosureAccess(MethodElement element) {
109 return _emitter.generateStaticClosureAccess(element); 104 return _emitter.generateStaticClosureAccess(element);
110 } 105 }
111 106
112 @override 107 @override
113 js.PropertyAccess staticFieldAccess(FieldElement element) {
114 return _globalPropertyAccess(element);
115 }
116
117 @override
118 js.PropertyAccess staticFunctionAccess(MethodElement element) {
119 return _globalPropertyAccess(element);
120 }
121
122 @override
123 js.PropertyAccess constructorAccess(ClassElement element) {
124 return _globalPropertyAccess(element);
125 }
126
127 @override
128 js.PropertyAccess prototypeAccess( 108 js.PropertyAccess prototypeAccess(
129 ClassElement element, bool hasBeenInstantiated) { 109 ClassElement element, bool hasBeenInstantiated) {
130 js.Expression constructor = 110 js.Expression constructor =
131 hasBeenInstantiated ? constructorAccess(element) : typeAccess(element); 111 hasBeenInstantiated ? constructorAccess(element) : typeAccess(element);
132 return js.js('#.prototype', constructor); 112 return js.js('#.prototype', constructor);
133 } 113 }
134 114
135 @override 115 @override
136 js.Expression interceptorClassAccess(ClassElement element) {
137 return _globalPropertyAccess(element);
138 }
139
140 @override
141 js.Expression typeAccess(Element element) {
142 return _globalPropertyAccess(element);
143 }
144
145 @override
146 js.Template templateForBuiltin(JsBuiltin builtin) { 116 js.Template templateForBuiltin(JsBuiltin builtin) {
147 String typeNameProperty = ModelEmitter.typeNameProperty; 117 String typeNameProperty = ModelEmitter.typeNameProperty;
148 118
149 switch (builtin) { 119 switch (builtin) {
150 case JsBuiltin.dartObjectConstructor: 120 case JsBuiltin.dartObjectConstructor:
151 ClassElement objectClass = _compiler.commonElements.objectClass; 121 ClassElement objectClass = _compiler.commonElements.objectClass;
152 return js.js.expressionTemplateYielding(typeAccess(objectClass)); 122 return js.js.expressionTemplateYielding(typeAccess(objectClass));
153 123
154 case JsBuiltin.isCheckPropertyToJsConstructorName: 124 case JsBuiltin.isCheckPropertyToJsConstructorName:
155 int isPrefixLength = namer.operatorIsPrefix.length; 125 int isPrefixLength = namer.operatorIsPrefix.length;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 } 167 }
198 } 168 }
199 169
200 @override 170 @override
201 int generatedSize(OutputUnit unit) { 171 int generatedSize(OutputUnit unit) {
202 Fragment key = _emitter.outputBuffers.keys 172 Fragment key = _emitter.outputBuffers.keys
203 .firstWhere((Fragment fragment) => fragment.outputUnit == unit); 173 .firstWhere((Fragment fragment) => fragment.outputUnit == unit);
204 return _emitter.outputBuffers[key].length; 174 return _emitter.outputBuffers[key].length;
205 } 175 }
206 } 176 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698