| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js.kernel.impact_test; | 5 library dart2js.kernel.impact_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'package:async_helper/async_helper.dart'; | 8 import 'package:async_helper/async_helper.dart'; |
| 9 import 'package:compiler/src/common.dart'; | 9 import 'package:compiler/src/common.dart'; |
| 10 import 'package:compiler/src/commandline_options.dart'; | 10 import 'package:compiler/src/commandline_options.dart'; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 testEmptyListLiteralTyped(); | 32 testEmptyListLiteralTyped(); |
| 33 testEmptyListLiteralConstant(); | 33 testEmptyListLiteralConstant(); |
| 34 testNonEmptyListLiteral(); | 34 testNonEmptyListLiteral(); |
| 35 testEmptyMapLiteral(); | 35 testEmptyMapLiteral(); |
| 36 testEmptyMapLiteralDynamic(); | 36 testEmptyMapLiteralDynamic(); |
| 37 testEmptyMapLiteralTyped(); | 37 testEmptyMapLiteralTyped(); |
| 38 testEmptyMapLiteralConstant(); | 38 testEmptyMapLiteralConstant(); |
| 39 testNonEmptyMapLiteral(); | 39 testNonEmptyMapLiteral(); |
| 40 testNot(); | 40 testNot(); |
| 41 testUnaryMinus(); | 41 testUnaryMinus(); |
| 42 testConditional(); |
| 43 testPostInc(null); |
| 44 testPostDec(null); |
| 45 testPreInc(null); |
| 46 testPreDec(null); |
| 42 testIfThen(); | 47 testIfThen(); |
| 43 testIfThenElse(); | 48 testIfThenElse(); |
| 44 testTopLevelInvoke(); | 49 testTopLevelInvoke(); |
| 45 testTopLevelInvokeTyped(); | 50 testTopLevelInvokeTyped(); |
| 46 testTopLevelField(); | 51 testTopLevelField(); |
| 47 testTopLevelFieldTyped(); | 52 testTopLevelFieldTyped(); |
| 53 testDynamicInvoke(null); |
| 54 testDynamicGet(null); |
| 55 testDynamicSet(null); |
| 56 testLocalWithInitializer(); |
| 57 testInvokeIndex(null); |
| 58 testInvokeIndexSet(null); |
| 59 testAssert(); |
| 60 testAssertWithMessage(); |
| 48 } | 61 } |
| 49 | 62 |
| 50 testEmpty() {} | 63 testEmpty() {} |
| 51 testNull() => null; | 64 testNull() => null; |
| 52 testTrue() => true; | 65 testTrue() => true; |
| 53 testFalse() => false; | 66 testFalse() => false; |
| 54 testInt() => 42; | 67 testInt() => 42; |
| 55 testDouble() => 37.5; | 68 testDouble() => 37.5; |
| 56 testString() => 'foo'; | 69 testString() => 'foo'; |
| 57 testSymbol() => #main; | 70 testSymbol() => #main; |
| 58 testEmptyListLiteral() => []; | 71 testEmptyListLiteral() => []; |
| 59 testEmptyListLiteralDynamic() => <dynamic>[]; | 72 testEmptyListLiteralDynamic() => <dynamic>[]; |
| 60 testEmptyListLiteralTyped() => <String>[]; | 73 testEmptyListLiteralTyped() => <String>[]; |
| 61 testEmptyListLiteralConstant() => const []; | 74 testEmptyListLiteralConstant() => const []; |
| 62 testNonEmptyListLiteral() => [0]; | 75 testNonEmptyListLiteral() => [0]; |
| 63 testEmptyMapLiteral() => {}; | 76 testEmptyMapLiteral() => {}; |
| 64 testEmptyMapLiteralDynamic() => <dynamic, dynamic>{}; | 77 testEmptyMapLiteralDynamic() => <dynamic, dynamic>{}; |
| 65 testEmptyMapLiteralTyped() => <String, int>{}; | 78 testEmptyMapLiteralTyped() => <String, int>{}; |
| 66 testEmptyMapLiteralConstant() => const {}; | 79 testEmptyMapLiteralConstant() => const {}; |
| 67 testNonEmptyMapLiteral() => {0: true}; | 80 testNonEmptyMapLiteral() => {0: true}; |
| 68 testNot() => !false; | 81 testNot() => !false; |
| 69 testUnaryMinus() => -1; | 82 testUnaryMinus() => -1; |
| 83 testConditional() => true ? 1 : ''; |
| 84 testPostInc(o) => o++; |
| 85 testPostDec(o) => o--; |
| 86 testPreInc(o) => ++o; |
| 87 testPreDec(o) => --o; |
| 70 testIfThen() { | 88 testIfThen() { |
| 71 if (false) return 42; | 89 if (false) return 42; |
| 72 return 1; | 90 return 1; |
| 73 } | 91 } |
| 74 testIfThenElse() { | 92 testIfThenElse() { |
| 75 if (true) { | 93 if (true) { |
| 76 return 42; | 94 return 42; |
| 77 } else { | 95 } else { |
| 78 return 1; | 96 return 1; |
| 79 } | 97 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 105 topLevelFunction3Typed(true); | 123 topLevelFunction3Typed(true); |
| 106 topLevelFunction3Typed(false, b: []); | 124 topLevelFunction3Typed(false, b: []); |
| 107 topLevelFunction3Typed(null, c: {}); | 125 topLevelFunction3Typed(null, c: {}); |
| 108 topLevelFunction3Typed(true, b: [13], c: {'14': true}); | 126 topLevelFunction3Typed(true, b: [13], c: {'14': true}); |
| 109 topLevelFunction3Typed(false, c: {'16': false}, b: [17]); | 127 topLevelFunction3Typed(false, c: {'16': false}, b: [17]); |
| 110 } | 128 } |
| 111 var topLevelField; | 129 var topLevelField; |
| 112 testTopLevelField() => topLevelField; | 130 testTopLevelField() => topLevelField; |
| 113 int topLevelFieldTyped; | 131 int topLevelFieldTyped; |
| 114 testTopLevelFieldTyped() => topLevelFieldTyped; | 132 testTopLevelFieldTyped() => topLevelFieldTyped; |
| 133 testDynamicInvoke(o) { |
| 134 o.f1(0); |
| 135 o.f2(1); |
| 136 o.f3(2, 3); |
| 137 o.f4(4, 5, 6); |
| 138 o.f5(7); |
| 139 o.f6(8, b: 9); |
| 140 o.f7(10, c: 11); |
| 141 o.f8(12, b: 13, c: 14); |
| 142 o.f9(15, c: 16, b: 17); |
| 143 } |
| 144 testDynamicGet(o) => o.foo; |
| 145 testDynamicSet(o) => o.foo = 42; |
| 146 testLocalWithInitializer() { |
| 147 var l = 42; |
| 148 } |
| 149 testInvokeIndex(o) => o[42]; |
| 150 testInvokeIndexSet(o) => o[42] = null; |
| 151 testAssert() { |
| 152 assert(true); |
| 153 } |
| 154 testAssertWithMessage() { |
| 155 assert(true, 'ok'); |
| 156 } |
| 115 ''' | 157 ''' |
| 116 }; | 158 }; |
| 117 | 159 |
| 118 main(List<String> args) { | 160 main(List<String> args) { |
| 119 asyncTest(() async { | 161 asyncTest(() async { |
| 120 enableDebugMode(); | 162 enableDebugMode(); |
| 121 Uri entryPoint = Uri.parse('memory:main.dart'); | 163 Uri entryPoint = Uri.parse('memory:main.dart'); |
| 122 Compiler compiler = compilerFor( | 164 Compiler compiler = compilerFor( |
| 123 entryPoint: entryPoint, | 165 entryPoint: entryPoint, |
| 124 memorySourceFiles: SOURCE, | 166 memorySourceFiles: SOURCE, |
| 125 options: [Flags.analyzeOnly, Flags.useKernel]); | 167 options: |
| 168 [Flags.analyzeAll, Flags.useKernel, Flags.enableAssertMessage]); |
| 126 compiler.resolution.retainCachesForTesting = true; | 169 compiler.resolution.retainCachesForTesting = true; |
| 127 await compiler.run(entryPoint); | 170 await compiler.run(entryPoint); |
| 128 compiler.mainApp | 171 checkLibrary(compiler, compiler.mainApp); |
| 129 .forEachLocalMember((element) => checkElement(compiler, element)); | |
| 130 }); | 172 }); |
| 131 } | 173 } |
| 132 | 174 |
| 175 void checkLibrary(Compiler compiler, LibraryElement library) { |
| 176 library.forEachLocalMember((AstElement element) { |
| 177 if (element.isClass) { |
| 178 // TODO(johnniwinther): Handle class members. |
| 179 } else { |
| 180 checkElement(compiler, element); |
| 181 } |
| 182 }); |
| 183 } |
| 184 |
| 133 void checkElement(Compiler compiler, AstElement element) { | 185 void checkElement(Compiler compiler, AstElement element) { |
| 134 ResolutionImpact astImpact = compiler.resolution.getResolutionImpact(element); | 186 ResolutionImpact astImpact = compiler.resolution.getResolutionImpact(element); |
| 135 ResolutionImpact kernelImpact = build(compiler, element.resolvedAst); | 187 ResolutionImpact kernelImpact = build(compiler, element.resolvedAst); |
| 136 testResolutionImpactEquivalence( | 188 testResolutionImpactEquivalence( |
| 137 astImpact, kernelImpact, const CheckStrategy()); | 189 astImpact, kernelImpact, const CheckStrategy()); |
| 138 } | 190 } |
| OLD | NEW |