Fix the previous commit. Now also the simple loops are ensured to execute once if no for-clauses are given.
Instead of throwing a syntax-error...
This commit is contained in:
parent
685fe86f36
commit
d48ed19e43
1 changed files with 18 additions and 12 deletions
|
@ -441,33 +441,39 @@
|
|||
. body)))
|
||||
(intermediate-loop accvar ... step ...))))))))))
|
||||
|
||||
|
||||
(define-syntax forify
|
||||
(syntax-rules (%acc)
|
||||
((_ orig name () ((%acc . acc-rest) . argsrest) . body)
|
||||
(forify* orig name () ((:for ensure-once (up-from 0 1)) (%acc . acc-rest) . argsrest) . body))
|
||||
((_ . rest)
|
||||
(forify* . rest))))
|
||||
|
||||
(define-syntax forify*
|
||||
(syntax-rules (:for :acc :when :unless :break :final :subloop :let :let* %acc)
|
||||
((forify o n done-clauses () . body)
|
||||
((_ o n done-clauses () . body)
|
||||
(%loop o n done-clauses . body))
|
||||
((_ o n (s ...) ((:for c-rest ...) clauses ...) . body)
|
||||
(forify o n (s ... (:for c-rest ...)) (clauses ...) . body))
|
||||
(forify* o n (s ... (:for c-rest ...)) (clauses ...) . body))
|
||||
((_ o n (s ...) (:when expr clauses ...) . body)
|
||||
(forify o n (s ... :when expr) (clauses ...) . body))
|
||||
(forify* o n (s ... :when expr) (clauses ...) . body))
|
||||
((_ o n (s ...) (:unless expr clauses ...) . body)
|
||||
(forify o n (s ... :when expr) (clauses ...) . body))
|
||||
(forify* o n (s ... :when expr) (clauses ...) . body))
|
||||
((_ o n (s ...) (:break expr clauses ...) . body)
|
||||
(forify o n (s ... :break expr) (clauses ...) . body))
|
||||
(forify* o n (s ... :break expr) (clauses ...) . body))
|
||||
((_ o n (s ...) (:final expr clauses ...) . body)
|
||||
(forify o n (s ... :final expr) (clauses ...) . body))
|
||||
(forify* o n (s ... :final expr) (clauses ...) . body))
|
||||
((_ o n (s ...) (:subloop clauses ...) . body)
|
||||
(forify o n (s ... :subloop) (clauses ...) . body))
|
||||
(forify* o n (s ... :subloop) (clauses ...) . body))
|
||||
((_ o n (s ...) ((:let id id* ... expr) clauses ...) . body)
|
||||
(forify o n (s ... (:let id id* ... expr)) (clauses ...) . body))
|
||||
(forify* o n (s ... (:let id id* ... expr)) (clauses ...) . body))
|
||||
((_ o n (s ...) ((:let* id id* ... expr) clauses ...) . body)
|
||||
(forify o n (s ... (:let* id id* ... expr)) (clauses ...) . body))
|
||||
(forify* o n (s ... (:let* id id* ... expr)) (clauses ...) . body))
|
||||
((_ o n (s ...) ((%acc c-rest ...) clauses ...) . body)
|
||||
(forify o n (s ... (:acc c-rest ...)) (clauses ...) . body))
|
||||
(forify* o n (s ... (:acc c-rest ...)) (clauses ...) . body))
|
||||
((_ o n (s ...) ((:acc c-rest ...) clauses ...) . body)
|
||||
(syntax-error "Accumulating clauses are not allowed in simplified loop forms." o))
|
||||
((_ o n (s ...) ((id id* ... (iterator source ...)) clauses ...) . body)
|
||||
(forify o n (s ... (:for id id* ... (iterator source ...))) (clauses ...) . body))))
|
||||
(forify* o n (s ... (:for id id* ... (iterator source ...))) (clauses ...) . body))))
|
||||
|
||||
(define-syntax loop/list
|
||||
(syntax-rules ()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue