| // Copyright (c) 2011, 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:expect/async_helper.dart'; | |
| import 'package:expect/expect.dart'; | |
| import '../helpers/compiler_helper.dart'; | |
| const String FOO = r""" | |
| void foo(a, b) { | |
| } | |
| """; | |
| const String BAR = r""" | |
| void bar(eval, $eval) { | |
| } | |
| """; | |
| const String PARAMETER_AND_TEMP = r""" | |
| void bar(t0, b) { | |
| { | |
| var t0 = 2; | |
| if (b) { | |
| bar(1, 2); | |
| t0 = 4; | |
| } else { | |
| t0 = 3; | |
| } | |
| print(t0); | |
| } | |
| print(t0); | |
| } | |
| """; | |
| const String NO_LOCAL = r""" | |
| foo(bar, baz) { | |
| if (bar) { | |
| baz = 2; | |
| } else { | |
| baz = 3; | |
| } | |
| return baz; | |
| } | |
| """; | |
| const String MULTIPLE_PHIS_ONE_LOCAL = r""" | |
| foo(param1, param2, param3) { | |
| var a = 2; | |
| if (param1) { | |
| if (param2) { | |
| if (param3) { | |
| a = 42; | |
| } | |
| print(a); | |
| } | |
| print(a); | |
| } | |
| print(a); | |
| } | |
| """; | |
| const String PARAMETER_INIT = r""" | |
| void foo(start, test) { | |
| var result = start; | |
| if (test) { | |
| foo(1, 2); | |
| result = 42; | |
| } | |
| print(result); | |
| } | |
| """; | |
| main() { | |
| runTests() async { | |
| await compile( | |
| FOO, | |
| entry: 'foo', | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(r"function(a, b) {")); | |
| }, | |
| ); | |
| await compile( | |
| BAR, | |
| entry: 'bar', | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(r"function($eval, $$eval) {")); | |
| }, | |
| ); | |
| await compile( | |
| PARAMETER_AND_TEMP, | |
| entry: 'bar', | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(r"print(t00)")); | |
| // Check that the second 't0' got another name. | |
| Expect.isTrue(generated.contains(r"print(t01)")); | |
| }, | |
| ); | |
| await compile( | |
| MULTIPLE_PHIS_ONE_LOCAL, | |
| entry: 'foo', | |
| check: (String generated) { | |
| Expect.isTrue(generated.contains(RegExp(r'var a(;| = 2;)'))); | |
| // Check that there is only one var declaration. | |
| checkNumberOfMatches(RegExp("var").allMatches(generated).iterator, 1); | |
| }, | |
| ); | |
| await compile( | |
| NO_LOCAL, | |
| entry: 'foo', | |
| check: (String generated) { | |
| Expect.isFalse(generated.contains('var')); | |
| }, | |
| ); | |
| await compile( | |
| PARAMETER_INIT, | |
| entry: 'foo', | |
| check: (String generated) { | |
| // Check that there is only one var declaration. | |
| checkNumberOfMatches(RegExp("var").allMatches(generated).iterator, 1); | |
| }, | |
| ); | |
| } | |
| asyncTest(() async { | |
| print('--test from kernel------------------------------------------------'); | |
| await runTests(); | |
| }); | |
| } |