diff options
author | Andy Wingo <wingo@pobox.com> | 2012-04-30 19:40:52 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2012-04-30 20:27:35 +0200 |
commit | c15defef7f1de408f35066d2f2883c110724b2f9 (patch) | |
tree | 9d4c4d81027bbc9083ee25c3aa9c1624b6733ab3 /libguile/values.c | |
parent | 4bd53c1ba39ba1c2d51ff895104f27cf4bb69e4e (diff) | |
download | guile-c15defef7f1de408f35066d2f2883c110724b2f9.tar.gz |
add scm_c_values helper
* libguile/values.h:
* libguile/values.c (scm_c_values): New public helper.
Diffstat (limited to 'libguile/values.c')
-rw-r--r-- | libguile/values.c | 20 |
1 files changed, 16 insertions, 4 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) { |