defun fn-y (t1 t2 va-ctx) {
        | i |
	i := 0;
        while (< i (va-count va-ctx)) {
                printf "fn-y=>Y-VA[%d]=>[%d]\n" i (va-get i va-ctx);
		i := (+ i 1);
        };
};

defun x(a b ... :: x y z) {
        |i|

        set x (va-count);
        set y (* a b);
        set z (+ a b);

        set i 0;
        while (< i (va-count)) {
                printf "VA[%d]=>[%d]\n" i (va-get i);
                set i (+ i 1);
        };
        fn-y "hello" "world" (va-context);

        return;
};

set t (x 10 20 30);
if (/= t 1) {
	printf "ERROR: t is not 1\n"
} else {
	printf "OK: %d\n" t
};

set t (set-r a b c (x 10 20 30 40 50));
if (/= t 3) {
	printf "ERROR: t is not 3\n"
} else {
	printf "OK: %d\n" t
};
if (/= a 3) {
	printf "ERROR: a is not 3\n"
} else {
	printf "OK: %d\n" a
};
if (/= b 200) {
	printf "ERROR: b is not 200\n"
} else {
	printf "OK: %d\n" b
};
if (/= c 30) {
	printf "ERROR: c is not 30\n"
} else {
	printf "OK: %d\n" c
};