diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-04-06 23:25:23 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-04-06 23:25:23 -0700 |
commit | d44630dd678e7435753d6452fdb3e28a45243f69 (patch) | |
tree | 902ed70ec266923b4814a7650654fee0fef977ff | |
parent | 75b107868d1f58ab08b9b1852904b53cc6aa07df (diff) | |
download | txr-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.
-rw-r--r-- | lib.c | 4 | ||||
-rw-r--r-- | vm.h | 2 |
2 files changed, 6 insertions, 0 deletions
@@ -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)) { @@ -25,6 +25,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +extern val vm_desc_s, vm_closure_s; + val vm_make_desc(val nlevels, val nregs, val bytecode, val datavec, val funvec); val vm_execute_toplevel(val desc); |