blob: 83f05b4ab51ba696eee2ff57a268edf9c38ae3e9 [file] [log] [blame]
// Copyright (c) 2016, 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.
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator;
import 'backend.dart';
import 'module_builder.dart';
import '../compiler.dart' show AbstractCompiler;
import '../js/js_ast.dart' as JS;
import 'js_names.dart' as JS;
import 'js_metalet.dart' as JS;
class Es6Backend extends Backend {
final AbstractCompiler compiler;
final ModuleBuilderFactory moduleBuilderFactory;
Es6Backend(this.compiler, this.moduleBuilderFactory) : super.base();
LibraryBuilder libraryBuilder(LibraryElement element) =>
new Es6LibraryBuilder(this, moduleBuilderFactory(), element);
}
class Es6LibraryBuilder extends LibraryBuilder {
final moduleItems = <JS.ModuleItem>[];
final Es6Backend _backend;
final LibraryElement element;
final ModuleBuilder moduleBuilder;
Es6LibraryBuilder(this._backend, this.moduleBuilder, this.element);
JS.Expression get exportsVar => moduleBuilder.exportsVar;
get compiler => _backend.compiler;
void buildTypedef(
FunctionTypeAliasElement element,
JS.TypeRef returnType, List<JS.TypeRef> paramTypes) {
// TODO(ochafik)
// moduleItems.add();
}
ClassBuilder classBuilder(ClassElement element, ClassDeclaration node) =>
new Es6ClassBuilder(moduleItems, element, node);
void build() {
var moduleBuilder = _backend.moduleBuilderFactory();
var module = moduleBuilder.build(
_backend.compiler.getModuleName(element.source.uri),
jsModuleValue,
moduleItems);
// TODO(ochafik).
// var out = _backend.compiler.getOutputPath(element.source.uri);
// var flags = compiler.options;
// var serverUri = flags.serverMode
// ? Uri.parse('http://${flags.host}:${flags.port}/')
// : null;
// return writeJsLibrary(module, out, compiler.inputBaseDir, serverUri,
// emitSourceMaps: _backend.compiler.options.codegenOptions.emitSourceMaps);
// TODO(ochafik)
}
}
class Es6ClassBuilder extends DefaultClassBuilder {
final List<JS.ModuleItem> out;
final ClassElement element;
final ClassDeclaration node;
Es6ClassBuilder(this.out, this.element, this.node);
void build() {
// TODO(ochafik)
}
}