From bebacfb985d8e2fdf8938051f30728588e1e4cd9 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 22 Jun 2015 21:08:20 -0400 Subject: [PATCH] Added current-input-port and current-error-port --- cgen.scm | 10 +++++++--- eval.scm | 1 - runtime.c | 16 ++++++++-------- runtime.h | 6 +++--- scheme/base.sld | 8 ++++++-- transforms.scm | 8 +++++--- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/cgen.scm b/cgen.scm index 788f0d7a..aa125cfa 100644 --- a/cgen.scm +++ b/cgen.scm @@ -424,6 +424,8 @@ ((eq? p 'Cyc-cvar?) "Cyc_is_cvar") ((eq? p 'Cyc-has-cycle?) "Cyc_has_cycle") ((eq? p 'Cyc-stdout) "Cyc_stdout") + ((eq? p 'Cyc-stdin) "Cyc_stdin") + ((eq? p 'Cyc-stderr) "Cyc_stderr") ((eq? p '+) "Cyc_sum") ((eq? p '-) "Cyc_sub") ((eq? p '*) "Cyc_mul") @@ -438,7 +440,6 @@ ((eq? p 'exit) "__halt") ((eq? p 'Cyc-default-exception-handler) "Cyc_default_exception_handler") ((eq? p 'Cyc-current-exception-handler) "Cyc_current_exception_handler") - ((eq? p 'current-input-port) "Cyc_io_current_input_port") ((eq? p 'open-input-file) "Cyc_io_open_input_file") ((eq? p 'close-input-port) "Cyc_io_close_input_port") ((eq? p 'read-char) "Cyc_io_read_char") @@ -530,7 +531,8 @@ (define (prim/c-var-assign p) (cond ((eq? p 'Cyc-stdout) "port_type") - ((eq? p 'current-input-port) "port_type") + ((eq? p 'Cyc-stdin) "port_type") + ((eq? p 'Cyc-stderr) "port_type") ((eq? p 'open-input-file) "port_type") ((eq? p 'length) "integer_type") ((eq? p 'vector-length) "integer_type") @@ -555,7 +557,9 @@ (and (prim? exp) (member exp '( Cyc-stdout - current-input-port open-input-file + Cyc-stdin + Cyc-stderr + open-input-file char->integer system string->number string-append string-cmp list->string string->list make-vector list->vector diff --git a/eval.scm b/eval.scm index 91372292..2ac7fc9c 100644 --- a/eval.scm +++ b/eval.scm @@ -285,7 +285,6 @@ (list 'vector? vector?) (list 'string? string?) (list 'symbol? symbol?) - (list 'current-input-port current-input-port) (list 'open-input-file open-input-file) (list 'close-input-port close-input-port) (list 'read-char read-char) diff --git a/runtime.c b/runtime.c index a473cbba..849e8dda 100644 --- a/runtime.c +++ b/runtime.c @@ -985,14 +985,19 @@ port_type Cyc_stdout() { return _stdout; } -port_type Cyc_io_current_input_port() { - make_port(p, stdin, 0); +port_type Cyc_stdin() { + make_port(p, stdin, 1); + return p; +} + +port_type Cyc_stderr() { + make_port(p, stderr, 0); return p; } port_type Cyc_io_open_input_file(object str) { const char *fname = ((string_type *)str)->str; - make_port(p, NULL, 0); + make_port(p, NULL, 1); p.fp = fopen(fname, "r"); return p; } @@ -1272,9 +1277,6 @@ void _symbol_91_125string(object cont, object args) { void _number_91_125string(object cont, object args) { string_type s = Cyc_number2string(car(args)); return_funcall1(cont, &s);} -void _current_91input_91port(object cont, object args) { - port_type p = Cyc_io_current_input_port(); - return_funcall1(cont, &p);} void _open_91input_91file(object cont, object args) { port_type p = Cyc_io_open_input_file(car(args)); return_funcall1(cont, &p);} @@ -1971,7 +1973,6 @@ static primitive_type port_127_primitive = {primitive_tag, "port?", &_port_127}; static primitive_type vector_127_primitive = {primitive_tag, "vector?", &_vector_127}; static primitive_type string_127_primitive = {primitive_tag, "string?", &_string_127}; static primitive_type symbol_127_primitive = {primitive_tag, "symbol?", &_symbol_127}; -static primitive_type current_91input_91port_primitive = {primitive_tag, "current-input-port", &_current_91input_91port}; static primitive_type open_91input_91file_primitive = {primitive_tag, "open-input-file", &_open_91input_91file}; static primitive_type close_91input_91port_primitive = {primitive_tag, "close-input-port", &_close_91input_91port}; static primitive_type read_91char_primitive = {primitive_tag, "read-char", &_read_91char}; @@ -2076,7 +2077,6 @@ const object primitive_string_127 = &string_127_primitive; const object primitive_port_127 = &port_127_primitive; const object primitive_vector_127 = &vector_127_primitive; const object primitive_symbol_127 = &symbol_127_primitive; -const object primitive_current_91input_91port = ¤t_91input_91port_primitive; const object primitive_open_91input_91file = &open_91input_91file_primitive; const object primitive_close_91input_91port = &close_91input_91port_primitive; const object primitive_read_91char = &read_91char_primitive; diff --git a/runtime.h b/runtime.h index d27303b8..daf08bb4 100644 --- a/runtime.h +++ b/runtime.h @@ -59,7 +59,6 @@ extern object Cyc_global_variables; object Cyc_get_global_variables(); object Cyc_get_cvar(object var); object Cyc_set_cvar(object var, object value); -port_type Cyc_stdout(void); object apply(object cont, object func, object args); void Cyc_apply(int argc, closure cont, object prim, ...); integer_type Cyc_string_cmp(object str1, object str2); @@ -106,7 +105,9 @@ integer_type Cyc_char2integer(object chr); object Cyc_integer2char(object n); void my_exit(closure) never_returns; object __halt(object obj); -port_type Cyc_io_current_input_port(); +port_type Cyc_stdout(void); +port_type Cyc_stdin(void); +port_type Cyc_stderr(void); port_type Cyc_io_open_input_file(object str); object Cyc_io_close_input_port(object port); object Cyc_io_read_char(object port); @@ -322,7 +323,6 @@ extern const object primitive_port_127; extern const object primitive_vector_127; extern const object primitive_string_127; extern const object primitive_symbol_127; -extern const object primitive_current_91input_91port; extern const object primitive_open_91input_91file; extern const object primitive_close_91input_91port; extern const object primitive_read_91char; diff --git a/scheme/base.sld b/scheme/base.sld index a551968f..d5148aa5 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -53,8 +53,8 @@ string->vector make-parameter current-output-port - ;current-input-port - ;current-error-port + current-input-port + current-error-port error raise raise-continuable @@ -291,6 +291,10 @@ (error "bad parameter syntax")))))) (define current-output-port (make-parameter (Cyc-stdout))) + (define current-input-port + (make-parameter (Cyc-stdin))) + (define current-error-port + (make-parameter (Cyc-stderr))) (define (error msg . args) (raise (cons msg args))) (define (raise obj) diff --git a/transforms.scm b/transforms.scm index bafc44d7..2dff8800 100644 --- a/transforms.scm +++ b/transforms.scm @@ -485,6 +485,8 @@ Cyc-cvar? ;; Cyclone-specific Cyc-has-cycle? Cyc-stdout + Cyc-stdin + Cyc-stderr + - * @@ -551,7 +553,6 @@ vector? string? symbol? - current-input-port open-input-file close-input-port read-char @@ -573,7 +574,6 @@ Cyc-get-cvar Cyc-set-cvar! Cyc-cvar? - Cyc-stdout apply %halt exit @@ -590,7 +590,9 @@ string->list ;; Mistaken for function call (maybe OK if it was quoted, though). same for above? make-vector ;; I/O must be done at runtime for side effects: - current-input-port + Cyc-stdout + Cyc-stdin + Cyc-stderr open-input-file close-input-port read-char