|  | // 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. | 
|  |  | 
|  | main() { | 
|  | directCall(); | 
|  | indirectCall(); | 
|  | instanceTearOff(); | 
|  | localCall(); | 
|  | instantiatedCall(); | 
|  | } | 
|  |  | 
|  | /*member: _directCall:apply*/ | 
|  | _directCall() {} | 
|  |  | 
|  | /*member: directCall:*/ | 
|  | void directCall() { | 
|  | Function.apply(_directCall, []); | 
|  | } | 
|  |  | 
|  | /*member: _indirectCall:apply*/ | 
|  | _indirectCall() {} | 
|  |  | 
|  | /*member: _indirectCallHelper:*/ | 
|  | _indirectCallHelper(f) => Function.apply(f, []); | 
|  |  | 
|  | /*member: indirectCall:*/ | 
|  | void indirectCall() { | 
|  | _indirectCallHelper(_indirectCall); | 
|  | } | 
|  |  | 
|  | /*member: Class.:*/ | 
|  | class Class { | 
|  | /*member: Class.instanceTearOff1:apply*/ | 
|  | instanceTearOff1() {} | 
|  |  | 
|  | /*member: Class.instanceTearOff2:*/ | 
|  | instanceTearOff2() {} | 
|  | } | 
|  |  | 
|  | /*member: _instanceTearOffHelper:*/ | 
|  | _instanceTearOffHelper(f) => Function.apply(f, []); | 
|  |  | 
|  | instanceTearOff() { | 
|  | var c = Class(); | 
|  | _instanceTearOffHelper(c.instanceTearOff1); | 
|  | return c.instanceTearOff2; | 
|  | } | 
|  |  | 
|  | localCall() { | 
|  | /*apply*/ | 
|  | local1() {} | 
|  | local2() {} | 
|  | local3() {} | 
|  |  | 
|  | Function.apply(local1, []); | 
|  | local2(); | 
|  | return local3; | 
|  | } | 
|  |  | 
|  | instantiatedCall() { | 
|  | /*apply*/ | 
|  | local1<T>(T t) {} | 
|  | local2<T>(T t) {} | 
|  | local3<T>(T t) {} | 
|  |  | 
|  | Function(int) f1 = local1; | 
|  | Function(int) f2 = local2; | 
|  | Function(int) f3 = local3; | 
|  |  | 
|  | Function.apply(f1, [0]); | 
|  | f2(0); | 
|  | return f3; | 
|  | } |