1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Added internal C function to extract from values object

* libguile/values.c (scm_i_extract_values_2): New internal function
  that extracts two values from a values object.

* libguile/values.h: Added prototype.
This commit is contained in:
Mark H Weaver 2011-02-10 18:03:14 -05:00 committed by Andy Wingo
parent 1fa6ac0014
commit a85c1f93f0
2 changed files with 20 additions and 0 deletions

View file

@ -35,6 +35,24 @@
SCM scm_values_vtable; SCM scm_values_vtable;
/* OBJ must be a values object containing exactly two values.
scm_i_extract_values_2 puts those two values into *p1 and *p2. */
void
scm_i_extract_values_2 (SCM obj, SCM *p1, SCM *p2)
{
SCM values;
SCM_ASSERT_TYPE (SCM_VALUESP (obj), obj, SCM_ARG1,
"scm_i_extract_values_2", "values");
values = scm_struct_ref (obj, SCM_INUM0);
if (!scm_is_null_or_nil (SCM_CDDR (values)))
scm_wrong_type_arg_msg
("scm_i_extract_values_2", SCM_ARG1, obj,
"a values object containing exactly two values");
*p1 = SCM_CAR (values);
*p2 = SCM_CADR (values);
}
static SCM static SCM
print_values (SCM obj, SCM pwps) print_values (SCM obj, SCM pwps)
{ {

View file

@ -30,6 +30,8 @@ SCM_API SCM scm_values_vtable;
#define SCM_VALUESP(x) (SCM_STRUCTP (x)\ #define SCM_VALUESP(x) (SCM_STRUCTP (x)\
&& scm_is_eq (scm_struct_vtable (x), scm_values_vtable)) && scm_is_eq (scm_struct_vtable (x), scm_values_vtable))
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_values (SCM args);
SCM_INTERNAL void scm_init_values (void); SCM_INTERNAL void scm_init_values (void);