]> gitweb.factorcode.org Git - factor.git/commitdiff
vocabs.parser: faster name lookup.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 14 Aug 2020 18:58:50 +0000 (11:58 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 14 Aug 2020 18:58:50 +0000 (11:58 -0700)
core/vocabs/parser/parser.factor

index 9cf97f2fd5eb400827c9c4ba5cfae7e10596b677..7993e10c21bdaf644a4d06bf6c68208b0531be61 100644 (file)
@@ -182,17 +182,24 @@ TUPLE: ambiguous-use-error name words ;
 
 <PRIVATE
 
+: (lookup-word) ( words name vocab -- words )
+    words>> (lookup) [ suffix! ] when* ; inline
+
 : (vocab-search) ( name assocs -- words )
-    [ words>> (lookup) ] with map sift ;
+    [ V{ } clone ] 2dip [ (lookup-word) ] with each ;
 
-: (vocab-search-qualified) ( name assocs -- words )
-    [ ":" split1 swap ] dip [ name>> = ] with filter (vocab-search) ;
+: (vocab-search-qualified) ( words name assocs -- words )
+    [ ":" split1 swap ] dip pick [
+        [ name>> = ] with find nip [ (lookup-word) ] with when*
+    ] [
+        3drop
+    ] if ;
 
 : (vocab-search-full) ( name assocs -- words )
-    [ (vocab-search-qualified) ] [ (vocab-search) ] 2bi append ;
+    [ (vocab-search) ] [ (vocab-search-qualified) ] 2bi ;
 
 : vocab-search ( name manifest -- word/f )
-    dupd search-vocabs>> sift (vocab-search-full) dup length {
+    dupd search-vocabs>> (vocab-search-full) dup length {
         { 0 [ 2drop f ] }
         { 1 [ first nip ] }
         [