summaryrefslogtreecommitdiff
path: root/guix/ui.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/ui.scm')
-rw-r--r--guix/ui.scm60
1 files changed, 23 insertions, 37 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index 05b3f5f84c..d3e01f846d 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -196,17 +196,11 @@ information, or #f if it could not be found."
(stack-ref stack 1) ;skip the 'throw' frame
last))))
-(cond-expand
- (guile-3
- (define-syntax-rule (without-compiler-optimizations exp)
- ;; Compile with the baseline compiler (-O1), which is much less expensive
- ;; than -O2.
- (parameterize (((@ (system base compile) default-optimization-level) 1))
- exp)))
- (else
- (define-syntax-rule (without-compiler-optimizations exp)
- ;; No easy way to turn off optimizations on Guile 2.2.
- exp)))
+(define-syntax-rule (without-compiler-optimizations exp)
+ ;; Compile with the baseline compiler (-O1), which is much less expensive
+ ;; than -O2.
+ (parameterize (((@ (system base compile) default-optimization-level) 1))
+ exp))
(define* (load* file user-module
#:key (on-error 'nothing-special))
@@ -674,22 +668,17 @@ or variants of @code{~a} in the same profile.")
or remove one of them from the profile.")
name1 name2)))))
-(cond-expand
- (guile-3
- ;; On Guile 3.0, in 'call-with-error-handling' we need to re-raise. To
- ;; preserve useful backtraces in case of unhandled errors, we want that to
- ;; happen before the stack has been unwound, hence 'guard*'.
- (define-syntax-rule (guard* (var clauses ...) exp ...)
- "This variant of SRFI-34 'guard' does not unwind the stack before
+;; On Guile 3.0, in 'call-with-error-handling' we need to re-raise. To
+;; preserve useful backtraces in case of unhandled errors, we want that to
+;; happen before the stack has been unwound, hence 'guard*'.
+(define-syntax-rule (guard* (var clauses ...) exp ...)
+ "This variant of SRFI-34 'guard' does not unwind the stack before
evaluating the tests and bodies of CLAUSES."
- (with-exception-handler
- (lambda (var)
- (cond clauses ... (else (raise var))))
- (lambda () exp ...)
- #:unwind? #f)))
- (else
- (define-syntax-rule (guard* (var clauses ...) exp ...)
- (guard (var clauses ...) exp ...))))
+ (with-exception-handler
+ (lambda (var)
+ (cond clauses ... (else (raise var))))
+ (lambda () exp ...)
+ #:unwind? #f))
(define (call-with-error-handling thunk)
"Call THUNK within a user-friendly error handler."
@@ -822,11 +811,13 @@ directories:~{ ~a~}~%")
;; Furthermore, use of 'guard*' ensures that the stack has not
;; been unwound when we re-raise, since that would otherwise show
;; useless backtraces.
- ((cond-expand
- (guile-3
- ((exception-predicate &exception-with-kind-and-args) c))
- (else #f))
- (raise c))
+ (((exception-predicate &exception-with-kind-and-args) c)
+ (if (eq? 'system-error (exception-kind c)) ;EPIPE & co.
+ (match (exception-args c)
+ ((proc format-string format-args . _)
+ (leave (G_ "~a: ~a~%") proc
+ (apply format #f format-string format-args))))
+ (raise c)))
((message-condition? c)
;; Normally '&message' error conditions have an i18n'd message.
@@ -836,12 +827,7 @@ directories:~{ ~a~}~%")
(when (fix-hint? c)
(display-hint (condition-fix-hint c)))
(exit 1)))
- ;; Catch EPIPE and the likes.
- (catch 'system-error
- thunk
- (lambda (key proc format-string format-args . rest)
- (leave (G_ "~a: ~a~%") proc
- (apply format #f format-string format-args))))))
+ (thunk)))
(define-syntax-rule (leave-on-EPIPE exp ...)
"Run EXP... in a context where EPIPE errors are caught and lead to 'exit'