2009-01-11 18:52:31 -05:00
|
|
|
! Copyright (C) 2009 Jose Antonio Ortega Ruiz.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2014-05-23 14:12:30 -04:00
|
|
|
USING: accessors arrays continuations debugger fuel.pprint io
|
2014-10-10 13:45:13 -04:00
|
|
|
io.streams.string kernel listener namespaces prettyprint.config sequences
|
2014-05-23 14:12:30 -04:00
|
|
|
vocabs.parser ;
|
2009-01-11 18:52:31 -05:00
|
|
|
IN: fuel.eval
|
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
TUPLE: status manifest restarts ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
SYMBOL: status-stack
|
|
|
|
V{ } clone status-stack set-global
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
SYMBOL: eval-error
|
|
|
|
f eval-error set-global
|
2011-09-18 23:19:49 -04:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
SYMBOL: eval-result
|
|
|
|
f eval-result set-global
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
SYMBOL: eval-output
|
|
|
|
f eval-output set-global
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
SYMBOL: eval-res-flag
|
|
|
|
t eval-res-flag set-global
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: eval-restartable? ( -- ? )
|
|
|
|
eval-res-flag get-global ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: push-status ( -- )
|
|
|
|
manifest get clone restarts get-global clone status boa
|
|
|
|
status-stack get push ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: pop-restarts ( restarts -- )
|
|
|
|
eval-restartable? [ drop ] [ clone restarts set-global ] if ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: pop-status ( -- )
|
|
|
|
status-stack get [
|
2011-09-18 23:35:16 -04:00
|
|
|
pop
|
2009-05-15 00:23:06 -04:00
|
|
|
[ manifest>> clone manifest set ]
|
2017-01-08 07:18:50 -05:00
|
|
|
[ restarts>> pop-restarts ]
|
2009-05-15 00:23:06 -04:00
|
|
|
bi
|
2011-09-18 23:35:16 -04:00
|
|
|
] unless-empty ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: forget-status ( -- )
|
|
|
|
f eval-error set-global
|
|
|
|
f eval-result set-global
|
|
|
|
f eval-output set-global ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: send-retort ( -- )
|
|
|
|
eval-error get-global
|
|
|
|
eval-result get-global
|
|
|
|
eval-output get-global 3array
|
2014-10-10 13:45:13 -04:00
|
|
|
[ fuel-pprint ] without-limits
|
|
|
|
flush nl "<~FUEL~>" write nl flush ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: begin-eval ( -- )
|
|
|
|
push-status forget-status ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: end-eval ( output -- )
|
|
|
|
eval-output set-global send-retort pop-status ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: eval ( lines -- )
|
2014-05-23 14:12:30 -04:00
|
|
|
[ parse-lines-interactive call( -- ) ] curry
|
2017-01-08 07:18:50 -05:00
|
|
|
[ [ eval-error set-global ] [ print-error ] bi ] recover ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: eval-usings ( usings -- )
|
2011-09-18 23:35:16 -04:00
|
|
|
[ [ use-vocab ] curry [ drop ] recover ] each ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: eval-in ( in -- )
|
2009-05-15 00:23:06 -04:00
|
|
|
[ set-current-vocab ] when* ;
|
2009-01-11 18:52:31 -05:00
|
|
|
|
2017-01-08 07:18:50 -05:00
|
|
|
: eval-in-context ( lines in usings -- )
|
|
|
|
begin-eval
|
|
|
|
[ eval-usings eval-in eval ] with-string-writer
|
|
|
|
end-eval ;
|