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

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

Issue 27524003: Generate tear-off closures dynamically. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 * A data structure for collecting fragments of a class definition. 8 * A data structure for collecting fragments of a class definition.
9 */ 9 */
10 class ClassBuilder { 10 class ClassBuilder {
11 // TODO (sigurdm) this is just a bag of properties, rename this class 11 // TODO (sigurdm) this is just a bag of properties, rename this class
kasperl 2013/11/29 10:10:55 Remove this TODO now?
ahe 2013/12/06 15:57:53 Done.
12 12
13 final List<jsAst.Property> properties = <jsAst.Property>[]; 13 final List<jsAst.Property> properties = <jsAst.Property>[];
14 final List<String> fields = <String>[];
15
16 String superName;
17 String nativeName;
18 String functionType;
19 List<jsAst.Node> fieldMetadata;
14 20
15 /// Set to true by user if class is indistinguishable from its superclass. 21 /// Set to true by user if class is indistinguishable from its superclass.
16 bool isTrivial = false; 22 bool isTrivial = false;
17 23
18 // Has the same signature as [DefineStubFunction]. 24 // Has the same signature as [DefineStubFunction].
19 void addProperty(String name, jsAst.Expression value) { 25 void addProperty(String name, jsAst.Expression value) {
20 properties.add(new jsAst.Property(js.string(name), value)); 26 properties.add(new jsAst.Property(js.string(name), value));
21 } 27 }
22 28
23 jsAst.Expression toObjectInitializer() { 29 void addField(String field) {
24 return new jsAst.ObjectInitializer(properties); 30 fields.add(field);
kasperl 2013/11/29 10:10:55 Should we be asserting that we aren't adding the s
ahe 2013/12/06 15:57:53 We could do that, but it does require an amount of
31 }
32
33 jsAst.ObjectInitializer toObjectInitializer() {
34 StringBuffer buffer = new StringBuffer();
35 if (superName != null) {
36 if (nativeName != null) {
37 buffer.write('$nativeName/');
38 }
39 buffer.write('$superName');
40 if (functionType != null) {
41 buffer.write(':$functionType');
42 }
43 buffer.write(';');
44 }
45 buffer.writeAll(fields, ',');
46 var classData = js.string('$buffer');
47 if (fieldMetadata != null) {
kasperl 2013/11/29 10:10:55 Maybe add a comment here that explains how metadat
ahe 2013/12/06 15:57:53 Done.
48 classData =
49 new jsAst.ArrayInitializer.from([classData]..addAll(fieldMetadata));
50 }
51 var fieldsAndProperties =
52 [new jsAst.Property(js.string(''), classData)]
53 ..addAll(properties);
54 return new jsAst.ObjectInitializer(fieldsAndProperties);
25 } 55 }
26 56
27 } 57 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698