mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-06 23:50:18 +02:00
Moved up the eval-case section.
This commit is contained in:
parent
c4d0cddd4c
commit
a54e6fa326
1 changed files with 34 additions and 34 deletions
|
@ -1954,6 +1954,40 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; {EVAL-CASE}
|
||||||
|
;;
|
||||||
|
;; (eval-case ((situation*) forms)* (else forms)?)
|
||||||
|
;;
|
||||||
|
;; Evaluate certain code based on the situation that eval-case is used
|
||||||
|
;; in. The only defined situation right now is `load-toplevel' which
|
||||||
|
;; triggers for code evaluated at the top-level, for example from the
|
||||||
|
;; REPL or when loading a file.
|
||||||
|
|
||||||
|
(define eval-case
|
||||||
|
(procedure->memoizing-macro
|
||||||
|
(lambda (exp env)
|
||||||
|
(define (toplevel-env? env)
|
||||||
|
(or (not (pair? env)) (not (pair? (car env)))))
|
||||||
|
(define (syntax)
|
||||||
|
(error "syntax error in eval-case"))
|
||||||
|
(let loop ((clauses (cdr exp)))
|
||||||
|
(cond
|
||||||
|
((null? clauses)
|
||||||
|
#f)
|
||||||
|
((not (list? (car clauses)))
|
||||||
|
(syntax))
|
||||||
|
((eq? 'else (caar clauses))
|
||||||
|
(or (null? (cdr clauses))
|
||||||
|
(syntax))
|
||||||
|
(cons 'begin (cdar clauses)))
|
||||||
|
((not (list? (caar clauses)))
|
||||||
|
(syntax))
|
||||||
|
((and (toplevel-env? env)
|
||||||
|
(memq 'load-toplevel (caar clauses)))
|
||||||
|
(cons 'begin (cdar clauses)))
|
||||||
|
(else
|
||||||
|
(loop (cdr clauses))))))))
|
||||||
|
|
||||||
|
|
||||||
;;; {Macros}
|
;;; {Macros}
|
||||||
|
@ -2537,40 +2571,6 @@
|
||||||
`(lambda ,(cdr first) ,@rest))))
|
`(lambda ,(cdr first) ,@rest))))
|
||||||
`(define ,name (defmacro:syntax-transformer ,transformer))))
|
`(define ,name (defmacro:syntax-transformer ,transformer))))
|
||||||
|
|
||||||
;; EVAL-CASE
|
|
||||||
;;
|
|
||||||
;; (eval-case ((situation*) forms)* (else forms)?)
|
|
||||||
;;
|
|
||||||
;; Evaluate certain code based on the situation that eval-case is used
|
|
||||||
;; in. The only defined situation right now is `load-toplevel' which
|
|
||||||
;; triggers for code evaluated at the top-level, for example from the
|
|
||||||
;; REPL or when loading a file.
|
|
||||||
|
|
||||||
(define eval-case
|
|
||||||
(procedure->memoizing-macro
|
|
||||||
(lambda (exp env)
|
|
||||||
(define (toplevel-env? env)
|
|
||||||
(or (not (pair? env)) (not (pair? (car env)))))
|
|
||||||
(define (syntax)
|
|
||||||
(error "syntax error in eval-case"))
|
|
||||||
(let loop ((clauses (cdr exp)))
|
|
||||||
(cond
|
|
||||||
((null? clauses)
|
|
||||||
#f)
|
|
||||||
((not (list? (car clauses)))
|
|
||||||
(syntax))
|
|
||||||
((eq? 'else (caar clauses))
|
|
||||||
(or (null? (cdr clauses))
|
|
||||||
(syntax))
|
|
||||||
(cons 'begin (cdar clauses)))
|
|
||||||
((not (list? (caar clauses)))
|
|
||||||
(syntax))
|
|
||||||
((and (toplevel-env? env)
|
|
||||||
(memq 'load-toplevel (caar clauses)))
|
|
||||||
(cons 'begin (cdar clauses)))
|
|
||||||
(else
|
|
||||||
(loop (cdr clauses))))))))
|
|
||||||
|
|
||||||
|
|
||||||
;;; {Module System Macros}
|
;;; {Module System Macros}
|
||||||
;;;
|
;;;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue