summaryrefslogtreecommitdiff
path: root/libguile/vm-i-scheme.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-10-31 14:09:01 +0100
committerAndy Wingo <wingo@pobox.com>2008-10-31 14:09:01 +0100
commit1e4b834ab1821f272359e03712044a4793c5d529 (patch)
tree8316033e95d754f76d5b21abe37bfb787cef8d7f /libguile/vm-i-scheme.c
parenteb5f05c3209530792ddbd81a8afadaed3836b168 (diff)
downloadguile-1e4b834ab1821f272359e03712044a4793c5d529.tar.gz
new ops: slot-ref, slot-set. remove and recompile your .go files
* libguile/vm-i-scheme.c (slot-ref, slot-set): New ops.
Diffstat (limited to 'libguile/vm-i-scheme.c')
-rw-r--r--libguile/vm-i-scheme.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c
index d4dac80d3..efaa73546 100644
--- a/libguile/vm-i-scheme.c
+++ b/libguile/vm-i-scheme.c
@@ -274,6 +274,28 @@ VM_DEFINE_FUNCTION (mod, "mod", 2)
RETURN (scm_modulo (x, y));
}
+
+/*
+ * GOOPS support
+ */
+VM_DEFINE_FUNCTION (slot_ref, "slot-ref", 2)
+{
+ size_t slot;
+ ARGS2 (instance, idx);
+ slot = SCM_I_INUM (idx);
+ RETURN (SCM_PACK (SCM_STRUCT_DATA (instance) [slot]));
+}
+
+VM_DEFINE_FUNCTION (slot_set, "slot-set", 3)
+{
+ size_t slot;
+ ARGS3 (instance, idx, val);
+ slot = SCM_I_INUM (idx);
+ SCM_STRUCT_DATA (instance) [slot] = SCM_UNPACK (val);
+ RETURN (SCM_UNSPECIFIED);
+}
+
+
/*
Local Variables:
c-file-style: "gnu"