]> gitweb.factorcode.org Git - factor.git/blob - core/definitions/definitions.factor
122205eb26f8682c5de355999cb17b5a38665789
[factor.git] / core / definitions / definitions.factor
1 ! Copyright (C) 2006, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 IN: definitions
4 USING: kernel sequences namespaces assocs graphs ;
5
6 ERROR: no-compilation-unit definition ;
7
8 SYMBOL: changed-definitions
9
10 : changed-definition ( defspec -- )
11     dup changed-definitions get
12     [ no-compilation-unit ] unless*
13     set-at ;
14
15 GENERIC: where ( defspec -- loc )
16
17 M: object where drop f ;
18
19 GENERIC: set-where ( loc defspec -- )
20
21 GENERIC: forget* ( defspec -- )
22
23 M: object forget* drop ;
24
25 SYMBOL: forgotten-definitions
26
27 : forgotten-definition ( defspec -- )
28     dup forgotten-definitions get
29     [ no-compilation-unit ] unless*
30     set-at ;
31
32 : forget ( defspec -- ) dup forgotten-definition forget* ;
33
34 : forget-all ( definitions -- ) [ forget ] each ;
35
36 GENERIC: synopsis* ( defspec -- )
37
38 GENERIC: definer ( defspec -- start end )
39
40 GENERIC: definition ( defspec -- seq )
41
42 SYMBOL: crossref
43
44 GENERIC: uses ( defspec -- seq )
45
46 M: object uses drop f ;
47
48 : xref ( defspec -- ) dup uses crossref get add-vertex ;
49
50 : usage ( defspec -- seq ) crossref get at keys ;
51
52 GENERIC: irrelevant? ( defspec -- ? )
53
54 M: object irrelevant? drop f ;
55
56 GENERIC: smart-usage ( defspec -- seq )
57
58 M: f smart-usage drop \ f smart-usage ;
59
60 M: object smart-usage usage [ irrelevant? not ] filter ;
61
62 : unxref ( defspec -- )
63     dup uses crossref get remove-vertex ;
64
65 : delete-xref ( defspec -- )
66     dup unxref crossref get delete-at ;