mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-08 05:00:17 +02:00
Give reified value objects a proper data type
* libguile/values.h (struct scm_values): New build-time definition. (scm_to_values): (scm_from_values): (scm_values_count): (scm_values_ref): New helpers. * libguile/vm.c: * libguile/values.c: * libguile/print.c: * libguile/numbers.c: * libguile/eval.c: Adapt all callers.
This commit is contained in:
parent
aa73d31ded
commit
224fb82a39
6 changed files with 83 additions and 55 deletions
|
@ -228,8 +228,9 @@ truncate_values (SCM x)
|
|||
return x;
|
||||
else
|
||||
{
|
||||
if (SCM_LIKELY (scm_i_nvalues (x) > 0))
|
||||
return scm_i_value_ref (x, 0);
|
||||
struct scm_values *values = scm_to_values (x);
|
||||
if (SCM_LIKELY (scm_values_count (values) > 0))
|
||||
return scm_values_ref (values, 0);
|
||||
else
|
||||
{
|
||||
scm_ithrow (scm_from_utf8_symbol ("vm-run"),
|
||||
|
@ -369,10 +370,11 @@ eval (SCM x, SCM env)
|
|||
v = scm_call_0 (producer);
|
||||
if (scm_is_values (v))
|
||||
{
|
||||
size_t i = scm_i_nvalues (v);
|
||||
struct scm_values *values = scm_to_values (v);
|
||||
size_t i = scm_values_count (values);
|
||||
args = SCM_EOL;
|
||||
while (i--)
|
||||
args = scm_cons (scm_i_value_ref (v, i), args);
|
||||
args = scm_cons (scm_values_ref (values, i), args);
|
||||
}
|
||||
else
|
||||
args = scm_list_1 (v);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue