! Copyright (C) 2009 Jose Antonio Ortega Ruiz.
! See http://factorcode.org/license.txt for BSD license.
-USING: fuel fuel.eval io.streams.string math namespaces random.data
-sequences tools.test ;
+USING: continuations fuel fuel.eval io.streams.string kernel math
+namespaces random.data sequences strings tools.test ;
IN: fuel.eval.tests
+! pop-restarts
+{ V{ "um" } } [
+ fuel-eval-non-restartable V{ } clone restarts set-global
+ V{ "um" } pop-restarts
+ restarts get-global
+ V{ } clone restarts set-global
+] unit-test
+
+! push-status
+{ 1 } [
+ V{ } clone [ status-stack set-global ] keep push-status
+ length
+ pop-status
+] unit-test
+
! Make sure prettyprint doesn't limit output.
{ t } [
- 1000 random-string fuel-eval-result set-global
- [ fuel-send-retort ] with-string-writer length 1000 >
+ 1000 random-string eval-result set-global
+ [ send-retort ] with-string-writer length 1000 >
+ f eval-result set-global
] unit-test
{
[
V{ "\"dup\"" "fuel-word-synopsis" } "scratchpad" V{ } fuel-eval-in-context
] with-string-writer
+ f eval-result set-global
] unit-test
USING: accessors arrays continuations debugger fuel.pprint io
io.streams.string kernel listener namespaces prettyprint.config sequences
vocabs.parser ;
-
IN: fuel.eval
-TUPLE: fuel-status manifest restarts ;
+TUPLE: status manifest restarts ;
-SYMBOL: fuel-status-stack
-V{ } clone fuel-status-stack set-global
+SYMBOL: status-stack
+V{ } clone status-stack set-global
-SYMBOL: fuel-eval-error
-f fuel-eval-error set-global
+SYMBOL: eval-error
+f eval-error set-global
-SYMBOL: fuel-eval-result
-f fuel-eval-result set-global
+SYMBOL: eval-result
+f eval-result set-global
-SYMBOL: fuel-eval-output
-f fuel-eval-result set-global
+SYMBOL: eval-output
+f eval-output set-global
-SYMBOL: fuel-eval-res-flag
-t fuel-eval-res-flag set-global
+SYMBOL: eval-res-flag
+t eval-res-flag set-global
-: fuel-eval-restartable? ( -- ? )
- fuel-eval-res-flag get-global ;
+: eval-restartable? ( -- ? )
+ eval-res-flag get-global ;
-: fuel-push-status ( -- )
- manifest get clone restarts get-global clone
- fuel-status boa
- fuel-status-stack get push ;
+: push-status ( -- )
+ manifest get clone restarts get-global clone status boa
+ status-stack get push ;
-: fuel-pop-restarts ( restarts -- )
- fuel-eval-restartable? [ drop ] [ clone restarts set-global ] if ;
+: pop-restarts ( restarts -- )
+ eval-restartable? [ drop ] [ clone restarts set-global ] if ;
-: fuel-pop-status ( -- )
- fuel-status-stack get [
+: pop-status ( -- )
+ status-stack get [
pop
[ manifest>> clone manifest set ]
- [ restarts>> fuel-pop-restarts ]
+ [ restarts>> pop-restarts ]
bi
] unless-empty ;
-: fuel-forget-error ( -- ) f fuel-eval-error set-global ;
-: fuel-forget-result ( -- ) f fuel-eval-result set-global ;
-: fuel-forget-output ( -- ) f fuel-eval-output set-global ;
-: fuel-forget-status ( -- )
- fuel-forget-error fuel-forget-result fuel-forget-output ;
+: forget-status ( -- )
+ f eval-error set-global
+ f eval-result set-global
+ f eval-output set-global ;
-: fuel-send-retort ( -- )
- fuel-eval-error get-global
- fuel-eval-result get-global
- fuel-eval-output get-global 3array
+: send-retort ( -- )
+ eval-error get-global
+ eval-result get-global
+ eval-output get-global 3array
[ fuel-pprint ] without-limits
flush nl "<~FUEL~>" write nl flush ;
-: (fuel-begin-eval) ( -- )
- fuel-push-status fuel-forget-status ;
+: begin-eval ( -- )
+ push-status forget-status ;
-: (fuel-end-eval) ( output -- )
- fuel-eval-output set-global fuel-send-retort fuel-pop-status ;
+: end-eval ( output -- )
+ eval-output set-global send-retort pop-status ;
-: (fuel-eval) ( lines -- )
+: eval ( lines -- )
[ parse-lines-interactive call( -- ) ] curry
- [ [ fuel-eval-error set-global ] [ print-error ] bi ] recover ;
+ [ [ eval-error set-global ] [ print-error ] bi ] recover ;
-: (fuel-eval-usings) ( usings -- )
+: eval-usings ( usings -- )
[ [ use-vocab ] curry [ drop ] recover ] each ;
-: (fuel-eval-in) ( in -- )
+: eval-in ( in -- )
[ set-current-vocab ] when* ;
-: (fuel-eval-in-context) ( lines in usings -- )
- (fuel-begin-eval)
- [ (fuel-eval-usings) (fuel-eval-in) (fuel-eval) ] with-string-writer
- (fuel-end-eval) ;
+: eval-in-context ( lines in usings -- )
+ begin-eval
+ [ eval-usings eval-in eval ] with-string-writer
+ end-eval ;
fuel.help fuel.xref help.topics io.pathnames kernel namespaces parser
sequences tools.scaffold vocabs vocabs.files vocabs.hierarchy
vocabs.loader vocabs.metadata vocabs.parser words ;
-
IN: fuel
! Evaluation
: fuel-eval-restartable ( -- )
- t fuel-eval-res-flag set-global ; inline
+ t eval-res-flag set-global ; inline
: fuel-eval-non-restartable ( -- )
- f fuel-eval-res-flag set-global ; inline
+ f eval-res-flag set-global ; inline
: fuel-eval-in-context ( lines in usings -- )
- (fuel-eval-in-context) ;
+ eval-in-context ;
: fuel-eval-set-result ( obj -- )
- clone fuel-eval-result set-global ; inline
+ clone eval-result set-global ; inline
-: fuel-retort ( -- ) fuel-send-retort ; inline
+: fuel-retort ( -- ) send-retort ; inline
! Loading files