Skip to content

Commit

Permalink
Merge pull request #45 from fukamachi/fix/multiple-requirements
Browse files Browse the repository at this point in the history
Fix duplicated params on multiple requirements
  • Loading branch information
fukamachi committed Sep 8, 2023
2 parents 6c20e12 + 2d66c83 commit d988067
Showing 1 changed file with 18 additions and 12 deletions.
30 changes: 18 additions & 12 deletions route.lisp
Expand Up @@ -39,16 +39,22 @@
(append requirement-params params))))))

(defun compile-requirements (map requirements)
(let* ((params '())
(compiled (loop for (name val) on requirements by #'cddr
for fn = (gethash name map)
if fn
collect (lambda ()
(multiple-value-bind (satisfied res)
(funcall fn val)
(when satisfied
(setf params (append (list name res) params)))))
else
do (error "Requirement ~S is not defined." name))))
(let ((compiled (loop for (name val) on requirements by #'cddr
for fn = (gethash name map)
if fn
collect (lambda ()
(multiple-value-bind (satisfied res)
(funcall fn val)
(and satisfied
(list name res))))
else
do (error "Requirement ~S is not defined." name))))
(lambda ()
(values (every #'funcall compiled) params))))
(loop for fn in compiled
for result = (funcall fn)
if result
append result into params
else
do (return nil)
finally
(return (values t params))))))

0 comments on commit d988067

Please sign in to comment.