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