mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
Added current-input-port and current-error-port
This commit is contained in:
parent
b8663c0b88
commit
bebacfb985
6 changed files with 29 additions and 20 deletions
10
cgen.scm
10
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
|
||||
|
|
1
eval.scm
1
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)
|
||||
|
|
16
runtime.c
16
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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue