| // Copyright (c) 2012, 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. |
| // Test that parameters keep their names in the output. |
| |
| import 'package:async_helper/async_helper.dart'; |
| import '../compiler_helper.dart'; |
| |
| const String TEST_ONE = r""" |
| void foo(bar) { |
| var a = 1; |
| if (bar) { |
| a = 2; |
| } else { |
| a = 3; |
| } |
| print(a); |
| print(a); |
| } |
| """; |
| |
| const String TEST_TWO = r""" |
| void main() { |
| var t = 0; |
| for (var i = 0; i == 0; i = i + 1) { |
| t = t + 10; |
| } |
| print(t); |
| } |
| """; |
| |
| const String TEST_THREE = r""" |
| foo(b, c, d) { |
| var val = 42; |
| if (b) { |
| c = c && d; |
| if (c) { |
| val = 43; |
| } |
| } |
| return val; |
| } |
| """; |
| |
| const String TEST_FOUR = r""" |
| foo() { |
| var a = true; |
| var b = false; |
| for (var i = 0; a; i = i + 1) { |
| if (i == 9) a = false; |
| for (var j = 0; b; j = j + 1) { |
| if (j == 9) b = false; |
| } |
| } |
| print(a); |
| print(b); |
| } |
| """; |
| |
| const String TEST_FIVE = r""" |
| void main() { |
| var hash = 0; |
| for (var i = 0; i == 0; i = i + 1) { |
| hash = hash + 10; |
| hash = hash + 42; |
| } |
| print(t); |
| } |
| """; |
| |
| main() { |
| runTests({bool useKernel}) async { |
| await compileAndMatchFuzzy(TEST_ONE, 'foo', "var x = x === true \\? 2 : 3;", |
| useKernel: useKernel); |
| await compileAndMatchFuzzy(TEST_ONE, 'foo', "print\\(x\\);", |
| useKernel: useKernel); |
| |
| await compileAndMatchFuzzy(TEST_TWO, 'main', "x \\+= 10", |
| useKernel: useKernel); |
| await compileAndMatchFuzzy(TEST_TWO, 'main', "\\+\\+x", |
| useKernel: useKernel); |
| |
| // Check that we don't have 'd = d' (using regexp back references). |
| await compileAndDoNotMatchFuzzy(TEST_THREE, 'foo', '(x) = \1', |
| useKernel: useKernel); |
| await compileAndMatchFuzzy(TEST_THREE, 'foo', 'return x', |
| useKernel: useKernel); |
| |
| // Check that a store just after the declaration of the local |
| // only generates one instruction. |
| await compileAndMatchFuzzy(TEST_THREE, 'foo', 'x = 42', |
| useKernel: useKernel); |
| |
| await compileAndDoNotMatchFuzzy(TEST_FOUR, 'foo', '(x) = \1;', |
| useKernel: useKernel); |
| |
| await compileAndDoNotMatch(TEST_FIVE, 'main', new RegExp('hash0'), |
| useKernel: useKernel); |
| } |
| |
| asyncTest(() async { |
| print('--test from ast---------------------------------------------------'); |
| await runTests(useKernel: false); |
| print('--test from kernel------------------------------------------------'); |
| await runTests(useKernel: true); |
| }); |
| } |