| // 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. |
| |
| // @dart = 2.9 |
| |
| // Regression test for dart2js that used to optimistically infer the |
| // wrong types for fields because of generative constructors being |
| // inlined. |
| |
| import "package:expect/expect.dart"; |
| import "../compiler_annotations.dart"; |
| |
| class A { |
| var field; |
| A(this.field); |
| } |
| |
| dynamic c = () => new List(42)[0]; |
| |
| main() { |
| bar(); |
| // Defeat type inferencing. |
| new A(c()); |
| doIt(); |
| bar(); |
| } |
| |
| @DontInline() |
| doIt() { |
| () => 42; |
| var c = new A(null); |
| Expect.throwsNoSuchMethodError(() => c.field + 42); |
| } |
| |
| @DontInline() |
| bar() { |
| () => 42; |
| return inlineLevel1(); |
| } |
| |
| inlineLevel1() { |
| return inlineLevel2(); |
| } |
| |
| inlineLevel2() { |
| return inlineLevel3(); |
| } |
| |
| inlineLevel3() { |
| return inlineLevel4(); |
| } |
| |
| inlineLevel4() { |
| return new A(42); |
| } |