mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 13:30:26 +02:00
peg: cleanups
* module/ice-9/peg.scm (until): Rename from until-works, and be functional (and faster). (peg-match): Adapt.
This commit is contained in:
parent
0d2f21fc81
commit
3c8963de27
1 changed files with 10 additions and 14 deletions
|
@ -45,15 +45,12 @@
|
|||
|
||||
;; Perform ACTION. If it succeeded, return its return value. If it failed, run
|
||||
;; IF_FAILS and try again
|
||||
(define-syntax until-works
|
||||
(lambda (x)
|
||||
(syntax-case x ()
|
||||
((_ action if-fails)
|
||||
#'(let ((retval action))
|
||||
(while (not retval)
|
||||
if-fails
|
||||
(set! retval action))
|
||||
retval)))))
|
||||
(define-syntax until
|
||||
(syntax-rules ()
|
||||
((_ test stmt stmt* ...)
|
||||
(let lp ()
|
||||
(or action
|
||||
(begin stmt stmt* (lp)))))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;; GENERIC LIST-PROCESSING MACROS
|
||||
|
@ -427,8 +424,7 @@
|
|||
#`(let ((string (string-copy string-uncopied))
|
||||
(strlen (string-length string-uncopied))
|
||||
(at 0))
|
||||
(let ((ret ((@@ (ice-9 peg) until-works)
|
||||
(or (>= at strlen)
|
||||
(let ((ret (until (or (>= at strlen)
|
||||
(#,peg-sexp-compile
|
||||
string strlen at))
|
||||
(set! at (+ at 1)))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue