diff options
author | Andy Wingo <wingo@pobox.com> | 2011-12-19 15:51:54 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-12-19 15:52:05 +0100 |
commit | 7cbadbc43d4a03c0fdd23dda54f4b3f887204e17 (patch) | |
tree | 4ba7db2a6995e6bc1545dcf83d885826ea3c95c5 /doc/ref/hierarchy.pdf | |
parent | fa8110f2412c260d69db10739357ea593eb9eefe (diff) | |
download | guile-7cbadbc43d4a03c0fdd23dda54f4b3f887204e17.tar.gz |
fix peval to preserve effects when folding (values) forms
* module/language/tree-il/peval.scm (singly-valued-expression?): New
helper.
(truncate-values): Use the helper.
(make-operand): Minor refactor.
(set-operand-residual-value!): Try to undo the effects of (values
FOO), if the continuation will check itself for the correct number of
values.
(peval): Fold helpers into fold-constant. Add a constant-expression?
case for (values FOO). Add a new context: "values", for contexts in
which multiple values are allowed, either because of being in a tail
context relative to a function, or because of let-values. "value" is
now for single values. Don't visit operands for "values", as their
binding form truncates to one value. Add a case to fold (values ...)
forms. Fix folding of (lambda), to process the cases in values
context instead of tail context (which could have been "value", which
would cause the procedure to truncate).
Diffstat (limited to 'doc/ref/hierarchy.pdf')
0 files changed, 0 insertions, 0 deletions