75 lines
2.0 KiB
Plaintext
75 lines
2.0 KiB
Plaintext
@pragma entry main
|
|
@pragma implicit off
|
|
|
|
@include "tap.inc";
|
|
|
|
function frame_return(n, omitted)
|
|
{
|
|
@local text, map, unused;
|
|
tap_ensure(omitted === @nil, @true, @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_ensure(unused === @nil, @true, @SCRIPTNAME, @SCRIPTLINE);
|
|
text = sprintf("frame-%d", n);
|
|
map["text"] = text;
|
|
unused = "occupied";
|
|
if (n > 0)
|
|
{
|
|
@local child;
|
|
child = frame_return(n - 1);
|
|
tap_ensure(child["text"], sprintf("frame-%d", n - 1), @SCRIPTNAME, @SCRIPTLINE);
|
|
}
|
|
return map;
|
|
}
|
|
|
|
function frame_ref(&value, suffix, omitted)
|
|
{
|
|
@local text;
|
|
tap_ensure(omitted === @nil, @true, @SCRIPTNAME, @SCRIPTLINE);
|
|
text = value suffix;
|
|
value = text;
|
|
return text;
|
|
}
|
|
|
|
function frame_forward(value)
|
|
{
|
|
@local result;
|
|
result = frame_ref(value, "-direct");
|
|
tap_ensure(result, value, @SCRIPTNAME, @SCRIPTLINE);
|
|
result = hawk::call("frame_ref", value, "-indirect");
|
|
tap_ensure(result, value, @SCRIPTNAME, @SCRIPTLINE);
|
|
return value;
|
|
}
|
|
|
|
function frame_variadic(first, ...)
|
|
{
|
|
@local i, result;
|
|
result = first;
|
|
for (i = 1; i < @argc; i++) result = result %% @argv[i];
|
|
return result;
|
|
}
|
|
|
|
function main()
|
|
{
|
|
@local i, result, map;
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
@local fresh, text;
|
|
tap_ensure(fresh === @nil, @true, @SCRIPTNAME, @SCRIPTLINE);
|
|
fresh["previous"] = i;
|
|
text = sprintf("iteration-%d", i);
|
|
map = frame_return(3);
|
|
tap_ensure(map["text"], "frame-3", @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_ensure(text, sprintf("iteration-%d", i), @SCRIPTNAME, @SCRIPTLINE);
|
|
}
|
|
result = frame_forward("start");
|
|
tap_ensure(result, "start-direct-indirect", @SCRIPTNAME, @SCRIPTLINE);
|
|
map["text"] = "indexed";
|
|
result = frame_ref(map["text"], "-updated");
|
|
tap_ensure(map["text"], "indexed-updated", @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_ensure(result, map["text"], @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_ensure(frame_variadic(frame_forward("a"), frame_variadic("b", "c"), "d"),
|
|
"a-direct-indirectbcd", @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_ensure(frame_variadic("only"), "only", @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_ensure(frame_variadic() === @nil, @true, @SCRIPTNAME, @SCRIPTLINE);
|
|
tap_end();
|
|
}
|