// 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(var a, var b) { } """; const String BAR = r""" void bar(var eval, var $eval) { } """; const String PARAMETER_AND_TEMP = r""" void bar(var t0, var 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(var start, var 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(); }); }