summaryrefslogtreecommitdiff
path: root/libguile/values.h
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/values.h')
-rw-r--r--libguile/values.h31
1 files changed, 25 insertions, 6 deletions
diff --git a/libguile/values.h b/libguile/values.h
index 6312aa3ab..e5f004332 100644
--- a/libguile/values.h
+++ b/libguile/values.h
@@ -22,17 +22,36 @@
-#include "libguile/struct.h"
-
-SCM_API SCM scm_values_vtable;
-
-#define SCM_VALUESP(x) (SCM_STRUCTP (x)\
- && scm_is_eq (scm_struct_vtable (x), scm_values_vtable))
+#include "libguile/gc.h"
+
+static inline int
+scm_is_values (SCM x)
+{
+ return SCM_HAS_TYP7 (x, scm_tc7_values);
+}
+
+#ifdef BUILDING_LIBGUILE
+static inline size_t
+scm_i_nvalues (SCM x)
+{
+ return SCM_CELL_WORD_0 (x) >> 8;
+}
+
+static inline SCM
+scm_i_value_ref (SCM x, size_t n)
+{
+ return SCM_CELL_OBJECT (x, n+1);
+}
+#endif
+
+#define SCM_VALUESP(x) (scm_is_values (x))
SCM_INTERNAL void scm_i_extract_values_2 (SCM obj, SCM *p1, SCM *p2);
SCM_API SCM scm_values (SCM args);
SCM_API SCM scm_c_values (SCM *base, size_t n);
+SCM_API SCM scm_values_2 (SCM a, SCM b);
+SCM_API SCM scm_values_3 (SCM a, SCM b, SCM c);
SCM_API size_t scm_c_nvalues (SCM obj);
SCM_API SCM scm_c_value_ref (SCM obj, size_t idx);
SCM_INTERNAL void scm_init_values (void);