|  | // 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); | 
|  | } |