Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
|
Jennifer Messerly
2016/02/09 16:41:57
2016? :)
ochafik
2016/02/10 18:12:45
Done.
| |
| 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 js_ast; | |
| 6 | |
| 7 abstract class _TypePrinterBase implements TypeRefVisitor { | |
| 8 void out(String s); | |
| 9 void visit(Node node); | |
| 10 | |
| 11 outSeparated(String separator, Iterable items, [action(dynamic item)]) { | |
|
Jennifer Messerly
2016/02/09 16:41:58
void ?
ochafik
2016/02/10 18:12:45
Done.
| |
| 12 action ??= visit; | |
| 13 var first = true; | |
| 14 for (var item in items) { | |
| 15 if (first) { | |
| 16 first = false; | |
| 17 } else { | |
| 18 out(separator); | |
| 19 } | |
| 20 action(item); | |
| 21 } | |
| 22 } | |
| 23 | |
| 24 outTypeParams(Iterable<TypeRef> typeParams) { | |
|
Jennifer Messerly
2016/02/09 16:41:58
void ?
ochafik
2016/02/10 18:12:45
Done.
| |
| 25 if (typeParams.isNotEmpty) { | |
| 26 out('<'); | |
| 27 outSeparated(", ", typeParams); | |
| 28 out('>'); | |
| 29 } | |
| 30 } | |
| 31 | |
| 32 @override | |
| 33 visitQualifiedTypeRef(QualifiedTypeRef node) { | |
| 34 outSeparated(".", node.path); | |
| 35 } | |
| 36 } | |
| 37 | |
| 38 abstract class TypeScriptTypePrinter extends _TypePrinterBase { | |
| 39 | |
| 40 void _outTypeAnnotation(TypeRef type) { | |
| 41 if (type is OptionalTypeRef) { | |
| 42 out("?: "); | |
| 43 visit(type.type); | |
| 44 } else { | |
| 45 out(": "); | |
| 46 visit(type); | |
| 47 } | |
| 48 } | |
| 49 | |
| 50 @override | |
| 51 visitGenericTypeRef(GenericTypeRef node) { | |
| 52 if (node.rawType is FunctionTypeRef) { | |
| 53 outTypeParams(node.typeParams); | |
| 54 visit(node.rawType); | |
| 55 } else { | |
| 56 visit(node.rawType); | |
| 57 outTypeParams(node.typeParams); | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 @override | |
| 62 visitArrayTypeRef(ArrayTypeRef node) { | |
| 63 if (node.elementType == null) { | |
| 64 out("Array"); | |
| 65 } else { | |
| 66 visit(node.elementType); | |
| 67 out("[]"); | |
| 68 } | |
| 69 } | |
| 70 | |
| 71 @override | |
| 72 visitOptionalTypeRef(OptionalTypeRef node) { | |
| 73 visit(node.type); | |
| 74 } | |
| 75 | |
| 76 @override | |
| 77 visitRecordTypeRef(RecordTypeRef node) { | |
| 78 out('{'); | |
| 79 outSeparated(", ", node.types.keys, (Identifier name) { | |
| 80 var type = node.types[name]; | |
| 81 visit(name); | |
| 82 _outTypeAnnotation(type); | |
| 83 }); | |
| 84 out('}'); | |
| 85 } | |
| 86 | |
| 87 @override | |
| 88 visitUnionTypeRef(UnionTypeRef node) { | |
| 89 outSeparated("|", node.types.where((t) => !t.isNull)); | |
| 90 } | |
| 91 | |
| 92 @override | |
| 93 visitFunctionTypeRef(FunctionTypeRef node) { | |
| 94 if (node.returnType == null) { | |
| 95 out('Function'); | |
| 96 } else { | |
| 97 out('('); | |
| 98 outSeparated(", ", node.paramTypes.keys, (name) { | |
| 99 var paramType = node.paramTypes[name]; | |
| 100 visit(name); | |
| 101 _outTypeAnnotation(paramType); | |
| 102 }); | |
| 103 out(') => '); | |
| 104 visit(node.returnType); | |
| 105 } | |
| 106 } | |
| 107 | |
| 108 @override | |
| 109 visitAnyTypeRef(AnyTypeRef node) { | |
| 110 out("any"); | |
| 111 } | |
| 112 | |
| 113 @override | |
| 114 visitUnknownTypeRef(UnknownTypeRef node) { | |
| 115 out("any"); | |
| 116 } | |
| 117 } | |
| 118 | |
| 119 class ClosureTypePrinter extends _TypePrinterBase implements NodeVisitor { | |
| 120 final _buffer = new StringBuffer(); | |
| 121 | |
| 122 @override | |
| 123 void out(String s) => _buffer.write(s); | |
| 124 | |
| 125 @override | |
| 126 void visit(Node node) => node.accept(this); | |
| 127 | |
| 128 noSuchMethod(Invocation i) => super.noSuchMethod(i); | |
| 129 | |
| 130 @override | |
| 131 visitGenericTypeRef(GenericTypeRef node) { | |
| 132 visit(node.rawType); | |
| 133 outTypeParams(node.typeParams); | |
| 134 } | |
| 135 | |
| 136 @override | |
| 137 visitIdentifier(Identifier node) { | |
| 138 //out(localNamer.getName(node)); | |
| 139 out(node.name); | |
| 140 } | |
| 141 | |
| 142 @override | |
| 143 visitAccess(PropertyAccess node) { | |
| 144 var selector = node.selector; | |
| 145 assert(selector is LiteralString); | |
| 146 if (selector is! LiteralString) { | |
| 147 out("?"); | |
| 148 return; | |
| 149 } | |
| 150 visit(node.receiver); | |
| 151 out("."); | |
| 152 out(selector.valueWithoutQuotes); | |
| 153 } | |
| 154 | |
| 155 @override toString() => _buffer.toString(); | |
| 156 | |
| 157 @override | |
| 158 visitArrayTypeRef(ArrayTypeRef node) { | |
| 159 out("Array"); | |
| 160 if (node.elementType != null) { | |
| 161 out("<"); | |
| 162 visit(node.elementType); | |
| 163 out(">"); | |
| 164 } | |
| 165 } | |
| 166 | |
| 167 @override | |
| 168 visitOptionalTypeRef(OptionalTypeRef node) { | |
| 169 visit(node.type); | |
| 170 out("="); | |
| 171 } | |
| 172 | |
| 173 @override | |
| 174 visitRecordTypeRef(RecordTypeRef node) { | |
| 175 out('{'); | |
| 176 outSeparated(", ", node.types.keys, (Identifier name) { | |
| 177 var type = node.types[name]; | |
| 178 visit(name); | |
| 179 out(": "); | |
| 180 visit(type is OptionalTypeRef ? type.orUndefined() : type); | |
| 181 }); | |
| 182 out('}'); | |
| 183 } | |
| 184 | |
| 185 @override | |
| 186 visitAnyTypeRef(AnyTypeRef node) { | |
| 187 out("*"); | |
| 188 } | |
| 189 | |
| 190 @override | |
| 191 visitUnknownTypeRef(UnknownTypeRef node) { | |
| 192 out("?"); | |
| 193 } | |
| 194 | |
| 195 @override | |
| 196 visitUnionTypeRef(UnionTypeRef node) { | |
| 197 out("("); | |
| 198 outSeparated("|", node.types); | |
| 199 out(")"); | |
| 200 } | |
| 201 | |
| 202 @override | |
| 203 visitFunctionTypeRef(FunctionTypeRef node) { | |
| 204 out('function('); | |
| 205 if (node.paramTypes == null) { | |
| 206 out("...*"); | |
| 207 } else { | |
| 208 outSeparated(", ", node.paramTypes.values); | |
| 209 } | |
| 210 out(')'); | |
| 211 if (node.returnType != null) { | |
| 212 out(":"); | |
| 213 visit(node.returnType); | |
| 214 } | |
| 215 } | |
| 216 } | |
| OLD | NEW |