summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-12-11 12:44:29 +0100
committerLudovic Courtès <ludo@gnu.org>2009-12-11 13:03:45 +0100
commitbd91ecce14c8df1022d4f7225888906541556570 (patch)
tree577a83b49d4ddd46556faa5060be16c88a71350e /libguile/vm-engine.c
parent6c20a0b34b3c79c999213320eabf3d46eddd1c6e (diff)
downloadguile-bd91ecce14c8df1022d4f7225888906541556570.tar.gz
Add opcodes for `struct?', `struct-vtable', and `make-struct'.
* libguile/vm-engine.c (VM_NAME)[vm_error_not_a_struct]: New label. * libguile/vm-i-scheme.c (VM_VALIDATE_STRUCT): New macro. (struct_p, struct_vtable, make_struct): New instructions. * module/language/tree-il/compile-glil.scm (*primcall-ops*): Add `struct?', `struct-vtable', and `make-struct'. * module/language/tree-il/primitives.scm (*interesting-primitive-names*, *effect-free-primitives*): Likewise.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 7fbb77480..71cb636a6 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -206,6 +206,12 @@ VM_NAME (struct scm_vm *vp, SCM program, SCM *argv, int nargs)
/* shouldn't get here */
goto vm_error;
+ vm_error_not_a_struct:
+ SYNC_ALL ();
+ scm_wrong_type_arg_msg (FUNC_NAME, 1, finish_args, "struct");
+ /* shouldn't get here */
+ goto vm_error;
+
vm_error_no_values:
err_msg = scm_from_locale_string ("Zero values returned to single-valued continuation");
finish_args = SCM_EOL;