]> gitweb.factorcode.org Git - factor.git/blob - extra/fuel/eval/eval.factor
fuel.eval: re-use listener:parse-lines-interactive.
[factor.git] / extra / fuel / eval / eval.factor
1 ! Copyright (C) 2009 Jose Antonio Ortega Ruiz.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays continuations debugger fuel.pprint io
4 io.streams.string kernel listener namespaces sequences
5 vocabs.parser ;
6
7 IN: fuel.eval
8
9 TUPLE: fuel-status manifest restarts ;
10
11 SYMBOL: fuel-status-stack
12 V{ } clone fuel-status-stack set-global
13
14 SYMBOL: fuel-eval-error
15 f fuel-eval-error set-global
16
17 SYMBOL: fuel-eval-result
18 f fuel-eval-result set-global
19
20 SYMBOL: fuel-eval-output
21 f fuel-eval-result set-global
22
23 SYMBOL: fuel-eval-res-flag
24 t fuel-eval-res-flag set-global
25
26 : fuel-eval-restartable? ( -- ? )
27     fuel-eval-res-flag get-global ;
28
29 : fuel-push-status ( -- )
30     manifest get clone restarts get-global clone
31     fuel-status boa
32     fuel-status-stack get push ;
33
34 : fuel-pop-restarts ( restarts -- )
35     fuel-eval-restartable? [ drop ] [ clone restarts set-global ] if ;
36
37 : fuel-pop-status ( -- )
38     fuel-status-stack get [
39         pop
40         [ manifest>> clone manifest set ]
41         [ restarts>> fuel-pop-restarts ]
42         bi
43     ] unless-empty ;
44
45 : fuel-forget-error ( -- ) f fuel-eval-error set-global ;
46 : fuel-forget-result ( -- ) f fuel-eval-result set-global ;
47 : fuel-forget-output ( -- ) f fuel-eval-output set-global ;
48 : fuel-forget-status ( -- )
49     fuel-forget-error fuel-forget-result fuel-forget-output ;
50
51 : fuel-send-retort ( -- )
52     fuel-eval-error get-global
53     fuel-eval-result get-global
54     fuel-eval-output get-global 3array
55     fuel-pprint flush nl "<~FUEL~>" write nl flush ;
56
57 : (fuel-begin-eval) ( -- )
58     fuel-push-status fuel-forget-status ;
59
60 : (fuel-end-eval) ( output -- )
61     fuel-eval-output set-global fuel-send-retort fuel-pop-status ;
62
63 : (fuel-eval) ( lines -- )
64     [ parse-lines-interactive call( -- ) ] curry
65     [ [ fuel-eval-error set-global ] [ print-error ] bi ] recover ;
66
67 : (fuel-eval-usings) ( usings -- )
68     [ [ use-vocab ] curry [ drop ] recover ] each ;
69
70 : (fuel-eval-in) ( in -- )
71     [ set-current-vocab ] when* ;
72
73 : (fuel-eval-in-context) ( lines in usings -- )
74     (fuel-begin-eval)
75     [ (fuel-eval-usings) (fuel-eval-in) (fuel-eval) ] with-string-writer
76     (fuel-end-eval) ;