summaryrefslogtreecommitdiffstats
path: root/vm.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-04-03 20:07:30 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-04-03 20:07:30 -0700
commit3ce8999b2cc9c2aa04805141af9cb449d92fa89e (patch)
treef4aefbf47c4743ee70e4ccf0864dfdc3eb14616f /vm.c
parentbd799f60625bea91facb671f4082ad04a8f59380 (diff)
downloadtxr-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.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/vm.c b/vm.c
index 4d041fce..bb88ef8f 100644
--- a/vm.c
+++ b/vm.c
@@ -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));