20faaa5d94
Change-Id: Ib18f554c1076f27a3f7c0df5a36410da41a1f467 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148784 Reviewed-by: Paul Berry <paulberry@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com>
157 lines
5.2 KiB
Dart
157 lines
5.2 KiB
Dart
// 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);
|
|
}
|