blob: f2f48ca0ab1a52c61c1983a1025ddbb19a3308eb [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of dart2js.js_emitter;
class ClassStubGenerator {
final Namer namer;
final Compiler compiler;
final JavaScriptBackend backend;
ClassStubGenerator(this.compiler, this.namer, this.backend);
jsAst.Expression generateClassConstructor(ClassElement classElement,
Iterable<String> fields) {
// TODO(sra): Implement placeholders in VariableDeclaration position:
//
// String constructorName = namer.getNameOfClass(classElement);
// return js.statement('function #(#) { #; }',
// [ constructorName, fields,
// fields.map(
// (name) => js('this.# = #', [name, name]))]));
return js('function(#) { #; }',
[fields,
fields.map((name) => js('this.# = #', [name, name]))]);
}
jsAst.Expression generateGetter(Element member, String fieldName) {
ClassElement cls = member.enclosingClass;
String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this';
List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : [];
return js('function(#) { return #.# }', [args, receiver, fieldName]);
}
jsAst.Expression generateSetter(Element member, String fieldName) {
ClassElement cls = member.enclosingClass;
String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this';
List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : [];
// TODO(floitsch): remove 'return'?
return js('function(#, v) { return #.# = v; }',
[args, receiver, fieldName]);
}
}