Index: lib/src/js/js_types.dart |
diff --git a/lib/src/js/js_types.dart b/lib/src/js/js_types.dart |
deleted file mode 100644 |
index 526d19a6b067cd55e8d55d1b026373b9587e7b6b..0000000000000000000000000000000000000000 |
--- a/lib/src/js/js_types.dart |
+++ /dev/null |
@@ -1,198 +0,0 @@ |
-// 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. |
- |
-part of js_ast; |
- |
-final _any = new AnyTypeRef._(); |
-final _unknown = new UnknownTypeRef._(); |
-final _null = new NullTypeRef(); |
- |
-/// JavaScript type reference, designed to support a subset of the type systems |
-/// of the Closure Compiler and TypeScript: |
-/// - https://developers.google.com/closure/compiler/docs/js-for-compiler#types |
-/// - https://github.com/Microsoft/TypeScript/blob/v1.8.0-beta/doc/spec.md#3 |
-/// |
-/// Note that some subtleties like "nullability" or "optionality" are handled |
-/// using unions (with a [NullTypeRef] or with an "undefined" named typeref). |
-/// Also, primitives aren't modeled differently than named / qualified types, |
-/// as it brings little value for now. Primitive-specific type formatting is |
-/// handled by the type printers (for instance, the knowledge that |
-/// `number|null` is just `number` in TypeScript, and is `number?` in Closure). |
-abstract class TypeRef extends Expression { |
- |
- int get precedenceLevel => PRIMARY; |
- |
- TypeRef(); |
- |
- factory TypeRef.any() => _any; |
- |
- factory TypeRef.void_() => new TypeRef.named('void'); |
- |
- factory TypeRef.unknown() => _unknown; |
- |
- factory TypeRef.generic(TypeRef rawType, Iterable<TypeRef> typeArgs) { |
- if (typeArgs.isEmpty) { |
- throw new ArgumentError.value(typeArgs, "typeArgs", "is empty"); |
- } |
- return new GenericTypeRef(rawType, typeArgs.toList()); |
- } |
- |
- factory TypeRef.array([TypeRef elementType]) => |
- new ArrayTypeRef(elementType); |
- |
- factory TypeRef.object([TypeRef keyType, TypeRef valueType]) { |
- // TODO(ochafik): Roll out a dedicated ObjectTypeRef? |
- var rawType = new TypeRef.named('Object'); |
- return keyType == null && valueType == null |
- ? rawType |
- : new GenericTypeRef(rawType, [keyType ?? _any, valueType ?? _any]); |
- } |
- |
- factory TypeRef.function( |
- [TypeRef returnType, Map<Identifier, TypeRef> paramTypes]) => |
- new FunctionTypeRef(returnType, paramTypes); |
- |
- factory TypeRef.record(Map<Identifier, TypeRef> types) => |
- new RecordTypeRef(types); |
- |
- factory TypeRef.string() => new TypeRef.named('string'); |
- |
- factory TypeRef.number() => new TypeRef.named('number'); |
- |
- factory TypeRef.undefined() => new TypeRef.named('undefined'); |
- |
- factory TypeRef.boolean() => new TypeRef.named('boolean'); |
- |
- factory TypeRef.qualified(List<Identifier> path) => |
- new QualifiedTypeRef(path); |
- |
- factory TypeRef.named(String name) => |
- new TypeRef.qualified(<Identifier>[new Identifier(name)]); |
- |
- bool get isAny => this is AnyTypeRef; |
- bool get isUnknown => this is UnknownTypeRef; |
- bool get isNull => this is NullTypeRef; |
- |
- TypeRef or(TypeRef other) => new UnionTypeRef([this, other]); |
- |
- TypeRef orUndefined() => or(new TypeRef.undefined()); |
- TypeRef orNull() => or(_null); |
- |
- TypeRef toOptional() => |
- new OptionalTypeRef(this); |
-} |
- |
-class AnyTypeRef extends TypeRef { |
- AnyTypeRef._() : super(); |
- |
- factory AnyTypeRef() => _any; |
- accept(NodeVisitor visitor) => visitor.visitAnyTypeRef(this); |
- void visitChildren(NodeVisitor visitor) {} |
- _clone() => new AnyTypeRef(); |
-} |
- |
-class NullTypeRef extends QualifiedTypeRef { |
- NullTypeRef() : super([new Identifier("null")]); |
- _clone() => new NullTypeRef(); |
-} |
- |
-class UnknownTypeRef extends TypeRef { |
- UnknownTypeRef._() : super(); |
- |
- factory UnknownTypeRef() => _unknown; |
- accept(NodeVisitor visitor) => visitor.visitUnknownTypeRef(this); |
- void visitChildren(NodeVisitor visitor) {} |
- _clone() => new UnknownTypeRef(); |
-} |
- |
-class QualifiedTypeRef extends TypeRef { |
- final List<Identifier> path; |
- QualifiedTypeRef(this.path); |
- |
- accept(NodeVisitor visitor) => visitor.visitQualifiedTypeRef(this); |
- void visitChildren(NodeVisitor visitor) => |
- path.forEach((p) => p.accept(visitor)); |
- _clone() => new QualifiedTypeRef(path); |
-} |
- |
-class ArrayTypeRef extends TypeRef { |
- final TypeRef elementType; |
- ArrayTypeRef(this.elementType); |
- accept(NodeVisitor visitor) => visitor.visitArrayTypeRef(this); |
- void visitChildren(NodeVisitor visitor) { |
- elementType.accept(visitor); |
- } |
- _clone() => new ArrayTypeRef(elementType); |
-} |
- |
-class GenericTypeRef extends TypeRef { |
- final TypeRef rawType; |
- final List<TypeRef> typeArgs; |
- GenericTypeRef(this.rawType, this.typeArgs); |
- |
- accept(NodeVisitor visitor) => visitor.visitGenericTypeRef(this); |
- void visitChildren(NodeVisitor visitor) { |
- rawType.accept(visitor); |
- typeArgs.forEach((p) => p.accept(visitor)); |
- } |
- _clone() => new GenericTypeRef(rawType, typeArgs); |
-} |
- |
-class UnionTypeRef extends TypeRef { |
- final List<TypeRef> types; |
- UnionTypeRef(this.types); |
- |
- accept(NodeVisitor visitor) => visitor.visitUnionTypeRef(this); |
- void visitChildren(NodeVisitor visitor) { |
- types.forEach((p) => p.accept(visitor)); |
- } |
- _clone() => new UnionTypeRef(types); |
- |
- @override |
- TypeRef or(TypeRef other) { |
- if (types.contains(other)) return this; |
- return new UnionTypeRef([]..addAll(types)..add(other)); |
- } |
-} |
- |
-class OptionalTypeRef extends TypeRef { |
- final TypeRef type; |
- OptionalTypeRef(this.type); |
- |
- accept(NodeVisitor visitor) => visitor.visitOptionalTypeRef(this); |
- void visitChildren(NodeVisitor visitor) { |
- type.accept(visitor); |
- } |
- _clone() => new OptionalTypeRef(type); |
- |
- @override |
- TypeRef orUndefined() => this; |
-} |
- |
-class RecordTypeRef extends TypeRef { |
- final Map<Identifier, TypeRef> types; |
- RecordTypeRef(this.types); |
- |
- accept(NodeVisitor visitor) => visitor.visitRecordTypeRef(this); |
- void visitChildren(NodeVisitor visitor) { |
- types.values.forEach((p) => p.accept(visitor)); |
- } |
- _clone() => new RecordTypeRef(types); |
-} |
- |
-class FunctionTypeRef extends TypeRef { |
- final TypeRef returnType; |
- final Map<Identifier, TypeRef> paramTypes; |
- FunctionTypeRef(this.returnType, this.paramTypes); |
- |
- accept(NodeVisitor visitor) => visitor.visitFunctionTypeRef(this); |
- void visitChildren(NodeVisitor visitor) { |
- returnType.accept(visitor); |
- paramTypes.forEach((n, t) { |
- n.accept(visitor); |
- t.accept(visitor); |
- }); |
- } |
- _clone() => new FunctionTypeRef(returnType, paramTypes); |
-} |