removed MethodCallBuilder and PlaceholderExpression
diff --git a/lib/src/codegen/backend/backend.dart b/lib/src/codegen/backend/backend.dart
index 567d43b..29c3791 100644
--- a/lib/src/codegen/backend/backend.dart
+++ b/lib/src/codegen/backend/backend.dart
@@ -9,9 +9,7 @@
abstract class Backend {
LibraryBuilder libraryBuilder(LibraryElement element);
- MethodCallBuilder methodCallBuilder();
-
- JS.Expression buildTypeLiteral(JS.TypeRef typeRef);
+ // JS.Expression buildTypeLiteral(JS.TypeRef typeRef);
}
abstract class LibraryBuilder {
@@ -82,21 +80,3 @@
addSetter(MethodElement element, JS.Expression name, JS.Fun body) =>
setters.putIfAbsent(element, () => {})[name] = body;
}
-
-enum DartMethodCallType {
- dsend, dcall, directDispatch, staticDispatch
-}
-
-abstract class MethodCallBuilder {
- /// Can be this, an expression or null (for global functions).
- JS.Expression target;
- JS.Expression memberName;
- final arguments = <JS.Expression>[];
- /// Prepare for generic method calls.
- final typeArguments = <JS.TypeRef>[];
- /// If true, some dynamic call will be needed (which might involve a reference
- /// to the signature).
- DartMethodCallType callType;
-
- JS.Expression build();
-}
diff --git a/lib/src/codegen/backend/es6_backend.dart b/lib/src/codegen/backend/es6_backend.dart
index b82f089..3a6db97 100644
--- a/lib/src/codegen/backend/es6_backend.dart
+++ b/lib/src/codegen/backend/es6_backend.dart
@@ -7,53 +7,16 @@
import 'backend.dart';
import '../../js/js_ast.dart' as JS;
-import '../../js/precedence.dart';
-import '../../closure/closure_type.dart';
-
-class FileSystem {}
+import '../module_builder.dart';
+import '../../utils.dart' show FileSystem;
class Es6Backend extends Backend {
+ final ModuleBuilder _moduleBuilder;
final FileSystem _fileSystem;
- Es6Backend(this._fileSystem);
+ Es6Backend(this._moduleBuilder, this._fileSystem);
LibraryBuilder libraryBuilder(LibraryElement element) =>
new Es6LibraryBuilder(this, element);
-
- MethodCallBuilder methodCallBuilder() => new Es6MethodCallBuilder(this);
-
- TypeRef buildDartTypeRef(DartType type) {
- // TODO(ochafik)
- }
-
- /// Used for interop (imported Closure libs) and for basic types.
- /// TODO(ochafik): Merge [ClosureType] in this hierarchy.
- TypeRef buildClosureTypeRef(ClosureType type) {
- // TODO(ochafik)
- }
-
- /// Similar in mind to [MaybeQualifiedId], but not a JS [Node].
- /// Note: the same type might be imported multiple times with different prefixes(?),
- /// so a pass might just walk through the imported refs and coalesce them, maybe respecting
- /// some of the original prefixes, then outputting modules as it wants / replacing
- /// those refs as needed.
- TypeRef buildImportedTypeRef(String library, String originalPrefix, String name) {
- // TODO(ochafik)
- }
- /// Reference to a type parameter defined in a Dart class / method.
- TypeRef buildTypeParamRef(ClassBuilder owner, String name) {
- // TODO(ochafik)
- }
- TypeRef buildGenericTypeRef(TypeRef rawType, List<TypeRef> typeParams) {
- // TODO(ochafik)
- }
- TypeRef buildOpaqueTypeRef(JS.Expression expression) {
- // TODO(ochafik)
- }
-}
-
-/// JavaScript type reference.
-class Es6TypeRef extends TypeRef {
- int get precedenceLevel => EXPRESSION;
}
class Es6LibraryBuilder extends LibraryBuilder {
@@ -76,7 +39,7 @@
void buildTypedef(
FunctionTypeAliasElement element,
- TypeRef returnType, List<TypeRef> paramTypes) {
+ JS.TypeRef returnType, List<JS.TypeRef> paramTypes) {
// TODO(ochafik)
}
@@ -95,16 +58,3 @@
// TODO(ochafik)
}
}
-
-enum DartMethodCallType {
- dsend, dcall, directDispatch, staticDispatch
-}
-
-class Es6MethodCallBuilder extends MethodCallBuilder {
- final Es6Backend _backend;
- Es6MethodCallBuilder(this._backend);
-
- JS.Expression build() {
- // TODO(ochafik)
- }
-}
diff --git a/lib/src/js/nodes.dart b/lib/src/js/nodes.dart
index 88ecfc8..563a368 100644
--- a/lib/src/js/nodes.dart
+++ b/lib/src/js/nodes.dart
@@ -233,10 +233,10 @@
T visitDestructuredVariable(DestructuredVariable node) => visitNode(node);
T visitTypeRef(TypeRef node) => visitNode(node);
+ T visitNamedTypeRef(NamedTypeRef node) => visitTypeRef(node);
T visitGenericTypeRef(GenericTypeRef node) => visitTypeRef(node);
T visitOptionalTypeRef(OptionalTypeRef node) => visitTypeRef(node);
T visitRecordTypeRef(RecordTypeRef node) => visitTypeRef(node);
- T visitNamedTypeRef(NamedTypeRef node) => visitTypeRef(node);
T visitUnionTypeRef(UnionTypeRef node) => visitTypeRef(node);
T visitFunctionTypeRef(FunctionTypeRef node) => visitTypeRef(node);
T visitJsTypeRef(JsTypeRef node) => visitTypeRef(node);
@@ -707,28 +707,6 @@
[new VariableInitialization(name, this)]).toStatement();
}
-/// Mutable placeholder expression that provides an entry point for simple
-/// AST transforms / expansions.
-///
-/// The data might not be JS [Node] but may contain JS nodes and be visitable.
-class PlaceholderExpression extends Expression {
- var data;
- PlaceholderExpression(this.data);
-
- int get precedenceLevel =>
- data is Expression ? (data as Expression).precedenceLevel : EXPRESSION;
-
- @override
- accept(NodeVisitor visitor) => visitor.visitPlaceholderExpression(this);
-
- @override
- void visitChildren(NodeVisitor visitor) {}
-
- @override
- Node _clone() =>
- new PlaceholderExpression(data is Node ? (data as Node)._clone() : data);
-}
-
class LiteralExpression extends Expression {
final String template;
final List<Expression> inputs;
@@ -821,6 +799,8 @@
final Identifier name;
final BindingPattern structure;
final Expression defaultValue;
+ // TODO(ochafik): How does this work?
+ TypeRef get type => null;
DestructuredVariable({this.name, this.structure, this.defaultValue}) {
assert(name != null || structure != null);
}
@@ -1552,6 +1532,7 @@
class InterpolatedParameter extends Expression with InterpolatedNode
implements Identifier {
final nameOrPosition;
+ TypeRef get type => null;
String get name { throw "InterpolatedParameter.name must not be invoked"; }
bool get allowRename => false;
@@ -1611,6 +1592,7 @@
class InterpolatedIdentifier extends Expression with InterpolatedNode
implements Identifier {
final nameOrPosition;
+ TypeRef get type => null;
InterpolatedIdentifier(this.nameOrPosition);
diff --git a/lib/src/js/printer.dart b/lib/src/js/printer.dart
index 8e28bd3..29625d7 100644
--- a/lib/src/js/printer.dart
+++ b/lib/src/js/printer.dart
@@ -1341,6 +1341,11 @@
visitFunctionTypeRef(FunctionTypeRef node) =>
_typePrinter.visitFunctionTypeRef(node);
+ visitGenericTypeRef(GenericTypeRef node) =>
+ _typePrinter.visitGenericTypeRef(node);
+
+ visitJsTypeRef(JsTypeRef node) =>
+ _typePrinter.visitJsTypeRef(node);
}
// Collects all the var declarations in the function. We need to do this in a
diff --git a/lib/src/js/template.dart b/lib/src/js/template.dart
index 0dea734..a08730b 100644
--- a/lib/src/js/template.dart
+++ b/lib/src/js/template.dart
@@ -827,6 +827,27 @@
Instantiator visitExportClause(ExportClause node) =>
throw new UnimplementedError();
+ Instantiator visitFunctionTypeRef(FunctionTypeRef node) =>
+ throw new UnimplementedError();
+
+ Instantiator visitGenericTypeRef(GenericTypeRef node) =>
+ throw new UnimplementedError();
+
+ Instantiator visitJsTypeRef(JsTypeRef node) =>
+ throw new UnimplementedError();
+
+ Instantiator visitNamedTypeRef(NamedTypeRef node) =>
+ throw new UnimplementedError();
+
+ Instantiator visitOptionalTypeRef(OptionalTypeRef node) =>
+ throw new UnimplementedError();
+
+ Instantiator visitRecordTypeRef(RecordTypeRef node) =>
+ throw new UnimplementedError();
+
+ Instantiator visitUnionTypeRef(UnionTypeRef node) =>
+ throw new UnimplementedError();
+
@override
Instantiator visitDestructuredVariable(DestructuredVariable node) {
Instantiator makeName = visit(node.name);
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index b1794f6..fd4292e 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -454,6 +454,13 @@
return parts[1];
}
+// TODO(ochafik): Drop after transformer CL.
+class FileSystem {
+ void writeAsStringSync(String file, String contents) {
+ new File(file).writeAsStringSync(contents);
+ }
+}
+
/// Simplistic directed graph.
class DirectedGraph<V> {
final _adjacencyList = <V, Set<V>>{};