]> gitweb.factorcode.org Git - factor.git/blobdiff - core/vocabs/vocabs.factor
Add vocab: for vocab-relative paths
[factor.git] / core / vocabs / vocabs.factor
index fb9ce5467239a21e5d2672832bfc176e63846ce0..977eac2b35950846616337b3e498324813484a50 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2007, 2008 Eduardo Cavazos, Slava Pestov.
+! Copyright (C) 2007, 2009 Eduardo Cavazos, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors assocs strings kernel sorting namespaces
 sequences definitions ;
@@ -21,18 +21,26 @@ SYMBOL: +done+
         swap >>name
         H{ } clone >>words ;
 
-GENERIC: vocab-name ( vocab-spec -- name )
+TUPLE: vocab-link name ;
 
-GENERIC: vocab ( vocab-spec -- vocab )
+C: <vocab-link> vocab-link
 
-M: vocab vocab ;
+UNION: vocab-spec vocab vocab-link ;
 
-M: object vocab ( name -- vocab ) vocab-name dictionary get at ;
+GENERIC: vocab-name ( vocab-spec -- name )
 
 M: vocab vocab-name name>> ;
 
+M: vocab-link vocab-name name>> ;
+
 M: string vocab-name ;
 
+GENERIC: vocab ( vocab-spec -- vocab )
+
+M: vocab vocab ;
+
+M: object vocab ( name -- vocab ) vocab-name dictionary get at ;
+
 GENERIC: vocab-words ( vocab-spec -- words )
 
 M: vocab vocab-words words>> ;
@@ -62,11 +70,6 @@ M: f vocab-main ;
 
 ERROR: no-vocab name ;
 
-SYMBOL: load-vocab-hook ! ( name -- )
-
-: load-vocab ( name -- vocab )
-    dup load-vocab-hook get call vocab ;
-
 : vocabs ( -- seq )
     dictionary get keys natural-sort ;
 
@@ -88,17 +91,6 @@ SYMBOL: load-vocab-hook ! ( name -- )
 : child-vocabs ( vocab -- seq )
     vocab-name vocabs [ child-vocab? ] with filter ;
 
-TUPLE: vocab-link name ;
-
-: <vocab-link> ( name -- vocab-link )
-    vocab-link boa ;
-
-M: vocab-link hashcode* name>> hashcode* ;
-
-M: vocab-link vocab-name name>> ;
-
-UNION: vocab-spec vocab vocab-link ;
-
 GENERIC: >vocab-link ( name -- vocab )
 
 M: vocab-spec >vocab-link ;
@@ -110,3 +102,7 @@ M: string >vocab-link dup vocab [ ] [ <vocab-link> ] ?if ;
     vocab-name dictionary get delete-at ;
 
 M: vocab-spec forget* forget-vocab ;
+
+SYMBOL: load-vocab-hook ! ( name -- vocab )
+
+: load-vocab ( name -- vocab ) load-vocab-hook get call ;
\ No newline at end of file