diff options
Diffstat (limited to 'libguile/values.h')
-rw-r--r-- | libguile/values.h | 31 |
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); |