cfad47cfa3/t3compiler/tads3/test/data/anonvarg.t

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
/*
2
 *   Test of anonymous functions with varargs-list arguments.  Anonymous
3
 *   functions and varargs-list arguments both use non-standard parameter
4
 *   value references, and the different special handlings interfered with
5
 *   one another in older versions of the compiler. 
6
 */
7
8
#include <tads.h>
9
10
main(args)
11
{
12
    fixedfunc(1, 2);
13
    varfunc(4, 5, 6);
14
    varfunc2(7, 8, 9);
15
}
16
17
fixedfunc(a, b)
18
{
19
    local func = {x, y: tadsSay('fixedcb: x=' + x + ', y=' + y + '\n')};
20
    (func)(a, b);
21
    (func)(a*2, b*2);
22
}
23
24
varfunc([args])
25
{
26
    local func = new function(lst) {
27
        foreach (local x in lst)
28
            "\t<<x>>\n";
29
    };
30
31
    "varfunc: via callback\n";
32
    (func)(args);
33
34
    "varfunc: args.length() = <<args.length()>>\n";
35
}
36
37
varfunc2([args])
38
{
39
    local func = new function(hdr) {
40
        "<<hdr>>\n";
41
        if (args == nil)
42
            "\t<args = nil>\n";
43
        else
44
            foreach (local x in args)
45
                "\t<<x>>\n";
46
    };
47
48
    (func)('varfunc2 callback:');
49
50
    if (args == nil)
51
        "varfunc2: args = nil\n";
52
    else
53
        "varfunc2: args.length() = <<args.length()>>\n";
54
}