- (or (car (memq symbol params)) ; It's either a simple symbol
- (cdr (assq symbol params)))) ; or a cons.
+ ;; We only wish to return group parameters (dotted lists) and
+ ;; not local variables, which may have the same names.
+ ;; But first we handle single elements...
+ (or (car (memq symbol params))
+ ;; Handle alist.
+ (let (elem)
+ (catch 'found
+ (while (setq elem (pop params))
+ (when (and (consp elem)
+ (eq (car elem) symbol)
+ (or allow-list
+ (atom (cdr elem))))
+ (throw 'found (cdr elem))))))))