]> gitweb.factorcode.org Git - factor.git/blob - core/definitions/definitions.factor
2b8646fda442795994ba6ef604864a2bcec4b02f
[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 math math.order ;
5
6 ERROR: no-compilation-unit definition ;
7
8 SYMBOL: inlined-dependency
9 SYMBOL: flushed-dependency
10 SYMBOL: called-dependency
11
12 SYMBOL: changed-definitions
13
14 : changed-definition ( defspec -- )
15     inlined-dependency swap changed-definitions get
16     [ set-at ] [ no-compilation-unit ] if* ;
17
18 SYMBOL: changed-generics
19
20 : changed-generic ( class generic -- )
21     changed-generics get
22     [ set-at ] [ no-compilation-unit ] if* ;
23
24 SYMBOL: new-classes
25
26 : new-class ( word -- )
27     dup new-classes get
28     [ set-at ] [ no-compilation-unit ] if* ;
29
30 : new-class? ( word -- ? )
31     new-classes get key? ;
32
33 GENERIC: where ( defspec -- loc )
34
35 M: object where drop f ;
36
37 GENERIC: set-where ( loc defspec -- )
38
39 GENERIC: forget* ( defspec -- )
40
41 M: object forget* drop ;
42
43 SYMBOL: forgotten-definitions
44
45 : forgotten-definition ( defspec -- )
46     dup forgotten-definitions get
47     [ no-compilation-unit ] unless*
48     set-at ;
49
50 : forget ( defspec -- ) dup forgotten-definition forget* ;
51
52 : forget-all ( definitions -- ) [ forget ] each ;
53
54 GENERIC: synopsis* ( defspec -- )
55
56 GENERIC: definer ( defspec -- start end )
57
58 GENERIC: definition ( defspec -- seq )
59
60 SYMBOL: crossref
61
62 GENERIC: uses ( defspec -- seq )
63
64 M: object uses drop f ;
65
66 : xref ( defspec -- ) dup uses crossref get add-vertex ;
67
68 : usage ( defspec -- seq ) crossref get at keys ;
69
70 GENERIC: irrelevant? ( defspec -- ? )
71
72 M: object irrelevant? drop f ;
73
74 GENERIC: smart-usage ( defspec -- seq )
75
76 M: f smart-usage drop \ f smart-usage ;
77
78 M: object smart-usage usage [ irrelevant? not ] filter ;
79
80 : unxref ( defspec -- )
81     dup uses crossref get remove-vertex ;
82
83 : delete-xref ( defspec -- )
84     dup unxref crossref get delete-at ;