]> gitweb.factorcode.org Git - factor.git/blob - extra/fuel/fuel.factor
Merge branch 'master' into new_gc
[factor.git] / extra / fuel / fuel.factor
1 ! Copyright (C) 2008, 2009 Jose Antonio Ortega Ruiz.
2 ! See http://factorcode.org/license.txt for BSD license.
3
4 USING: accessors assocs compiler.units continuations fuel.eval fuel.help
5 fuel.remote fuel.xref help.topics io.pathnames kernel namespaces parser
6 sequences tools.scaffold vocabs.loader vocabs.parser words ;
7
8 IN: fuel
9
10 ! Evaluation
11
12 : fuel-eval-restartable ( -- )
13     t fuel-eval-res-flag set-global ; inline
14
15 : fuel-eval-non-restartable ( -- )
16     f fuel-eval-res-flag set-global ; inline
17
18 : fuel-eval-in-context ( lines in usings -- )
19     (fuel-eval-in-context) ;
20
21 : fuel-eval-set-result ( obj -- )
22     clone fuel-eval-result set-global ; inline
23
24 : fuel-retort ( -- ) fuel-send-retort ; inline
25
26 ! Loading files
27
28 <PRIVATE
29
30 SYMBOL: :uses
31 SYMBOL: :uses-suggestions
32
33 : is-use-restart ( restart -- ? )
34     name>> [ "Use the " head? ] [ " vocabulary" tail? ] bi and ;
35
36 : get-restart-vocab ( restart -- vocab/f )
37     obj>> dup word? [ vocabulary>> ] [ drop f ] if ;
38
39 : is-suggested-restart ( restart -- ? )
40     dup is-use-restart [
41         get-restart-vocab :uses-suggestions get member?
42     ] [ drop f ] if ;
43
44 : try-suggested-restarts ( -- )
45     restarts get [ is-suggested-restart ] filter
46     dup length 1 = [ first restart ] [ drop ] if ;
47
48 : fuel-set-use-hook ( -- )
49     [ manifest get auto-used>> clone :uses prefix fuel-eval-set-result ]
50     print-use-hook set ;
51
52 : (fuel-get-uses) ( lines -- )
53     [ parse-fresh drop ] curry with-compilation-unit ; inline
54
55 PRIVATE>
56
57 : fuel-use-suggested-vocabs ( suggestions quot -- ... )
58     [ :uses-suggestions set ] dip
59     [ try-suggested-restarts rethrow ] recover ; inline
60
61 : fuel-run-file ( path -- )
62     [ fuel-set-use-hook run-file ] curry with-scope ; inline
63
64 : fuel-with-autouse ( ... quot: ( ... -- ... ) -- ... )
65     [ auto-use? on fuel-set-use-hook call ] curry with-scope ; inline
66
67 : fuel-get-uses ( lines -- )
68     [ (fuel-get-uses) ] curry fuel-with-autouse ;
69
70 ! Edit locations
71
72 : fuel-get-word-location ( word -- )
73     word-location fuel-eval-set-result ;
74
75 : fuel-get-vocab-location ( vocab -- )
76     vocab-location fuel-eval-set-result ;
77
78 : fuel-get-doc-location ( word -- )
79     doc-location fuel-eval-set-result ;
80
81 : fuel-get-article-location ( name -- )
82     article-location fuel-eval-set-result ;
83
84 : fuel-get-vocabs ( -- )
85     get-vocabs fuel-eval-set-result ;
86
87 : fuel-get-vocabs/prefix ( prefix -- )
88     get-vocabs/prefix fuel-eval-set-result ;
89
90 : fuel-get-words ( prefix names -- )
91     get-vocabs-words/prefix fuel-eval-set-result ;
92
93 ! Cross-references
94
95 : fuel-callers-xref ( word -- ) callers-xref fuel-eval-set-result ;
96
97 : fuel-callees-xref ( word -- ) callees-xref fuel-eval-set-result ;
98
99 : fuel-apropos-xref ( str -- ) apropos-xref fuel-eval-set-result ;
100
101 : fuel-vocab-xref ( vocab -- ) vocab-xref fuel-eval-set-result ;
102
103 : fuel-vocab-uses-xref ( vocab -- ) vocab-uses-xref fuel-eval-set-result ;
104
105 : fuel-vocab-usage-xref ( vocab -- ) vocab-usage-xref fuel-eval-set-result ;
106
107 ! Help support
108
109 : fuel-get-article ( name -- ) article fuel-eval-set-result ;
110
111 : fuel-get-article-title ( name -- )
112     articles get at [ article-title ] [ f ] if* fuel-eval-set-result ;
113
114 : fuel-word-help ( name -- ) (fuel-word-help) fuel-eval-set-result ;
115
116 : fuel-word-see ( name -- ) (fuel-word-see) fuel-eval-set-result ;
117
118 : fuel-word-def ( name -- ) (fuel-word-def) fuel-eval-set-result ;
119
120 : fuel-vocab-help ( name -- ) (fuel-vocab-help) fuel-eval-set-result ;
121
122 : fuel-word-synopsis ( word usings -- ) (fuel-word-synopsis) fuel-eval-set-result ;
123
124 : fuel-vocab-summary ( name -- )
125     (fuel-vocab-summary) fuel-eval-set-result ;
126
127 : fuel-index ( quot -- ) call( -- seq ) format-index fuel-eval-set-result ;
128
129 : fuel-get-vocabs/tag ( tag -- )
130     (fuel-get-vocabs/tag) fuel-eval-set-result ;
131
132 : fuel-get-vocabs/author ( author -- )
133     (fuel-get-vocabs/author) fuel-eval-set-result ;
134
135 ! Scaffold support
136
137 : fuel-scaffold-name ( devname -- )
138     [ developer-name set ] when* ;
139
140 : fuel-scaffold-vocab ( root name devname -- )
141     [ fuel-scaffold-name dup [ scaffold-vocab ] dip ] with-scope
142     dup require vocab-source-path absolute-path fuel-eval-set-result ;
143
144 : fuel-scaffold-help ( name devname -- )
145     [ fuel-scaffold-name dup require dup scaffold-help ] with-scope
146     vocab-docs-path absolute-path fuel-eval-set-result ;
147
148 : fuel-scaffold-get-root ( name -- ) find-vocab-root fuel-eval-set-result ;
149
150 ! Remote connection
151
152 MAIN: fuel-start-remote-listener*