summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-04-06 23:25:23 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-04-06 23:25:23 -0700
commitd44630dd678e7435753d6452fdb3e28a45243f69 (patch)
tree902ed70ec266923b4814a7650654fee0fef977ff /lib.c
parent75b107868d1f58ab08b9b1852904b53cc6aa07df (diff)
downloadtxr-d44630dd678e7435753d6452fdb3e28a45243f69.tar.gz
txr-d44630dd678e7435753d6452fdb3e28a45243f69.tar.bz2
txr-d44630dd678e7435753d6452fdb3e28a45243f69.zip
vm: allow vm description to be callable as function.
* lib.c (generic_funall): Handle vm-desc objects via vm_execute_toplevel. * vm.h (vm_desc_s, vm_closure_s): Declared.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 980fe768..7219d2d2 100644
--- a/lib.c
+++ b/lib.c
@@ -6253,6 +6253,10 @@ val generic_funcall(val fun, struct args *args_in)
default:
callerror(fun, lit("too many arguments"));
}
+ } else if (fun->co.cls == vm_desc_s) {
+ if (args->fill || args->list)
+ callerror(fun, lit("too many arguments"));
+ return vm_execute_toplevel(fun);
} else if (fun->co.cls == carray_s) {
goto carray;
} else if (obj_struct_p(fun)) {