Index: tests/compiler/dart2js/type_representation_test.dart |
diff --git a/tests/compiler/dart2js/type_representation_test.dart b/tests/compiler/dart2js/type_representation_test.dart |
index ce4f3c857778ddd00f669334c0e3c06e2d38f46a..2b16579f390cd3389c905bf02999cbb9813bac32 100644 |
--- a/tests/compiler/dart2js/type_representation_test.dart |
+++ b/tests/compiler/dart2js/type_representation_test.dart |
@@ -9,10 +9,9 @@ import "package:async_helper/async_helper.dart"; |
import 'type_test_helper.dart'; |
import 'package:compiler/src/dart_types.dart'; |
import 'package:compiler/src/js/js.dart'; |
-import 'package:compiler/src/elements/elements.dart' |
- show Element, ClassElement; |
+import 'package:compiler/src/elements/elements.dart' show Element, ClassElement; |
import 'package:compiler/src/js_backend/js_backend.dart' |
- show JavaScriptBackend, TypeRepresentationGenerator; |
+ show JavaScriptBackend, TypeRepresentationGenerator; |
void main() { |
testTypeRepresentations(); |
@@ -42,216 +41,226 @@ void testTypeRepresentations() { |
m9(int a, String b, {List<int> c, d}) {} |
m10(void f(int a, [b])) {} |
""").then((env) { |
- TypeRepresentationGenerator typeRepresentation = |
- new TypeRepresentationGenerator(env.compiler); |
+ TypeRepresentationGenerator typeRepresentation = |
+ new TypeRepresentationGenerator(env.compiler); |
- Expression onVariable(TypeVariableType variable) { |
- return new VariableUse(variable.name); |
- } |
+ Expression onVariable(TypeVariableType variable) { |
+ return new VariableUse(variable.name); |
+ } |
- String stringify(Expression expression) { |
- return prettyPrint(expression, env.compiler); |
- } |
+ String stringify(Expression expression) { |
+ return prettyPrint(expression, env.compiler); |
+ } |
- void expect(DartType type, |
- String expectedRepresentation, |
- [String expectedTypedefRepresentation]) { |
- bool encodeTypedefName = false; |
- Expression expression = |
- typeRepresentation.getTypeRepresentation(type, onVariable, |
- (x) => encodeTypedefName); |
- Expect.stringEquals(expectedRepresentation, stringify(expression)); |
+ void expect(DartType type, String expectedRepresentation, |
+ [String expectedTypedefRepresentation]) { |
+ bool encodeTypedefName = false; |
+ Expression expression = typeRepresentation.getTypeRepresentation( |
+ type, onVariable, (x) => encodeTypedefName); |
+ Expect.stringEquals(expectedRepresentation, stringify(expression)); |
- encodeTypedefName = true; |
- expression = |
- typeRepresentation.getTypeRepresentation(type, onVariable, |
- (x) => encodeTypedefName); |
- if (expectedTypedefRepresentation == null) { |
- expectedTypedefRepresentation = expectedRepresentation; |
- } |
- Expect.stringEquals(expectedTypedefRepresentation, stringify(expression)); |
- } |
+ encodeTypedefName = true; |
+ expression = typeRepresentation.getTypeRepresentation( |
+ type, onVariable, (x) => encodeTypedefName); |
+ if (expectedTypedefRepresentation == null) { |
+ expectedTypedefRepresentation = expectedRepresentation; |
+ } |
+ Expect.stringEquals( |
+ expectedTypedefRepresentation, stringify(expression)); |
+ } |
- String getJsName(Element cls) { |
- Expression name = typeRepresentation.getJavaScriptClassName(cls); |
- return stringify(name); |
- } |
+ String getJsName(Element cls) { |
+ Expression name = typeRepresentation.getJavaScriptClassName(cls); |
+ return stringify(name); |
+ } |
- JavaScriptBackend backend = env.compiler.backend; |
- String func = backend.namer.functionTypeTag; |
- String retvoid = backend.namer.functionTypeVoidReturnTag; |
- String ret = backend.namer.functionTypeReturnTypeTag; |
- String args = backend.namer.functionTypeRequiredParametersTag; |
- String opt = backend.namer.functionTypeOptionalParametersTag; |
- String named = backend.namer.functionTypeNamedParametersTag; |
- String typedefTag = backend.namer.typedefTag; |
+ JavaScriptBackend backend = env.compiler.backend; |
+ String func = backend.namer.functionTypeTag; |
+ String retvoid = backend.namer.functionTypeVoidReturnTag; |
+ String ret = backend.namer.functionTypeReturnTypeTag; |
+ String args = backend.namer.functionTypeRequiredParametersTag; |
+ String opt = backend.namer.functionTypeOptionalParametersTag; |
+ String named = backend.namer.functionTypeNamedParametersTag; |
+ String typedefTag = backend.namer.typedefTag; |
- ClassElement List_ = env.getElement('List'); |
- TypeVariableType List_E = List_.typeVariables[0]; |
- ClassElement Map_ = env.getElement('Map'); |
- TypeVariableType Map_K = Map_.typeVariables[0]; |
- TypeVariableType Map_V = Map_.typeVariables[1]; |
+ ClassElement List_ = env.getElement('List'); |
+ TypeVariableType List_E = List_.typeVariables[0]; |
+ ClassElement Map_ = env.getElement('Map'); |
+ TypeVariableType Map_K = Map_.typeVariables[0]; |
+ TypeVariableType Map_V = Map_.typeVariables[1]; |
- DartType Object_ = env['Object']; |
- DartType int_ = env['int']; |
- DartType String_ = env['String']; |
- DartType dynamic_ = env['dynamic']; |
- DartType Typedef_ = env['Typedef']; |
- DartType Typedef2_ = env['Typedef2']; |
- DartType Typedef3_ = env['Typedef3']; |
- DartType Typedef4_ = env['Typedef4']; |
- DartType Typedef5_ = env['Typedef5']; |
- DartType Typedef6_ = env['Typedef6']; |
- DartType Typedef7_ = env['Typedef7']; |
- DartType Typedef8_ = env['Typedef8']; |
- DartType Typedef9_ = env['Typedef9']; |
- DartType Typedef10_ = env['Typedef10']; |
+ DartType Object_ = env['Object']; |
+ DartType int_ = env['int']; |
+ DartType String_ = env['String']; |
+ DartType dynamic_ = env['dynamic']; |
+ DartType Typedef_ = env['Typedef']; |
+ DartType Typedef2_ = env['Typedef2']; |
+ DartType Typedef3_ = env['Typedef3']; |
+ DartType Typedef4_ = env['Typedef4']; |
+ DartType Typedef5_ = env['Typedef5']; |
+ DartType Typedef6_ = env['Typedef6']; |
+ DartType Typedef7_ = env['Typedef7']; |
+ DartType Typedef8_ = env['Typedef8']; |
+ DartType Typedef9_ = env['Typedef9']; |
+ DartType Typedef10_ = env['Typedef10']; |
- String List_rep = getJsName(List_); |
- String List_E_rep = stringify(onVariable(List_E)); |
- String Map_rep = getJsName(Map_); |
- String Map_K_rep = stringify(onVariable(Map_K)); |
- String Map_V_rep = stringify(onVariable(Map_V)); |
+ String List_rep = getJsName(List_); |
+ String List_E_rep = stringify(onVariable(List_E)); |
+ String Map_rep = getJsName(Map_); |
+ String Map_K_rep = stringify(onVariable(Map_K)); |
+ String Map_V_rep = stringify(onVariable(Map_V)); |
- String Object_rep = getJsName(Object_.element); |
- String int_rep = getJsName(int_.element); |
- String String_rep = getJsName(String_.element); |
+ String Object_rep = getJsName(Object_.element); |
+ String int_rep = getJsName(int_.element); |
+ String String_rep = getJsName(String_.element); |
- String Typedef_rep = getJsName(Typedef_.element); |
- String Typedef2_rep = getJsName(Typedef2_.element); |
- String Typedef3_rep = getJsName(Typedef3_.element); |
- String Typedef4_rep = getJsName(Typedef4_.element); |
- String Typedef5_rep = getJsName(Typedef5_.element); |
- String Typedef6_rep = getJsName(Typedef6_.element); |
- String Typedef7_rep = getJsName(Typedef7_.element); |
- String Typedef8_rep = getJsName(Typedef8_.element); |
- String Typedef9_rep = getJsName(Typedef9_.element); |
- String Typedef10_rep = getJsName(Typedef10_.element); |
+ String Typedef_rep = getJsName(Typedef_.element); |
+ String Typedef2_rep = getJsName(Typedef2_.element); |
+ String Typedef3_rep = getJsName(Typedef3_.element); |
+ String Typedef4_rep = getJsName(Typedef4_.element); |
+ String Typedef5_rep = getJsName(Typedef5_.element); |
+ String Typedef6_rep = getJsName(Typedef6_.element); |
+ String Typedef7_rep = getJsName(Typedef7_.element); |
+ String Typedef8_rep = getJsName(Typedef8_.element); |
+ String Typedef9_rep = getJsName(Typedef9_.element); |
+ String Typedef10_rep = getJsName(Typedef10_.element); |
- expect(int_, '$int_rep'); |
- expect(String_, '$String_rep'); |
- expect(dynamic_, 'null'); |
+ expect(int_, '$int_rep'); |
+ expect(String_, '$String_rep'); |
+ expect(dynamic_, 'null'); |
- // List<E> |
- expect(List_.computeType(env.compiler.resolution), |
- '[$List_rep, $List_E_rep]'); |
- // List |
- expect(List_.rawType, '$List_rep'); |
- // List<dynamic> |
- expect(instantiate(List_, [dynamic_]), '$List_rep'); |
- // List<int> |
- expect(instantiate(List_, [int_]), '[$List_rep, $int_rep]'); |
- // List<Typedef> |
- expect(instantiate(List_, [Typedef_]), |
- '[$List_rep, {$func: 1, $retvoid: true}]', |
- '[$List_rep, {$func: 1, $retvoid: true,' |
- ' $typedefTag: $Typedef_rep}]'); |
- expect(instantiate(List_, [Typedef2_]), |
- '[$List_rep, {$func: 1, $ret: $int_rep}]', |
- '[$List_rep, {$func: 1, $ret: $int_rep,' |
- ' $typedefTag: $Typedef2_rep}]'); |
- expect(instantiate(List_, [Typedef3_]), |
- '[$List_rep, {$func: 1, $ret: [$List_rep, $int_rep]}]', |
- '[$List_rep, {$func: 1, $ret: [$List_rep, $int_rep],' |
- ' $typedefTag: $Typedef3_rep}]'); |
- expect(instantiate(List_, [Typedef4_]), |
- '[$List_rep, {$func: 1}]', |
- '[$List_rep, {$func: 1, $typedefTag: $Typedef4_rep}]'); |
- expect(instantiate(List_, [Typedef5_]), |
- '[$List_rep, {$func: 1,' |
- ' $args: [$int_rep, $String_rep]}]', |
- '[$List_rep, {$func: 1,' |
- ' $args: [$int_rep, $String_rep], $typedefTag: $Typedef5_rep}]'); |
- expect(instantiate(List_, [Typedef6_]), |
- '[$List_rep, {$func: 1,' |
- ' $args: [$int_rep], $opt: [$String_rep]}]', |
- '[$List_rep, {$func: 1,' |
- ' $args: [$int_rep], $opt: [$String_rep],' |
- ' $typedefTag: $Typedef6_rep}]'); |
- expect(instantiate(List_, [Typedef7_]), |
- '[$List_rep, {$func: 1, $args: ' |
- '[$int_rep, $String_rep], $opt: [[$List_rep, $int_rep],,]}]', |
- '[$List_rep, {$func: 1, $args: ' |
- '[$int_rep, $String_rep], $opt: [[$List_rep, $int_rep],,], ' |
- '$typedefTag: $Typedef7_rep}]'); |
- expect(instantiate(List_, [Typedef8_]), |
- '[$List_rep, {$func: 1, $args: [$int_rep],' |
- ' $named: {b: $String_rep}}]', |
- '[$List_rep, {$func: 1, $args: [$int_rep],' |
- ' $named: {b: $String_rep}, $typedefTag: $Typedef8_rep}]'); |
- expect(instantiate(List_, [Typedef9_]), |
- '[$List_rep, {$func: 1, ' |
- '$args: [$int_rep, $String_rep], $named: ' |
- '{c: [$List_rep, $int_rep], d: null}}]', |
- '[$List_rep, {$func: 1, ' |
- '$args: [$int_rep, $String_rep], $named: {c: [$List_rep, $int_rep],' |
- ' d: null}, $typedefTag: $Typedef9_rep}]'); |
- expect(instantiate(List_, [Typedef10_]), |
- '[$List_rep, {$func: 1, ' |
- '$args: [{$func: 1, $retvoid: true, ' |
- '$args: [$int_rep], $opt: [,]}]}]', |
- '[$List_rep, {$func: 1, ' |
- '$args: [{$func: 1, $retvoid: true, ' |
- '$args: [$int_rep], $opt: [,]}], $typedefTag: $Typedef10_rep}]'); |
+ // List<E> |
+ expect(List_.computeType(env.compiler.resolution), |
+ '[$List_rep, $List_E_rep]'); |
+ // List |
+ expect(List_.rawType, '$List_rep'); |
+ // List<dynamic> |
+ expect(instantiate(List_, [dynamic_]), '$List_rep'); |
+ // List<int> |
+ expect(instantiate(List_, [int_]), '[$List_rep, $int_rep]'); |
+ // List<Typedef> |
+ expect( |
+ instantiate(List_, [Typedef_]), |
+ '[$List_rep, {$func: 1, $retvoid: true}]', |
+ '[$List_rep, {$func: 1, $retvoid: true,' |
+ ' $typedefTag: $Typedef_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef2_]), |
+ '[$List_rep, {$func: 1, $ret: $int_rep}]', |
+ '[$List_rep, {$func: 1, $ret: $int_rep,' |
+ ' $typedefTag: $Typedef2_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef3_]), |
+ '[$List_rep, {$func: 1, $ret: [$List_rep, $int_rep]}]', |
+ '[$List_rep, {$func: 1, $ret: [$List_rep, $int_rep],' |
+ ' $typedefTag: $Typedef3_rep}]'); |
+ expect(instantiate(List_, [Typedef4_]), '[$List_rep, {$func: 1}]', |
+ '[$List_rep, {$func: 1, $typedefTag: $Typedef4_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef5_]), |
+ '[$List_rep, {$func: 1,' |
+ ' $args: [$int_rep, $String_rep]}]', |
+ '[$List_rep, {$func: 1,' |
+ ' $args: [$int_rep, $String_rep], $typedefTag: $Typedef5_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef6_]), |
+ '[$List_rep, {$func: 1,' |
+ ' $args: [$int_rep], $opt: [$String_rep]}]', |
+ '[$List_rep, {$func: 1,' |
+ ' $args: [$int_rep], $opt: [$String_rep],' |
+ ' $typedefTag: $Typedef6_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef7_]), |
+ '[$List_rep, {$func: 1, $args: ' |
+ '[$int_rep, $String_rep], $opt: [[$List_rep, $int_rep],,]}]', |
+ '[$List_rep, {$func: 1, $args: ' |
+ '[$int_rep, $String_rep], $opt: [[$List_rep, $int_rep],,], ' |
+ '$typedefTag: $Typedef7_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef8_]), |
+ '[$List_rep, {$func: 1, $args: [$int_rep],' |
+ ' $named: {b: $String_rep}}]', |
+ '[$List_rep, {$func: 1, $args: [$int_rep],' |
+ ' $named: {b: $String_rep}, $typedefTag: $Typedef8_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef9_]), |
+ '[$List_rep, {$func: 1, ' |
+ '$args: [$int_rep, $String_rep], $named: ' |
+ '{c: [$List_rep, $int_rep], d: null}}]', |
+ '[$List_rep, {$func: 1, ' |
+ '$args: [$int_rep, $String_rep], $named: {c: [$List_rep, $int_rep],' |
+ ' d: null}, $typedefTag: $Typedef9_rep}]'); |
+ expect( |
+ instantiate(List_, [Typedef10_]), |
+ '[$List_rep, {$func: 1, ' |
+ '$args: [{$func: 1, $retvoid: true, ' |
+ '$args: [$int_rep], $opt: [,]}]}]', |
+ '[$List_rep, {$func: 1, ' |
+ '$args: [{$func: 1, $retvoid: true, ' |
+ '$args: [$int_rep], $opt: [,]}], $typedefTag: $Typedef10_rep}]'); |
- // Map<K,V> |
- expect(Map_.computeType(env.compiler.resolution), |
- '[$Map_rep, $Map_K_rep, $Map_V_rep]'); |
- // Map |
- expect(Map_.rawType, '$Map_rep'); |
- // Map<dynamic,dynamic> |
- expect(instantiate(Map_, [dynamic_, dynamic_]), '$Map_rep'); |
- // Map<int,String> |
- expect(instantiate(Map_, [int_, String_]), |
- '[$Map_rep, $int_rep, $String_rep]'); |
+ // Map<K,V> |
+ expect(Map_.computeType(env.compiler.resolution), |
+ '[$Map_rep, $Map_K_rep, $Map_V_rep]'); |
+ // Map |
+ expect(Map_.rawType, '$Map_rep'); |
+ // Map<dynamic,dynamic> |
+ expect(instantiate(Map_, [dynamic_, dynamic_]), '$Map_rep'); |
+ // Map<int,String> |
+ expect(instantiate(Map_, [int_, String_]), |
+ '[$Map_rep, $int_rep, $String_rep]'); |
+ // void m1() {} |
+ expect(env.getElement('m1').computeType(env.compiler.resolution), |
+ '{$func: 1, $retvoid: true}'); |
- // void m1() {} |
- expect(env.getElement('m1').computeType(env.compiler.resolution), |
- '{$func: 1, $retvoid: true}'); |
+ // int m2() => 0; |
+ expect(env.getElement('m2').computeType(env.compiler.resolution), |
+ '{$func: 1, $ret: $int_rep}'); |
- // int m2() => 0; |
- expect(env.getElement('m2').computeType(env.compiler.resolution), |
- '{$func: 1, $ret: $int_rep}'); |
+ // List<int> m3() => null; |
+ expect(env.getElement('m3').computeType(env.compiler.resolution), |
+ '{$func: 1, $ret: [$List_rep, $int_rep]}'); |
- // List<int> m3() => null; |
- expect(env.getElement('m3').computeType(env.compiler.resolution), |
- '{$func: 1, $ret: [$List_rep, $int_rep]}'); |
+ // m4() {} |
+ expect(env.getElement('m4').computeType(env.compiler.resolution), |
+ '{$func: 1}'); |
- // m4() {} |
- expect(env.getElement('m4').computeType(env.compiler.resolution), |
- '{$func: 1}'); |
+ // m5(int a, String b) {} |
+ expect(env.getElement('m5').computeType(env.compiler.resolution), |
+ '{$func: 1, $args: [$int_rep, $String_rep]}'); |
- // m5(int a, String b) {} |
- expect(env.getElement('m5').computeType(env.compiler.resolution), |
- '{$func: 1, $args: [$int_rep, $String_rep]}'); |
+ // m6(int a, [String b]) {} |
+ expect( |
+ env.getElement('m6').computeType(env.compiler.resolution), |
+ '{$func: 1, $args: [$int_rep],' |
+ ' $opt: [$String_rep]}'); |
- // m6(int a, [String b]) {} |
- expect(env.getElement('m6').computeType(env.compiler.resolution), |
- '{$func: 1, $args: [$int_rep],' |
- ' $opt: [$String_rep]}'); |
+ // m7(int a, String b, [List<int> c, d]) {} |
+ expect( |
+ env.getElement('m7').computeType(env.compiler.resolution), |
+ '{$func: 1,' |
+ ' $args: [$int_rep, $String_rep],' |
+ ' $opt: [[$List_rep, $int_rep],,]}'); |
- // m7(int a, String b, [List<int> c, d]) {} |
- expect(env.getElement('m7').computeType(env.compiler.resolution), |
- '{$func: 1,' |
- ' $args: [$int_rep, $String_rep],' |
- ' $opt: [[$List_rep, $int_rep],,]}'); |
+ // m8(int a, {String b}) {} |
+ expect( |
+ env.getElement('m8').computeType(env.compiler.resolution), |
+ '{$func: 1,' |
+ ' $args: [$int_rep], $named: {b: $String_rep}}'); |
- // m8(int a, {String b}) {} |
- expect(env.getElement('m8').computeType(env.compiler.resolution), |
- '{$func: 1,' |
- ' $args: [$int_rep], $named: {b: $String_rep}}'); |
+ // m9(int a, String b, {List<int> c, d}) {} |
+ expect( |
+ env.getElement('m9').computeType(env.compiler.resolution), |
+ '{$func: 1,' |
+ ' $args: [$int_rep, $String_rep],' |
+ ' $named: {c: [$List_rep, $int_rep], d: null}}'); |
- // m9(int a, String b, {List<int> c, d}) {} |
- expect(env.getElement('m9').computeType(env.compiler.resolution), |
- '{$func: 1,' |
- ' $args: [$int_rep, $String_rep],' |
- ' $named: {c: [$List_rep, $int_rep], d: null}}'); |
- |
- // m10(void f(int a, [b])) {} |
- expect(env.getElement('m10').computeType(env.compiler.resolution), |
- '{$func: 1, $args:' |
- ' [{$func: 1,' |
- ' $retvoid: true, $args: [$int_rep], $opt: [,]}]}'); |
- })); |
+ // m10(void f(int a, [b])) {} |
+ expect( |
+ env.getElement('m10').computeType(env.compiler.resolution), |
+ '{$func: 1, $args:' |
+ ' [{$func: 1,' |
+ ' $retvoid: true, $args: [$int_rep], $opt: [,]}]}'); |
+ })); |
} |