diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-04-03 20:07:30 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-04-03 20:07:30 -0700 |
commit | 3ce8999b2cc9c2aa04805141af9cb449d92fa89e (patch) | |
tree | f4aefbf47c4743ee70e4ccf0864dfdc3eb14616f /vm.c | |
parent | bd799f60625bea91facb671f4082ad04a8f59380 (diff) | |
download | txr-3ce8999b2cc9c2aa04805141af9cb449d92fa89e.tar.gz txr-3ce8999b2cc9c2aa04805141af9cb449d92fa89e.tar.bz2 txr-3ce8999b2cc9c2aa04805141af9cb449d92fa89e.zip |
compiler: first cut compile-file implementation.
* lisplib.c (compiler_set_entries): Autoload on compile-file.
* parser.c (parse_init): Expose get-parser, parser-errors and
parser-eof intrinsics in system package.
* share/txr/stdlib/compiler.tl (compiler): Wrap defstruct form
in compile-only. What this means is that when we invoke
comile-file on compiler.tl, the compiler will only compile
this defstruct and not evaluate it. I.e. it will not try to
redefine the structure. Redefining the core structure of the
compiler while it is compiling itself wreaks havoc on the
compilation.
(%fille-suff-rx%, *emit*, *eval*): New variables.
(open-compile-streams, list-from-vm-desc, usr:compile-file):
New functions.
* vm.c (vm_desc_nlevels, vm_desc_nregs): New static functions.
(vm_init): Register new intrinsics vm-desc-nlevels and
vn-desc-nregs in system package.
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -171,6 +171,18 @@ val vm_make_desc(val nlevels, val nregs, val bytecode, } } +static val vm_desc_nlevels(val desc) +{ + struct vm_desc *vd = vm_desc_struct(desc); + return num(vd->nlvl); +} + +static val vm_desc_nregs(val desc) +{ + struct vm_desc *vd = vm_desc_struct(desc); + return num(vd->nreg); +} + static val vm_desc_bytecode(val desc) { struct vm_desc *vd = vm_desc_struct(desc); @@ -1050,6 +1062,8 @@ void vm_init(void) vm_desc_s = intern(lit("vm-desc"), system_package); vm_closure_s = intern(lit("vm-closure"), system_package); reg_fun(intern(lit("vm-make-desc"), system_package), func_n5(vm_make_desc)); + reg_fun(intern(lit("vm-desc-nlevels"), system_package), func_n1(vm_desc_nlevels)); + reg_fun(intern(lit("vm-desc-nregs"), system_package), func_n1(vm_desc_nregs)); reg_fun(intern(lit("vm-desc-bytecode"), system_package), func_n1(vm_desc_bytecode)); reg_fun(intern(lit("vm-desc-datavec"), system_package), func_n1(vm_desc_datavec)); reg_fun(intern(lit("vm-desc-funvec"), system_package), func_n1(vm_desc_funvec)); |