1
Fork 0
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:
Andy Wingo 2025-05-30 09:57:08 +02:00
parent aa73d31ded
commit 224fb82a39
6 changed files with 83 additions and 55 deletions

View file

@ -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);