- (when (not (utils:strassoc ,regex *inline-parsers*)) (push (list ,regex nil) *inline-parsers*))
- (setf (utils:strassoc ,regex *inline-parsers*)
- (list
- :checker (lambda (str) (cl-ppcre:scan ,regex str))
- :parser (lambda (str)
- (apply (function ,handler)
- (mapcar
- #'parse-inline
- (coerce (second (multiple-value-list (cl-ppcre:scan-to-strings ,regex str))) 'list)))))))))
+ (when (not (find ,regex *inline-parsers* :key #'car :test #'string=)) (push (list ,regex nil) *inline-parsers*))
+ (let
+ ((parser (find ,regex *inline-parsers* :key #'car :test #'string=)))
+ (setf
+ (cadr parser)
+ (list
+ :checker (lambda (str) (cl-ppcre:scan ,regex str))
+ :parser (lambda (str)
+ (apply (function ,handler)
+ (mapcar
+ #'parse-inline
+ (coerce (second (multiple-value-list (cl-ppcre:scan-to-strings ,regex str))) 'list))))))))))