Example 1:
> procedure testA() {
"Current backtrace:";
getbacktrace();
};
> procedure testB(X) {
"X = ", X;
testA();
};
> procedure testC(X, Y) {
"X = ", X, ", Y = ", Y;
testB(Y);
};
> testC(17, 42);
X = 17, Y = 42
X = 42
Current backtrace:
[|{ .passed_args = [| |], .called_proc = proc()
{
"Current backtrace:";
getbacktrace();
return void;
} }, { .passed_args = [|42|], .called_proc = proc(X)
{
"X = ", X;
testA();
return void;
} }, { .passed_args = [|17, 42|], .called_proc = proc(X, Y)
{
"X = ", X, ", Y = ", Y;
testB(Y);
return void;
} }|]
Example 2:
> getbacktrace();
[| |]
Example 3:
> procedure printnumargs(X) {
var L, t;
"number of arguments: ", X;
L = getbacktrace();
"Backtrace:";
for t in L do {
" " @ objectname(t.called_proc) @ ", ", t.passed_args;
};
};
> procedure numargs(l = ...) {
"l[17] = ", l[17];
printnumargs(length(l));
};
> procedure test() {
numargs @ [|25, 26, 27 ...|];
};
> test();
l[17] = 42
number of arguments: infty
Backtrace:
printnumargs, [|infty|]
numargs, [|25, 26, 27...|]
test, [| |]