summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-09-15 00:04:34 +0200
committerAndy Wingo <wingo@pobox.com>2008-09-15 00:04:34 +0200
commitef24c01bffb41a9855fe1aea36c4444742aba660 (patch)
treeeffab1206ed2d78ddfe0b046973662373fad7dd0 /libguile/vm-engine.c
parenta222b0fa91fe33461db1c7f8f4370ce6a5db588f (diff)
downloadguile-ef24c01bffb41a9855fe1aea36c4444742aba660.tar.gz
add special case for (apply values ...)
* libguile/vm-engine.c (vm_run): Move nvalues to the top level, to avoid (spurious, it seems) gcc warnings about it being used uninitialized. * libguile/vm-i-system.c (halt, return/values): Adapt to gcc silliness. Deindent some of return/values. (return/values*): New instruction, does what (apply values . args) would do. * module/language/scheme/translate.scm (custom-transformer-table): Move the apply and @apply cases here from inline.scm, because we need some more cleverness when dealing with cases like (apply values . args). (lookup-apply-transformer): Define an eval transformer for `values', turning it into ghil-values*. * module/system/il/compile.scm (codegen): Compile <ghil-values*> into return/values*. * module/system/il/ghil.scm: Add <ghil-values*> and accessors. (ghil-lookup): Add optional argument, define?, which if false tells us not to actually cache the binding if it is not found in the toplevel. * module/system/il/inline.scm: Remove apply clauses. * module/system/vm/frame.scm (bootstrap-frame?): Update heuristic for bootstrap-frame?, as the bootstrap frame is now 5 bytes since it accepts multiple values.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 14f444c58..48b6ae565 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -65,6 +65,7 @@ vm_run (SCM vm, SCM program, SCM args)
/* Internal variables */
int nargs = 0;
+ int nvalues = 0;
long start_time = scm_c_get_internal_run_time ();
// SCM dynwinds = SCM_EOL;
SCM err_msg;