]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.crossref: better code for getting dependencies-of + tests
authorBjörn Lindqvist <bjourne@gmail.com>
Sat, 26 Nov 2016 11:58:09 +0000 (12:58 +0100)
committerBjörn Lindqvist <bjourne@gmail.com>
Mon, 28 Nov 2016 01:04:28 +0000 (02:04 +0100)
basis/compiler/crossref/crossref-docs.factor
basis/compiler/crossref/crossref-tests.factor
basis/compiler/crossref/crossref.factor
core/generic/standard/standard-tests.factor

index 337c3734b2a899521d785900fbc9bdbbda6348b5..3eb9bcb96539f5db0d4b82e82e8cf946b568ca02 100644 (file)
@@ -1,6 +1,9 @@
 USING: assocs help.markup help.syntax words ;
 IN: compiler.crossref
 
+HELP: compiled-crossref
+{ $var-description "A hashtable that maps words to other words that depend on them. It also stores the types of the dependencies." } ;
+
 HELP: load-dependencies
 { $values { "word" word } { "assoc" assoc } }
 { $description "Creates an assoc where keys are the words the word depends on and values are the dependency type." } ;
index 18965d1bd758a4b92d9a24e2a4842ff90af15172..b3a3babce7367d7a549f48736831aaf20f34442e 100644 (file)
@@ -1,4 +1,5 @@
-USING: compiler.crossref fry kernel sequences tools.test vocabs words ;
+USING: compiler.crossref fry kernel namespaces sequences
+stack-checker.dependencies tools.test vocabs words ;
 IN: compiler.crossref.tests
 
 ! Dependencies of all words should always be satisfied unless we're
@@ -7,3 +8,46 @@ IN: compiler.crossref.tests
     all-words dup [ subwords ] map concat append
     H{ } clone '[ _ dependencies-satisfied? ] reject
 ] unit-test
+
+: setup-crossref ( -- assoc )
+    H{
+        {
+            10
+            H{
+                { 20 definition-dependency }
+                { 30 conditional-dependency }
+                { 40 effect-dependency }
+            }
+        }
+    } clone ;
+
+! dependencies-of
+{
+    H{ { 20 definition-dependency } }
+} [
+    setup-crossref compiled-crossref [
+        10 definition-dependency dependencies-of
+    ] with-variable
+] unit-test
+
+{
+    H{ { 20 definition-dependency } { 30 conditional-dependency } }
+} [
+    setup-crossref compiled-crossref [
+        10 conditional-dependency dependencies-of
+    ] with-variable
+] unit-test
+
+! join-dependencies
+{
+    H{
+        { 1 effect-dependency }
+        { 2 effect-dependency }
+        { 3 conditional-dependency }
+        { 4 conditional-dependency }
+        { 5 definition-dependency }
+        { 6 definition-dependency }
+    }
+} [
+    { 1 2 } { 3 4 } { 5 6 } join-dependencies
+] unit-test
index 09f092dbcd26426ff9ff799b13d59fc3f03676e8..92a0d669be647b6aa7c2fc07071b250f7a5d3080 100644 (file)
@@ -12,20 +12,17 @@ SYMBOL: generic-call-site-crossref
 
 generic-call-site-crossref [ H{ } clone ] initialize
 
-: effect-dependencies-of ( word -- assoc )
+: all-dependencies-of ( word -- assoc )
     compiled-crossref get at ;
 
-: definition-dependencies-of ( word -- assoc )
-    effect-dependencies-of [ nip definition-dependency dependency>= ] assoc-filter ;
-
-: conditional-dependencies-of ( word -- assoc )
-    effect-dependencies-of [ nip conditional-dependency dependency>= ] assoc-filter ;
+: dependencies-of ( word dep-type -- assoc )
+    [ all-dependencies-of ] dip '[ nip _ dependency>= ] assoc-filter ;
 
 : outdated-definition-usages ( set -- assocs )
-    members [ word? ] filter [ definition-dependencies-of ] map ;
+    members [ word? ] filter [ definition-dependency dependencies-of ] map ;
 
 : outdated-effect-usages ( set -- assocs )
-    members [ word? ] filter [ effect-dependencies-of ] map ;
+    members [ word? ] filter [ all-dependencies-of ] map ;
 
 : dependencies-satisfied? ( word cache -- ? )
     [ "dependency-checks" word-prop ] dip
@@ -33,7 +30,7 @@ generic-call-site-crossref [ H{ } clone ] initialize
 
 : outdated-conditional-usages ( set -- assocs )
     members H{ } clone '[
-        conditional-dependencies-of
+        conditional-dependency dependencies-of
         [ drop _ dependencies-satisfied? ] assoc-reject
     ] map ;
 
index f194ac1959339e1b30fb5fe6419415444f69af38..ac9f0efe09b69fe7902b4015dc068ba1984b44c7 100644 (file)
@@ -401,7 +401,7 @@ M: integer forget-test 3 + ;
 { } [ "IN: generic.standard.tests USE: math FORGET: M\\ integer forget-test" eval( -- ) ] unit-test
 
 { { } } [
-    \ + effect-dependencies-of keys [ method? ] filter
+    \ + all-dependencies-of keys [ method? ] filter
     [ "method-generic" word-prop \ forget-test eq? ] filter
 ] unit-test