Files
hawk/t/h-015.hawk
hyung-hwan 6520b42935
All checks were successful
continuous-integration/drone/push Build is passing
implemented an extended function call named xcall internally (e.g. a.b.c(20))
2026-02-03 18:07:05 +09:00

58 lines
1.2 KiB
Plaintext

@pragma implicit off
@pragma pedantic on
@pragma entry main
@pragma xcall on
@include "tap.inc";
func mul(a, b) {
return a * b;
}
func add(a, b) {
return a + b;
}
func make_map() {
@local m;
m = @{};
m["f"] = mul;
m["g"] = add;
return m;
}
func main() {
@local a, m, r;
a.b.c = mul;
tap_ensure(a.b.c(6, 7), 42, @SCRIPTNAME, @SCRIPTLINE);
tap_ensure(a["b"]["c"](3, 4), 12, @SCRIPTNAME, @SCRIPTLINE);
# should be treated as concatenation, not a second call
tap_ensure(sprintf("%s", a.b.c(2, 3)(4)), "64", @SCRIPTNAME, @SCRIPTLINE);
tap_ensure(sprintf("%s", a["b"]["c"](2, 3)(4)), "64", @SCRIPTNAME, @SCRIPTLINE);
a = @[ @[mul] ];
tap_ensure(a[1][1](8, 9), 72, @SCRIPTNAME, @SCRIPTLINE);
a = @{};
a[10,20] = mul;
tap_ensure(a[10,20](11, 12), 132, @SCRIPTNAME, @SCRIPTLINE);
m = make_map();
tap_ensure(m.f(5, 6), 30, @SCRIPTNAME, @SCRIPTLINE);
tap_ensure(m["g"](1, 2), 3, @SCRIPTNAME, @SCRIPTLINE);
# normal variable call should still work
r = mul(2, 5);
tap_ensure(r, 10, @SCRIPTNAME, @SCRIPTLINE);
# mixed dot/bracket chain before call
a = @{};
a["k"] = @{};
a["k"].fn = mul;
tap_ensure(a["k"].fn(4, 4), 16, @SCRIPTNAME, @SCRIPTLINE);
tap_end();
}