From 11db27b4994ddcc1073ceb2b69b73601e29ed164 Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Mon, 1 Oct 2012 17:20:20 +0100 Subject: Fix nested pipe expressions and run/sexps, adding tests for both --- scsh-process.scm | 24 +++++++++--------------- test/run.scm | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/scsh-process.scm b/scsh-process.scm index 9d92ac1..7d33f73 100644 --- a/scsh-process.scm +++ b/scsh-process.scm @@ -93,7 +93,7 @@ (define (run/sexp* thunk) (read (run/port* thunk))) (define (run/sexps* thunk) - (read-all (run/port* thunk))) + (read-file (run/port* thunk))) ;;;;;;;;;;;; ;; Syntax ;; @@ -194,27 +194,21 @@ ((_ ((?from0 ?from1 ___ ?to) ___) ?pf0 ___ ?last-pf) (let ((conns `((?from0 ?from1 ___ ?to) ___))) (setup-redirection ?redir0) ... - (begin (fork/pipe+ conns (lambda () (exec-epf (epf ?pf0)))) - ___ - (exec-epf (epf ?last-pf)))))))) + (begin (fork/pipe+ conns (lambda () (exec-epf (epf ?pf0)))) + ___ + (exec-epf (epf ?last-pf)))))))) (pipe+ ?args ...))) ((_ (begin ?expr0 ...)) (begin (setup-redirection (= 0 (current-input-port))) (setup-redirection (= 1 (current-output-port))) (setup-redirection (= 2 (current-error-port))) ?expr0 ...)) - ;; epf can be used if you happen to have a program called - ;; "epf", "begin", "pipe", etc which you'd like to run. - ((_ (epf ?args ...)) - (let-syntax ((exec-epf - (syntax-rules ___ () - ((_ (?prog ?arg0 ___) ?redir0 ___) - (begin - (setup-redirection ?redir0) ___ - (exec-path `?prog `?arg0 ___)))))) - (exec-epf ?args ...))) + ((_ (epf ?args ...)) ; TODO: Figure out the point of this + (exec-epf ?args ...)) ;; This is purely for convenience, so you don't need the (epf ...) wrapper ((_ (?prog ?arg0 ...) ?redir0 ...) - (exec-epf (epf (?prog ?arg0 ...) ?redir0 ...))))) + (begin + (setup-redirection ?redir0) ... + (exec-path `?prog `?arg0 ...))))) ) \ No newline at end of file diff --git a/test/run.scm b/test/run.scm index 1256845..d190c95 100644 --- a/test/run.scm +++ b/test/run.scm @@ -33,6 +33,20 @@ (test "Simple run/string" "hi, there\n" - (run/string (echo "hi, there")))) + (run/string (echo "hi, there"))) + + (test "Simple run/sexp" + '("hi, there") + (run/sexp (echo "(\"hi, there\")"))) + + (test "Simple run/sexps" + '(("hi, there") (a b c)) + (run/sexps (echo "(\"hi, there\") (a b c)"))) + + (test "Nested output redirection with pipe+" + "foo\n" + (run/string (pipe+ ((1 0)) + (pipe+ ((2 0)) (sh -c "echo foo >&2") (cat)) + (cat))))) (test-exit) \ No newline at end of file -- cgit v1.2.3