summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2013-08-15 04:09:04 -0400
committerMark H Weaver <mhw@netris.org>2013-08-15 04:09:04 -0400
commit521c542199afa4f199746d5bbffc18a988cb30bc (patch)
treebe801b18b08edf4982a659be78eba68b2fd11f23
parentf499d6e31a8554b3191c80c0e8c25e274ee5671d (diff)
parent8d5d0425ce10dcf035fbf717852938291261bd7e (diff)
downloadguile-521c542199afa4f199746d5bbffc18a988cb30bc.tar.gz
Merge remote-tracking branch 'origin/stable-2.0'
-rw-r--r--doc/ref/api-compound.texi8
-rw-r--r--module/Makefile.am1
-rw-r--r--module/ice-9/match.scm4
-rw-r--r--module/ice-9/match.upstream.scm5
4 files changed, 11 insertions, 7 deletions
diff --git a/doc/ref/api-compound.texi b/doc/ref/api-compound.texi
index 699e7601c..1990d777d 100644
--- a/doc/ref/api-compound.texi
+++ b/doc/ref/api-compound.texi
@@ -459,8 +459,8 @@ list results if the last argument is not a proper list.
@end lisp
@code{append} doesn't modify the given lists, but the return may share
-structure with the final @var{obj}. @code{append!} modifies the
-given lists to form its return.
+structure with the final @var{obj}. @code{append!} is permitted, but
+not required, to modify the given lists to form its return.
For @code{scm_append} and @code{scm_append_x}, @var{lstlst} is a list
of the list operands @var{lst} @dots{} @var{obj}. That @var{lstlst}
@@ -474,8 +474,8 @@ itself is not modified or used in the return.
@deffnx {C Function} scm_reverse_x (lst, newtail)
Return a list comprising the elements of @var{lst}, in reverse order.
-@code{reverse} constructs a new list, @code{reverse!} modifies
-@var{lst} in constructing its return.
+@code{reverse} constructs a new list. @code{reverse!} is permitted, but
+not required, to modify @var{lst} in constructing its return.
For @code{reverse!}, the optional @var{newtail} is appended to the
result. @var{newtail} isn't reversed, it simply becomes the list
diff --git a/module/Makefile.am b/module/Makefile.am
index 6d3b31f2d..dc7d058da 100644
--- a/module/Makefile.am
+++ b/module/Makefile.am
@@ -36,6 +36,7 @@ VM_TARGETS := system/vm/assembler.go system/vm/disassembler.go
$(VM_TARGETS): $(top_builddir)/libguile/vm-operations.h
ice-9/boot-9.go: ice-9/boot-9.scm ice-9/quasisyntax.scm ice-9/r6rs-libraries.scm
+ice-9/match.go: ice-9/match.scm ice-9/match.upstream.scm
# We can compile these in any order, but it's fastest if we compile
# psyntax and boot-9 first, then the compiler itself, then the rest of
diff --git a/module/ice-9/match.scm b/module/ice-9/match.scm
index 7fd191a11..099afb53a 100644
--- a/module/ice-9/match.scm
+++ b/module/ice-9/match.scm
@@ -24,9 +24,9 @@
match-let*
match-letrec))
-(define (error _ msg)
+(define (error _ . args)
;; Error procedure for run-time "no matching pattern" errors.
- (throw 'match-error "match" msg))
+ (apply throw 'match-error "match" args))
;; Support for record matching.
diff --git a/module/ice-9/match.upstream.scm b/module/ice-9/match.upstream.scm
index 29f9dbe2e..4609883d2 100644
--- a/module/ice-9/match.upstream.scm
+++ b/module/ice-9/match.upstream.scm
@@ -284,7 +284,10 @@
(syntax-rules (=>)
;; no more clauses, the match failed
((match-next v g+s)
- (error 'match "no matching pattern"))
+ ;; Here we wrap error within a double set of parentheses, so that
+ ;; the call to 'error' won't be in tail position. This allows the
+ ;; backtrace to show the source location of the failing match form.
+ ((error 'match "no matching pattern" v)))
;; named failure continuation
((match-next v g+s (pat (=> failure) . body) . rest)
(let ((failure (lambda () (match-next v g+s . rest))))