]> gitweb.factorcode.org Git - factor.git/commitdiff
vocabs.parser: use hash-sets in search-vocab-names.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 8 Mar 2013 18:09:41 +0000 (10:09 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 8 Mar 2013 18:09:41 +0000 (10:09 -0800)
core/vocabs/parser/parser.factor

index 83a1831eab87bc75840a6c4eff511425ac4cc80d..c1438b186408a2e884e13dcdeca985296673b45c 100644 (file)
@@ -2,8 +2,9 @@
 ! Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays assocs combinators compiler.units
-continuations hashtables kernel math namespaces parser.notes
-sequences sets sorting splitting vectors vocabs words ;
+continuations hash-sets hashtables kernel math namespaces
+parser.notes sequences sets sorting splitting vectors vocabs
+words ;
 IN: vocabs.parser
 
 ERROR: no-word-error name ;
@@ -22,14 +23,14 @@ ERROR: no-word-error name ;
 
 TUPLE: manifest
 current-vocab
-{ search-vocab-names hashtable }
+{ search-vocab-names hash-set }
 { search-vocabs vector }
 { qualified-vocabs vector }
 { auto-used vector } ;
 
 : <manifest> ( -- manifest )
     manifest new
-        H{ } clone >>search-vocab-names
+        HS{ } clone >>search-vocab-names
         V{ } clone >>search-vocabs
         V{ } clone >>qualified-vocabs
         V{ } clone >>auto-used ;
@@ -104,14 +105,14 @@ TUPLE: no-current-vocab-error ;
     [ set-current-vocab ] [ drop ] if ;
 
 : using-vocab? ( vocab -- ? )
-    vocab-name manifest get search-vocab-names>> key? ;
+    vocab-name manifest get search-vocab-names>> in? ;
 
 : use-vocab ( vocab -- )
     dup using-vocab?
     [ vocab-name "Already using ``" "'' vocabulary" surround note. ] [
         manifest get
         [ [ load-vocab ] dip search-vocabs>> push ]
-        [ [ vocab-name ] dip search-vocab-names>> conjoin ]
+        [ [ vocab-name ] dip search-vocab-names>> adjoin ]
         2bi
     ] if ;
 
@@ -124,7 +125,7 @@ TUPLE: no-current-vocab-error ;
     dup using-vocab? [
         manifest get
         [ [ load-vocab ] dip search-vocabs>> remove-eq! drop ]
-        [ [ vocab-name ] dip search-vocab-names>> delete-at ]
+        [ [ vocab-name ] dip search-vocab-names>> delete ]
         2bi
     ] [ drop ] if ;
 
@@ -222,8 +223,8 @@ M: vocab update dup name>> lookup-vocab eq? ;
 
 : update-manifest ( manifest -- )
     [ dup [ name>> lookup-vocab ] when ] change-current-vocab
-    [ [ drop lookup-vocab ] assoc-filter ] change-search-vocab-names
-    dup search-vocab-names>> keys [ lookup-vocab ] V{ } map-as >>search-vocabs
+    [ members [ lookup-vocab ] filter dup fast-set ] change-search-vocab-names
+    swap [ lookup-vocab ] V{ } map-as >>search-vocabs
     qualified-vocabs>> [ update ] filter! drop ;
 
 M: manifest definitions-changed ( assoc manifest -- )