diff --git a/libguile/values.c b/libguile/values.c index 4fd9b5451..8603aa3f1 100644 --- a/libguile/values.c +++ b/libguile/values.c @@ -59,10 +59,16 @@ scm_c_nvalues (SCM obj) SCM scm_c_value_ref (SCM obj, size_t idx) { - if (SCM_LIKELY (scm_is_values (obj) && idx < scm_i_nvalues (obj))) - return scm_i_value_ref (obj, idx); - else if (idx == 0) - return obj; + if (scm_is_values (obj)) + { + if (idx < scm_i_nvalues (obj)) + return scm_i_value_ref (obj, idx); + } + else + { + if (idx == 0) + return obj; + } scm_error (scm_out_of_range_key, "scm_c_value_ref", diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index d08ebbb74..7305beebb 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -335,7 +335,7 @@ VM_NAME (scm_thread *thread) VM_ASSERT (nvals <= (UINTPTR_MAX >> 8), abort ()); ret = scm_words ((nvals << 8) | scm_tc7_values, nvals + 1); for (n = 0; n < nvals; n++) - SCM_SET_CELL_OBJECT (ret, n+1, FP_REF (4 + n - 1)); + SCM_SET_CELL_OBJECT (ret, n+1, FP_REF (4 + n)); } VP->ip = SCM_FRAME_RETURN_ADDRESS (VP->fp);