// 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/expect.dart'; import 'package:async_helper/async_helper.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""" int 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("var a;")); // Check that there is only one var declaration. checkNumberOfMatches(new 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(new RegExp("var").allMatches(generated).iterator, 1); }); } asyncTest(() async { print('--test from kernel------------------------------------------------'); await runTests(); }); }