| // Copyright (c) 2017, 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() { |
| namedLocalFunctionInvoke(); |
| unnamedLocalFunctionInvoke(); |
| namedLocalFunctionGet(); |
| recursiveLocalFunction(); |
| namedLocalFunctionInvokeMissingArgument(); |
| namedLocalFunctionInvokeExtraArgument(); |
| namedLocalFunctionInvokeExtraNamedArgument(); |
| closureToString(); |
| closureCallToString(); |
| callCompare(); |
| callClosure(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Invocation of a named local function. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: namedLocalFunctionInvoke:[exact=JSUInt31]*/ |
| namedLocalFunctionInvoke() { |
| /*[exact=JSUInt31]*/ local() => 0; |
| return local(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Invocation of an unnamed local function. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: unnamedLocalFunctionInvoke:[null|subclass=JSInt]*/ |
| unnamedLocalFunctionInvoke() { |
| var local = /*[exact=JSUInt31]*/ () => 0; |
| return local(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Access of a named local function. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: namedLocalFunctionGet:[subclass=Closure]*/ |
| namedLocalFunctionGet() { |
| /*[exact=JSUInt31]*/ local() => 0; |
| return local; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Call a named local function recursively. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: recursiveLocalFunction:[subclass=Closure]*/ |
| recursiveLocalFunction() { |
| /*[subclass=Closure]*/ local() => local; |
| return local(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Call a named local function with a missing argument. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: namedLocalFunctionInvokeMissingArgument:[null|subclass=Object]*/ |
| @pragma('dart2js:disableFinal') |
| namedLocalFunctionInvokeMissingArgument() { |
| /*[exact=JSUInt31]*/ local(/*[empty]*/ x) => 0; |
| dynamic b = local; |
| return b(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Call a named local function with an extra argument. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: namedLocalFunctionInvokeExtraArgument:[null|subclass=Object]*/ |
| @pragma('dart2js:disableFinal') |
| namedLocalFunctionInvokeExtraArgument() { |
| /*[exact=JSUInt31]*/ local() => 0; |
| dynamic b = local; |
| return b(0); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Call a named local function with an extra named argument. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: namedLocalFunctionInvokeExtraNamedArgument:[null|subclass=Object]*/ |
| @pragma('dart2js:disableFinal') |
| namedLocalFunctionInvokeExtraNamedArgument() { |
| /*[exact=JSUInt31]*/ local() => 0; |
| dynamic b = local; |
| return b(a: 0); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Implicit .call on a local variable. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: closureToString:[exact=JSString]*/ |
| closureToString() { |
| var local = /*[null]*/ () {}; |
| local(); |
| return local. /*invoke: [subclass=Closure]*/ toString(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Explicit .call on a local variable. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: closureCallToString:[exact=JSString]*/ |
| closureCallToString() { |
| var local = /*[null]*/ () {}; |
| local.call(); |
| return local. /*invoke: [subclass=Closure]*/ toString(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Operator == on the result of a parameter invocation. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: _callCompare:[subclass=Closure]*/ |
| _callCompare(int /*[subclass=Closure]*/ compare({a, b})) { |
| compare(a: 0, b: 1) /*invoke: [null|subclass=JSInt]*/ == 0; |
| return compare; |
| } |
| |
| /*member: callCompare:[null]*/ |
| callCompare() { |
| _callCompare(/*[subclass=JSInt]*/ |
| ({/*[exact=JSUInt31]*/ a, /*[exact=JSUInt31]*/ b}) => |
| a /*invoke: [exact=JSUInt31]*/ - b); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Invocation on the result of a parameter invocation. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: Class1.:[exact=Class1]*/ |
| class Class1 { |
| /*member: Class1.method1:[null]*/ |
| method1() {} |
| } |
| |
| /*member: _callClosure:[subclass=Closure]*/ |
| _callClosure(/*[subclass=Closure]*/ f({c})) { |
| f(c: new Class1()).method1(); |
| return f; |
| } |
| |
| /*member: callClosure:[null]*/ |
| callClosure() { |
| _callClosure(/*[exact=Class1]*/ ({/*[exact=Class1]*/ c}) => c); |
| } |