Files
2026-09-11 22:50:02 +09:00

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();
}