From b0badd157101d4b6b184f06726b456a00171b801 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 9 Aug 2022 14:53:09 -0700 Subject: [PATCH] xmode: fix handling of HASH_CHAR and always rules --- basis/xmode/loader/syntax/syntax.factor | 6 +++--- basis/xmode/marker/marker.factor | 12 ++++++------ basis/xmode/rules/rules.factor | 8 +------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/basis/xmode/loader/syntax/syntax.factor b/basis/xmode/loader/syntax/syntax.factor index e626d230da..a26fa6be71 100644 --- a/basis/xmode/loader/syntax/syntax.factor +++ b/basis/xmode/loader/syntax/syntax.factor @@ -65,11 +65,11 @@ SYNTAX: RULE: ! XXX: check HASH_CHAR for full prefix, not just first character : char<< ( value object -- ) - [ ?first ] dip chars<< ; + '[ 1 head _ chars<< ] unless-empty ; : regexp-attr ( -- ) - { "HASH_CHAR" f char<< } , - { "HASH_CHARS" f chars<< } , ; + { "HASH_CHARS" f chars<< } , + { "HASH_CHAR" f char<< } , ; : match-type-attr ( -- ) { "MATCH_TYPE" string>match-type match-token<< } , ; diff --git a/basis/xmode/marker/marker.factor b/basis/xmode/marker/marker.factor index 4ecfa9b796..32fae3c324 100644 --- a/basis/xmode/marker/marker.factor +++ b/basis/xmode/marker/marker.factor @@ -102,7 +102,7 @@ M: regexp text-matches? : match-group-regexp ( regexp n -- skip-regexp match-regexp ) [ [ options>> options>string ] [ raw>> ] bi ] dip CHAR: ( pick nth-index cut CHAR: ) over index 1 + head - rot '[ H{ } [ _ ] cache ] bi@ ; + rot '[ _ H{ } [ ] 2cache ] bi@ ; : skip-first-match ( match regexp -- tailseq ) first-match [ seq>> ] [ to>> ] bi tail ; @@ -171,14 +171,14 @@ PRIVATE> DEFER: get-rules -: get-always-rules ( vector/f ruleset -- vector/f ) - f swap rules>> at ?push-all ; +: get-always-rules ( ruleset -- vector/f ) + f swap rules>> at ; -: get-char-rules ( vector/f char ruleset -- vector/f ) - [ ch>upper ] dip rules>> at ?push-all ; +: get-char-rules ( char ruleset -- vector/f ) + [ ch>upper ] dip rules>> at ; : get-rules ( char ruleset -- seq ) - [ f ] 2dip [ get-char-rules ] keep get-always-rules ; + [ get-char-rules ] [ get-always-rules ] bi [ append ] when* ; GENERIC: handle-rule-start ( match-count rule -- ) diff --git a/basis/xmode/rules/rules.factor b/basis/xmode/rules/rules.factor index 27171b794b..d68fd18af1 100644 --- a/basis/xmode/rules/rules.factor +++ b/basis/xmode/rules/rules.factor @@ -41,14 +41,8 @@ MEMO: standard-rule-set ( id -- ruleset ) [ [ { f } ] when-empty ] 2dip [ swapd push-at ] 2curry each ; -: ?push-all ( seq1 seq2 -- seq1+seq2 ) - [ - over [ [ V{ } like ] dip append! ] [ nip ] if - ] when* ; - : rule-set-no-word-sep* ( ruleset -- str ) - [ no-word-sep>> ] - [ keywords>> ] bi + [ no-word-sep>> ] [ keywords>> ] bi dup [ keyword-map-no-word-sep* ] when "_" 3append ; -- 2.34.1