diff --git a/forge/forge.lisp b/forge/forge.lisp index 48281a0..58efe37 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -9,7 +9,8 @@ (:export #:forge-env #:vocabulary #:stack #:current-package #:*forge-env* #:*input* #:*code* #:word #:comp-word - #:repl #:exec-list #:exec-string #:exec-input #:comp-input #:call + #:repl #:exec-list #:exec-string #:exec-stream + #:exec-input #:comp-input #:call #:comp-item #:next #:reg #:reg1 #:reg2 #:reg-code #:pushd #:popd #:peekd)) @@ -94,6 +95,10 @@ (let ((*input* (iter:string-iterator s))) (exec-input))) +(defun exec-stream (s) + (let ((*input* (iter:stream-iterator s))) + (exec-input))) + (defun exec-input () (iter:process *input* #'exec-item)) diff --git a/test/test-forge.lisp b/test/test-forge.lisp index 9555df5..98d1e44 100644 --- a/test/test-forge.lisp +++ b/test/test-forge.lisp @@ -31,7 +31,9 @@ (forge:exec-list '(7 square)) (== (forge:popd) 49) (forge:exec-string "8 square") - (== (forge:popd) 64)) + (== (forge:popd) 64) + (forge:exec-stream (make-string-input-stream "12 square")) + (== (forge:popd) 144)) (deftest test-def () (forge:exec-list '( in