From c15defef7f1de408f35066d2f2883c110724b2f9 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Mon, 30 Apr 2012 19:40:52 +0200 Subject: [PATCH] add scm_c_values helper * libguile/values.h: * libguile/values.c (scm_c_values): New public helper. --- libguile/values.c | 20 ++++++++++++++++---- libguile/values.h | 3 ++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/libguile/values.c b/libguile/values.c index 9c9e5ff6d..ff56230fb 100644 --- a/libguile/values.c +++ b/libguile/values.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2006, 2008, 2009, 2011, 2012 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -108,14 +108,26 @@ SCM_DEFINE (scm_values, "values", 0, 0, 1, if (n == 1) result = SCM_CAR (args); else - { - result = scm_c_make_struct (scm_values_vtable, 0, 1, SCM_UNPACK (args)); - } + result = scm_c_make_struct (scm_values_vtable, 0, 1, SCM_UNPACK (args)); return result; } #undef FUNC_NAME +SCM +scm_c_values (SCM *base, size_t nvalues) +{ + SCM ret, *walk; + + if (nvalues == 1) + return *base; + + for (ret = SCM_EOL, walk = base + nvalues - 1; walk >= base; walk--) + ret = scm_cons (*walk, ret); + + return scm_values (ret); +} + void scm_init_values (void) { diff --git a/libguile/values.h b/libguile/values.h index 5f79855be..f11c9d9de 100644 --- a/libguile/values.h +++ b/libguile/values.h @@ -3,7 +3,7 @@ #ifndef SCM_VALUES_H #define SCM_VALUES_H -/* Copyright (C) 2000,2001, 2006, 2008 Free Software Foundation, Inc. +/* Copyright (C) 2000,2001, 2006, 2008, 2012 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -33,6 +33,7 @@ SCM_API SCM 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_c_values (SCM *base, size_t nvalues); SCM_API SCM scm_c_value_ref (SCM values, size_t idx); SCM_INTERNAL void scm_init_values (void); -- 2.20.1