// Copyright (c) 2014, 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. import "package:expect/expect.dart"; // Regression test for issue 17483. class A { var x, y; A(x, this.y) { this.x = x; } toString() => "a"; } foo(trace) => trace.add("foo"); bar(trace) => trace.add("bar"); main() { var trace = []; // Dart2js must keep the order of t1 and t2. var t1 = foo(trace); var t2 = bar(trace); // Dart2js inlines the constructor, yielding something like: // t3 = jsNew A(null, t2); // Note that jsNew is pure. // t3.x = t1; // t3 is used twice and cannot be generated at use site. // Dart2js must not allow t1 to cross the t3-line. var a = new A(t1, t2); // Use a. It is already implicitly used by the this.x = x line in its // constructor. With the following use we use it twice and make sure that // the allocation can not be generated at use-site. trace.add(a.toString()); Expect.listEquals(["foo", "bar", "a"], trace); }