Peter Bex avatar Peter Bex committed 43bde48

Implement scheme begin forms, filedescriptor dup()ing and use print-error-message to print the error message, then exit

Comments (0)

Files changed (1)

                      (handle-exceptions exn
                        ;; TODO: Figure out how SCSH does this.  It shows the error
                        ;; on stderr in the REPL, but then still quits it.
-                       (begin ((##sys#error-handler) exn) (exit 1))
+                       ;; If we just invoke current-handler, it'll get a second REPL
+                       (begin (print-error-message exn) (exit 1))
                        (exec-epf ?epf ...)))))))
 (define-syntax run
     ((_ (<< ?fd ?object)) (error "<< currently not implemented"))
     ((_ (>> ?fd ?object)) (error ">> currently not implemented"))
+    ((_ (= ?fd-from ?fd/port-to))
+     (let* ((fd/port-to ?fd/port-to)    ; Evaluate once
+            (fd-to (if (port? fd/port-to)
+                       (port->fileno fd/port-to)
+                       fd/port-to)))
+       (duplicate-fileno ?fd-from fd-to)))
     ((_ (- ?fd/port))
      (let ((o `?fd/port))
 ;; The most "core" syntax form
 (define-syntax exec-epf
-  (syntax-rules ()
+  (syntax-rules (begin)
+    ((_ (begin ?expr0 ...))
+     (begin (setup-redirection (= 0 (current-input-port)))
+            (setup-redirection (= 1 (current-output-port)))
+            (setup-redirection (= 2 (current-error-port)))
+            ?expr0 ...))
     ((_ (?prog ?arg0 ...) ?redir0 ...)
        (setup-redirection ?redir0) ...
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.