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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart

Issue 889643002: dart2js: emit metadata in new emitter. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Metadata must be emitted after constants. Created 5 years, 10 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 | Annotate | Revision Log
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.new_js_emitter.model_emitter; 5 library dart2js.new_js_emitter.model_emitter;
6 6
7 import '../../dart2jslib.dart' show Compiler; 7 import '../../dart2jslib.dart' show Compiler;
8 import '../../js/js.dart' as js; 8 import '../../js/js.dart' as js;
9 import '../../js_backend/js_backend.dart' show 9 import '../../js_backend/js_backend.dart' show
10 JavaScriptBackend, 10 JavaScriptBackend,
11 Namer, 11 Namer,
12 ConstantEmitter; 12 ConstantEmitter;
13 13
14 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show 14 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show
15 DEFERRED_LIBRARY_URIS, 15 DEFERRED_LIBRARY_URIS,
16 DEFERRED_LIBRARY_HASHES, 16 DEFERRED_LIBRARY_HASHES,
17 GET_TYPE_FROM_NAME, 17 GET_TYPE_FROM_NAME,
18 INITIALIZE_LOADED_HUNK, 18 INITIALIZE_LOADED_HUNK,
19 IS_HUNK_INITIALIZED, 19 IS_HUNK_INITIALIZED,
20 IS_HUNK_LOADED, 20 IS_HUNK_LOADED,
21 MANGLED_GLOBAL_NAMES, 21 MANGLED_GLOBAL_NAMES,
22 METADATA,
22 TYPE_TO_INTERCEPTOR_MAP; 23 TYPE_TO_INTERCEPTOR_MAP;
23 24
24 import '../js_emitter.dart' show NativeGenerator; 25 import '../js_emitter.dart' show NativeGenerator;
25 import '../model.dart'; 26 import '../model.dart';
26 27
27 class ModelEmitter { 28 class ModelEmitter {
28 final Compiler compiler; 29 final Compiler compiler;
29 final Namer namer; 30 final Namer namer;
30 final ConstantEmitter constantEmitter; 31 final ConstantEmitter constantEmitter;
31 32
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 if (program.typeToInterceptorMap != null) { 165 if (program.typeToInterceptorMap != null) {
165 globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP), 166 globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP),
166 program.typeToInterceptorMap)); 167 program.typeToInterceptorMap));
167 } 168 }
168 169
169 globals.add(new js.Property(js.string(MANGLED_GLOBAL_NAMES), 170 globals.add(new js.Property(js.string(MANGLED_GLOBAL_NAMES),
170 js.js('Object.create(null)', []))); 171 js.js('Object.create(null)', [])));
171 172
172 globals.add(emitGetTypeFromName()); 173 globals.add(emitGetTypeFromName());
173 174
175 globals.add(emitMetadata(program));
176
174 js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals); 177 js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals);
175 178
176 List<js.Statement> statements = 179 List<js.Statement> statements =
177 [new js.ExpressionStatement( 180 [new js.ExpressionStatement(
178 new js.VariableDeclarationList( 181 new js.VariableDeclarationList(
179 [new js.VariableInitialization( 182 [new js.VariableInitialization(
180 new js.VariableDeclaration("init", allowRename: false), 183 new js.VariableDeclaration("init", allowRename: false),
181 globalsObject)]))]; 184 globalsObject)]))];
182 return new js.Block(statements); 185 return new js.Block(statements);
183 } 186 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 } 236 }
234 237
235 js.Property emitGetTypeFromName() { 238 js.Property emitGetTypeFromName() {
236 js.Expression function = 239 js.Expression function =
237 js.js( """function(name) { 240 js.js( """function(name) {
238 return holdersMap[name][name].ensureResolved(); 241 return holdersMap[name][name].ensureResolved();
239 }"""); 242 }""");
240 return new js.Property(js.string(GET_TYPE_FROM_NAME), function); 243 return new js.Property(js.string(GET_TYPE_FROM_NAME), function);
241 } 244 }
242 245
246 js.Property emitMetadata(Program program) {
247 String metadataList = "[${program.metadata.join(",")}]";
248 js.Expression metadata =
249 js.js.uncachedExpressionTemplate(metadataList).instantiate([]);
250
251 return new js.Property(js.string(METADATA), metadata);
252 }
253
243 js.Expression emitDeferredFragment(DeferredFragment fragment, 254 js.Expression emitDeferredFragment(DeferredFragment fragment,
244 List<Holder> holders) { 255 List<Holder> holders) {
245 // TODO(floitsch): initialize eager classes. 256 // TODO(floitsch): initialize eager classes.
246 // TODO(floitsch): the hash must depend on the output. 257 // TODO(floitsch): the hash must depend on the output.
247 int hash = this.hashCode; 258 int hash = this.hashCode;
248 if (fragment.constants.isNotEmpty) { 259 if (fragment.constants.isNotEmpty) {
249 throw new UnimplementedError("constants in deferred units"); 260 throw new UnimplementedError("constants in deferred units");
250 } 261 }
251 js.ArrayInitializer content = 262 js.ArrayInitializer content =
252 new js.ArrayInitializer(fragment.libraries.map(emitLibrary) 263 new js.ArrayInitializer(fragment.libraries.map(emitLibrary)
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 602
592 var end = Date.now(); 603 var end = Date.now();
593 print('Setup: ' + (end - start) + ' ms.'); 604 print('Setup: ' + (end - start) + ' ms.');
594 605
595 #main(); // Start main. 606 #main(); // Start main.
596 607
597 }(Date.now(), #code) 608 }(Date.now(), #code)
598 }"""; 609 }""";
599 610
600 } 611 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698