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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart

Issue 11448009: Represent runtime type information as nested lists. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 part of js_backend; 5 part of js_backend;
6 6
7 class ConstantEmitter { 7 class ConstantEmitter {
8 ConstantReferenceEmitter _referenceEmitter; 8 ConstantReferenceEmitter _referenceEmitter;
9 ConstantInitializerEmitter _initializerEmitter; 9 ConstantInitializerEmitter _initializerEmitter;
10 10
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 arguments); 293 arguments);
294 } 294 }
295 295
296 js.Expression visitType(TypeConstant constant) { 296 js.Expression visitType(TypeConstant constant) {
297 SourceString helperSourceName = const SourceString('createRuntimeType'); 297 SourceString helperSourceName = const SourceString('createRuntimeType');
298 Element helper = compiler.findHelper(helperSourceName); 298 Element helper = compiler.findHelper(helperSourceName);
299 JavaScriptBackend backend = compiler.backend; 299 JavaScriptBackend backend = compiler.backend;
300 String helperName = backend.namer.getName(helper); 300 String helperName = backend.namer.getName(helper);
301 DartType type = constant.representedType; 301 DartType type = constant.representedType;
302 Element element = type.element; 302 Element element = type.element;
303 String typeName; 303 String name = backend.rti.getRawTypeRepresentation(type);
304 if (type.kind == TypeKind.INTERFACE) { 304 js.Expression typeName = new js.LiteralString("'$name'");
305 typeName =
306 backend.rti.getStringRepresentation(type, expandRawType: true);
307 } else {
308 assert(type.kind == TypeKind.TYPEDEF);
309 typeName = element.name.slowToString();
310 }
311 return new js.Call( 305 return new js.Call(
312 new js.PropertyAccess.field( 306 new js.PropertyAccess.field(
313 new js.VariableUse(namer.CURRENT_ISOLATE), 307 new js.VariableUse(namer.CURRENT_ISOLATE),
314 helperName), 308 helperName),
315 [new js.LiteralString("'$typeName'")]); 309 [typeName]);
316 } 310 }
317 311
318 js.Expression visitConstructed(ConstructedConstant constant) { 312 js.Expression visitConstructed(ConstructedConstant constant) {
319 return new js.New( 313 return new js.New(
320 new js.VariableUse(getJsConstructor(constant.type.element)), 314 new js.VariableUse(getJsConstructor(constant.type.element)),
321 _array(constant.fields)); 315 _array(constant.fields));
322 } 316 }
323 317
324 List<js.Expression> _array(List<Constant> values) { 318 List<js.Expression> _array(List<Constant> values) {
325 List<js.Expression> valueList = <js.Expression>[]; 319 List<js.Expression> valueList = <js.Expression>[];
326 for (int i = 0; i < values.length; i++) { 320 for (int i = 0; i < values.length; i++) {
327 valueList.add(_reference(values[i])); 321 valueList.add(_reference(values[i]));
328 } 322 }
329 return valueList; 323 return valueList;
330 } 324 }
331 } 325 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698