| Index: tests/language/field_inference_test.dart
|
| ===================================================================
|
| --- tests/language/field_inference_test.dart (revision 0)
|
| +++ tests/language/field_inference_test.dart (revision 0)
|
| @@ -0,0 +1,50 @@
|
| +// Copyright (c) 2013, 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.
|
| +
|
| +// Regression test for dart2js and its SsaConstructionFieldTypes
|
| +// phase.
|
| +
|
| +import "package:expect/expect.dart";
|
| +
|
| +class A {
|
| + var _field;
|
| + final other;
|
| + get field => _field;
|
| + A(this._field) : other = null;
|
| + A.fromOther(this.other) {
|
| + _field = other.field;
|
| + }
|
| +}
|
| +
|
| +class B {
|
| + var a;
|
| + B() {
|
| + try { // Defeat inlining.
|
| + // An inlined generative constructor call used to confuse
|
| + // dart2js.
|
| + a = new A(42);
|
| + } catch (e) {
|
| + rethrow;
|
| + }
|
| + }
|
| +}
|
| +
|
| +var array = [new A(42), new B()];
|
| +
|
| +main() {
|
| + // Surround the call to [analyzeAfterB] by two [: new B() :] calls
|
| + // to ensure the [B] constructor will be analyzed first.
|
| + new B();
|
| + var a = analyzeAfterB();
|
| + new B();
|
| + Expect.equals(42, a._field);
|
| +}
|
| +
|
| +analyzeAfterB() {
|
| + try { // Defeat inlining.
|
| + return new A.fromOther(array[0]);
|
| + } catch (e) {
|
| + rethrow;
|
| + }
|
| +}
|
|
|