mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 05:39:18 +02:00
More error checking on some SRE syntax
When char-set, w/case, w/nocase, w/ascii or w/unicode is applied on a <cset-sre>, only (cadr sre) is taken, the rest is ignored. Which is the right thing to do only if (null? (cddr sre)). If there are more arguments, error out instead of silently ignoring them.
This commit is contained in:
parent
b3831c3995
commit
829d963a9d
1 changed files with 15 additions and 5 deletions
|
@ -676,7 +676,9 @@
|
|||
(if (string? (car sre))
|
||||
(maybe-ci (string->char-set (car sre)))
|
||||
(case (car sre)
|
||||
((char-set) (maybe-ci (string->char-set (cadr sre))))
|
||||
((char-set) (if (null? (cddr sre))
|
||||
(maybe-ci (string->char-set (cadr sre)))
|
||||
(error "(char-set) takes only one char-set" sre)))
|
||||
((/ char-range)
|
||||
(->cs
|
||||
`(or ,@(map (lambda (x)
|
||||
|
@ -689,10 +691,18 @@
|
|||
((~ complement) (char-set-complement (->cs `(or ,@(cdr sre)))))
|
||||
((- difference) (char-set-difference (->cs (cadr sre))
|
||||
(->cs `(or ,@(cddr sre)))))
|
||||
((w/case) (sre->char-set (cadr sre) (flag-clear flags ~ci?)))
|
||||
((w/nocase) (sre->char-set (cadr sre) (flag-join flags ~ci?)))
|
||||
((w/ascii) (sre->char-set (cadr sre) (flag-join flags ~ascii?)))
|
||||
((w/unicode) (sre->char-set (cadr sre) (flag-clear flags ~ascii?)))
|
||||
((w/case) (if (null? (cddr sre))
|
||||
(sre->char-set (cadr sre) (flag-clear flags ~ci?))
|
||||
(error "w/case takes only one char-set" sre)))
|
||||
((w/nocase) (if (null? (cddr sre))
|
||||
(sre->char-set (cadr sre) (flag-join flags ~ci?))
|
||||
(error "w/nocase takes only one char-set" sre)))
|
||||
((w/ascii) (if (null? (cddr sre))
|
||||
(sre->char-set (cadr sre) (flag-join flags ~ascii?))
|
||||
(error "w/ascii takes only one char-set" sre)))
|
||||
((w/unicode) (if (null? (cddr sre))
|
||||
(sre->char-set (cadr sre) (flag-clear flags ~ascii?))
|
||||
(error "w/unicode takes only one char-set" sre)))
|
||||
(else (error "invalid sre char-set" sre)))))
|
||||
(else (error "invalid sre char-set" sre)))))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue