1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: kernel sequences namespaces assocs graphs math math.order ;
6 ERROR: no-compilation-unit definition ;
8 SYMBOL: inlined-dependency
9 SYMBOL: flushed-dependency
10 SYMBOL: called-dependency
12 SYMBOL: changed-definitions
14 : changed-definition ( defspec -- )
15 inlined-dependency swap changed-definitions get
16 [ set-at ] [ no-compilation-unit ] if* ;
18 SYMBOL: changed-generics
20 : changed-generic ( class generic -- )
22 [ set-at ] [ no-compilation-unit ] if* ;
26 : new-class ( word -- )
28 [ set-at ] [ no-compilation-unit ] if* ;
30 : new-class? ( word -- ? )
31 new-classes get key? ;
33 GENERIC: where ( defspec -- loc )
35 M: object where drop f ;
37 GENERIC: set-where ( loc defspec -- )
39 GENERIC: forget* ( defspec -- )
41 M: object forget* drop ;
43 SYMBOL: forgotten-definitions
45 : forgotten-definition ( defspec -- )
46 dup forgotten-definitions get
47 [ no-compilation-unit ] unless*
50 : forget ( defspec -- ) dup forgotten-definition forget* ;
52 : forget-all ( definitions -- ) [ forget ] each ;
54 GENERIC: synopsis* ( defspec -- )
56 GENERIC: definer ( defspec -- start end )
58 GENERIC: definition ( defspec -- seq )
62 GENERIC: uses ( defspec -- seq )
64 M: object uses drop f ;
66 : xref ( defspec -- ) dup uses crossref get add-vertex ;
68 : usage ( defspec -- seq ) crossref get at keys ;
70 GENERIC: irrelevant? ( defspec -- ? )
72 M: object irrelevant? drop f ;
74 GENERIC: smart-usage ( defspec -- seq )
76 M: f smart-usage drop \ f smart-usage ;
78 M: object smart-usage usage [ irrelevant? not ] filter ;
80 : unxref ( defspec -- )
81 dup uses crossref get remove-vertex ;
83 : delete-xref ( defspec -- )
84 dup unxref crossref get delete-at ;