~ chicken-core (chicken-5) 8682c07b0ea629dc31f1aa1241c4fea6640d9e62
commit 8682c07b0ea629dc31f1aa1241c4fea6640d9e62 Author: Peter Bex <Peter.Bex@xs4all.nl> AuthorDate: Fri Sep 24 22:40:13 2010 +0200 Commit: Peter Bex <Peter.Bex@xs4all.nl> CommitDate: Fri Sep 24 22:40:13 2010 +0200 Apply upstream changeset a492229b349f (Get rid of some (now useless) complexity in the way SRE character set expressions were converted to csets) diff --git a/irregex-core.scm b/irregex-core.scm index 4e299496..6b2ae25a 100644 --- a/irregex-core.scm +++ b/irregex-core.scm @@ -2476,22 +2476,10 @@ (and next (lp (cdar ls) (new-state-number next) flags next)))) ((/ - & ~) - (let* ((ranges - (sre->cset (car ls) - (flag-set? flags ~case-insensitive?))) - (pl (cset->plist ranges))) - (case (length pl) ;; TODO could be expensive - ((2) - (extend-state! (lp (cdr ls) n flags next) - (range->cset (car pl) (cadr pl)))) - (else - (let ((next (lp (cdr ls) n flags next))) - (and - next - (lp (list (cset->sre ranges)) - (new-state-number next) - (flag-clear flags ~case-insensitive?) - next))))))) + (let ((range (sre->cset (car ls) + (flag-set? flags ~case-insensitive?)))) + (extend-state! (lp (cdr ls) n flags next) + range))) ((or) (let ((next (lp (cdr ls) n flags next))) (and @@ -2567,7 +2555,7 @@ ;; (sre-sequence (cdddar ls))))) ;; (cdr ls)) ;; n flags next)) - ;; ignore submatches altogether + ;; ignore submatches altogether (($ submatch) (lp (cons (sre-sequence (cdar ls)) (cdr ls)) n flags next)) ((=> submatch-named) @@ -2836,19 +2824,20 @@ (let* ((only-in-old (cset-difference (caar ls) elt)) (states-for-old (and (not (cset-empty? only-in-old)) (nfa-multi-state-copy (cdar ls)))) - (only-in-new (cset-difference elt (caar ls))) - (states-for-new (and (not (cset-empty? only-in-new)) - (nfa-multi-state-copy (cdar ls))))) + (result (if states-for-old + (cons (cons only-in-old states-for-old) + (append res (cdr ls))) + (append res (cdr ls)))) + (only-in-new (cset-difference elt (caar ls)))) ;; Add this state to the states already here and restrict to ;; the overlapping charset (set-car! (car ls) intersection) (set-cdr! (car ls) (nfa-multi-state-add! (cdar ls) state)) - ;; Continue with the remaining subset of the new cset that we got - (nfa-join-transitions! nfa (if states-for-old - (cons (cons only-in-old states-for-old) - existing) - existing) - only-in-new state)))) + ;; Continue with the remaining subset of the new cset (if nonempty) + (cons (car ls) + (if (cset-empty? only-in-new) + result + (nfa-join-transitions! nfa result only-in-new state)))))) (else (lp (cdr ls) (cons (car ls) res))))))Trap