// Copyright (c) 2018, 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.7 /*member: main:[null]*/ main() { trustLocals(); trustFunctions(); inferFromFunctions(); } //////////////////////////////////////////////////////////////////////////////// // Test that we trust the explicit type of a local. //////////////////////////////////////////////////////////////////////////////// /*member: _trustLocals:[exact=JSBool]*/ _trustLocals( int Function(int) /*[null|subclass=Closure]*/ f) { int c = f(0); return c /*invoke: [null|subclass=JSInt]*/ == 0; } /*member: trustLocals:[null]*/ trustLocals() { _trustLocals(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o); _trustLocals(null); } //////////////////////////////////////////////////////////////////////////////// // Test that we infer the type of a dynamic local from the type of the function. //////////////////////////////////////////////////////////////////////////////// /*member: _trustFunctions:[exact=JSBool]*/ _trustFunctions(int Function(int) /*[null|subclass=Closure]*/ f) { dynamic c = f(0); c = f(0); return c /*invoke: [null|subclass=JSInt]*/ == 0; } /*member: trustFunctions:[null]*/ trustFunctions() { _trustFunctions(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o); _trustFunctions(null); } //////////////////////////////////////////////////////////////////////////////// // Test that we infer the type of a 'var' local from the type of the function. //////////////////////////////////////////////////////////////////////////////// /*member: _inferFromFunctions:[exact=JSBool]*/ _inferFromFunctions(int Function(int) /*[null|subclass=Closure]*/ f) { var c = f(0); return c /*invoke: [null|subclass=JSInt]*/ == 0; } /*member: inferFromFunctions:[null]*/ inferFromFunctions() { _inferFromFunctions(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o); _inferFromFunctions(null); }