1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: kernel sequences namespaces assocs graphs ;
6 ERROR: no-compilation-unit definition ;
8 SYMBOL: changed-definitions
10 : changed-definition ( defspec -- )
11 dup changed-definitions get
12 [ no-compilation-unit ] unless*
15 GENERIC: where ( defspec -- loc )
17 M: object where drop f ;
19 GENERIC: set-where ( loc defspec -- )
21 GENERIC: forget* ( defspec -- )
23 M: object forget* drop ;
25 SYMBOL: forgotten-definitions
27 : forgotten-definition ( defspec -- )
28 dup forgotten-definitions get
29 [ no-compilation-unit ] unless*
32 : forget ( defspec -- ) dup forgotten-definition forget* ;
34 : forget-all ( definitions -- ) [ forget ] each ;
36 GENERIC: synopsis* ( defspec -- )
38 GENERIC: definer ( defspec -- start end )
40 GENERIC: definition ( defspec -- seq )
44 GENERIC: uses ( defspec -- seq )
46 M: object uses drop f ;
48 : xref ( defspec -- ) dup uses crossref get add-vertex ;
50 : usage ( defspec -- seq ) crossref get at keys ;
52 GENERIC: irrelevant? ( defspec -- ? )
54 M: object irrelevant? drop f ;
56 GENERIC: smart-usage ( defspec -- seq )
58 M: f smart-usage drop \ f smart-usage ;
60 M: object smart-usage usage [ irrelevant? not ] filter ;
62 : unxref ( defspec -- )
63 dup uses crossref get remove-vertex ;
65 : delete-xref ( defspec -- )
66 dup unxref crossref get delete-at ;