Files
hawk/t/h-015.hawk
hyung-hwan fe643c1c48
continuous-integration/drone/push Build is passing
added some text for ENVIRON, PIPECLOEXEC, etc
2026-05-23 14:32:19 +09:00

62 lines
1.3 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);
a = @[ @{} ];
a[1].sum = add;
tap_ensure(a[1].sum(8, 9), 17, @SCRIPTNAME, @SCRIPTLINE);
tap_end();
}