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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart

Issue 25675002: Generative constructor factories for native objects (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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) 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 dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 /** 7 /**
8 * Generates the code for all used classes in the program. Static fields (even 8 * Generates the code for all used classes in the program. Static fields (even
9 * in classes) are ignored, since they can be treated as non-class elements. 9 * in classes) are ignored, since they can be treated as non-class elements.
10 * 10 *
(...skipping 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 ConstantHandler handler = compiler.constantHandler; 1497 ConstantHandler handler = compiler.constantHandler;
1498 List<Constant> constants = handler.getConstantsForEmission(); 1498 List<Constant> constants = handler.getConstantsForEmission();
1499 for (Constant constant in constants) { 1499 for (Constant constant in constants) {
1500 if (constant is TypeConstant) { 1500 if (constant is TypeConstant) {
1501 TypeConstant typeConstant = constant; 1501 TypeConstant typeConstant = constant;
1502 Element element = typeConstant.representedType.element; 1502 Element element = typeConstant.representedType.element;
1503 if (element is ClassElement) { 1503 if (element is ClassElement) {
1504 ClassElement classElement = element; 1504 ClassElement classElement = element;
1505 elements.add(backend.emitter.constantReference(constant)); 1505 elements.add(backend.emitter.constantReference(constant));
1506 elements.add(js(namer.isolateAccess(classElement))); 1506 elements.add(js(namer.isolateAccess(classElement)));
1507
1508 // Create JavaScript Object map for by-name lookup of generative
kasperl 2013/10/04 11:08:43 Can we avoid this if document.register isn't being
sra1 2013/10/04 20:21:28 It would be slightly more complicated than that -
1509 // constructors.
1510 var properties = [];
1511 classElement.forEachMember(
1512 (ClassElement enclosingClass, Element member) {
1513 if (member.isGenerativeConstructor()) {
1514 properties.add(
1515 new jsAst.Property(
1516 js.string(member.name.slowToString()),
1517 new jsAst.VariableUse(
1518 backend.namer.isolateAccess(member))));
1519 }
1520 },
1521 includeBackendMembers: false,
1522 includeSuperAndInjectedMembers: false);
1523
1524 var map = new jsAst.ObjectInitializer(properties);
1525 elements.add(map);
1507 } 1526 }
1508 } 1527 }
1509 } 1528 }
1510 1529
1511 jsAst.ArrayInitializer array = new jsAst.ArrayInitializer.from(elements); 1530 jsAst.ArrayInitializer array = new jsAst.ArrayInitializer.from(elements);
1512 String name = 1531 String name =
1513 backend.namer.getNameOfGlobalField(backend.mapTypeToInterceptor); 1532 backend.namer.getNameOfGlobalField(backend.mapTypeToInterceptor);
1514 jsAst.Expression assignment = js('$isolateProperties.$name = #', array); 1533 jsAst.Expression assignment = js('$isolateProperties.$name = #', array);
1515 1534
1516 buffer.write(jsAst.prettyPrint(assignment, compiler)); 1535 buffer.write(jsAst.prettyPrint(assignment, compiler));
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
2112 return compiler.deferredLoadTask.isDeferred(element); 2131 return compiler.deferredLoadTask.isDeferred(element);
2113 } 2132 }
2114 2133
2115 bool get areAnyElementsDeferred { 2134 bool get areAnyElementsDeferred {
2116 return compiler.deferredLoadTask.areAnyElementsDeferred; 2135 return compiler.deferredLoadTask.areAnyElementsDeferred;
2117 } 2136 }
2118 } 2137 }
2119 2138
2120 // TODO(ahe): Move code for interceptors to own file. 2139 // TODO(ahe): Move code for interceptors to own file.
2121 // TODO(ahe): Move code for reifying metadata/types to own file. 2140 // TODO(ahe): Move code for reifying metadata/types to own file.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698