summaryrefslogtreecommitdiff
path: root/libguile/values.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2012-04-30 21:34:58 +0200
committerAndy Wingo <wingo@pobox.com>2012-04-30 21:34:58 +0200
commit4d497b629b73afda35ba409c3dcbfb665fe41dde (patch)
tree50c50532046f5573d4fcaf2af5047fe4c2d4b0c2 /libguile/values.c
parent4105f688e33e592534b809c048451d94db82681a (diff)
parent53bdfcf03418c4709127140d64f12ede970c174b (diff)
downloadguile-4d497b629b73afda35ba409c3dcbfb665fe41dde.tar.gz
Merge remote-tracking branch 'origin/stable-2.0'
Conflicts: libguile/vm-engine.c libguile/vm-i-system.c
Diffstat (limited to 'libguile/values.c')
-rw-r--r--libguile/values.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/libguile/values.c b/libguile/values.c
index fdd93599a..55577f291 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)
{