xmode: fix handling of HASH_CHAR and always rules
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 9 Aug 2022 21:53:09 +0000 (14:53 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 9 Aug 2022 21:53:55 +0000 (14:53 -0700)
basis/xmode/loader/syntax/syntax.factor
basis/xmode/marker/marker.factor
basis/xmode/rules/rules.factor

index e626d230da3a8600ecb6520c88fba9c9be2cd791..a26fa6be716a838462187d4f802edec2f64bd01e 100644 (file)
@@ -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<< } , ;
index 4ecfa9b7963cd0fbde4d8e869d8d2e5398f48c73..32fae3c3245f06b1b39eddd9a2e12a10fd6cf45a 100644 (file)
@@ -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{ } [ _ <optioned-regexp> ] cache ] bi@ ;
+    rot '[ _ H{ } [ <optioned-regexp> ] 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 -- )
 
index 27171b794b6dd033bacac068a5433fff6e0e7848..d68fd18af1be6ea0a2302b5c8d06c9c90d098454 100644 (file)
@@ -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 ;