OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 part of dart2js.js_emitter; | |
6 | |
7 class ClassStubGenerator { | |
8 final Namer namer; | |
9 final Compiler compiler; | |
10 final JavaScriptBackend backend; | |
11 | |
12 ClassStubGenerator(this.compiler, this.namer, this.backend); | |
13 | |
14 jsAst.Expression generateClassConstructor(ClassElement classElement, | |
15 Iterable<String> fields) { | |
16 // TODO(sra): Implement placeholders in VariableDeclaration position: | |
17 // | |
18 // String constructorName = namer.getNameOfClass(classElement); | |
19 // return js.statement('function #(#) { #; }', | |
20 // [ constructorName, fields, | |
21 // fields.map( | |
22 // (name) => js('this.# = #', [name, name]))])); | |
23 return js('function(#) { #; }', | |
24 [fields, | |
25 fields.map((name) => js('this.# = #', [name, name]))]); | |
26 } | |
27 | |
28 jsAst.Expression generateGetter(Element member, String fieldName) { | |
29 ClassElement cls = member.enclosingClass; | |
30 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this'; | |
31 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : []; | |
32 return js('function(#) { return #.# }', [args, receiver, fieldName]); | |
33 } | |
34 | |
35 jsAst.Expression generateSetter(Element member, String fieldName) { | |
36 ClassElement cls = member.enclosingClass; | |
37 String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this'; | |
38 List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : []; | |
39 // TODO(floitsch): remove 'return'? | |
40 return js('function(#, v) { return #.# = v; }', | |
41 [args, receiver, fieldName]); | |
42 } | |
43 } | |
OLD | NEW |