diff --git a/include/cyclone/runtime.h b/include/cyclone/runtime.h index 088e2024..2e92bdf4 100644 --- a/include/cyclone/runtime.h +++ b/include/cyclone/runtime.h @@ -150,8 +150,8 @@ object Cyc_io_close_output_port(void *data, object port); object Cyc_io_flush_output_port(void *data, object port); object Cyc_io_delete_file(void *data, object filename); object Cyc_io_file_exists(void *data, object filename); -object Cyc_io_read_char(void *data, object port); -object Cyc_io_peek_char(void *data, object port); +object Cyc_io_read_char(void *data, object cont, object port); +object Cyc_io_peek_char(void *data, object cont, object port); object Cyc_io_read_line(void *data, object cont, object port); object Cyc_is_boolean(object o); diff --git a/runtime.c b/runtime.c index 5726e7a4..25332bad 100644 --- a/runtime.c +++ b/runtime.c @@ -1486,7 +1486,7 @@ object Cyc_io_file_exists(void *data, object filename) { } // TODO: port arg is optional! (maybe handle that in expansion section??) -object Cyc_io_read_char(void *data, object port) { +object Cyc_io_read_char(void *data, object cont, object port) { int c; Cyc_check_port(data, port); { @@ -1526,7 +1526,7 @@ object Cyc_io_read_line(void *data, object cont, object port) { return nil; } -object Cyc_io_peek_char(void *data, object port) { +object Cyc_io_peek_char(void *data, object cont, object port) { FILE *stream; int c; @@ -1952,10 +1952,10 @@ void _delete_91file(void *data, object cont, object args) { return_closcall1(data, cont, Cyc_io_delete_file(data, car(args)));} void _read_91char(void *data, object cont, object args) { Cyc_check_num_args(data, "read-char", 1, args); - return_closcall1(data, cont, Cyc_io_read_char(data, car(args)));} + return_closcall1(data, cont, Cyc_io_read_char(data, cont, car(args)));} void _peek_91char(void *data, object cont, object args) { Cyc_check_num_args(data, "peek-char", 1, args); - return_closcall1(data, cont, Cyc_io_peek_char(data, car(args)));} + return_closcall1(data, cont, Cyc_io_peek_char(data, cont, car(args)));} void _Cyc_91read_91line(void *data, object cont, object args) { Cyc_check_num_args(data, "Cyc-read-line", 1, args); Cyc_io_read_line(data, cont, car(args));} diff --git a/scheme/cyclone/cgen.sld b/scheme/cyclone/cgen.sld index f6cdc891..c700f525 100644 --- a/scheme/cyclone/cgen.sld +++ b/scheme/cyclone/cgen.sld @@ -651,6 +651,8 @@ ((eq? p 'string-length) "integer_type") ((eq? p 'apply) "object") ((eq? p 'Cyc-read-line) "object") + ((eq? p 'read-char) "object") + ((eq? p 'peek-char) "object") ((eq? p 'command-line-arguments) "object") ((eq? p 'number->string) "object") ((eq? p 'symbol->string) "object") @@ -681,12 +683,14 @@ + - * / apply command-line-arguments Cyc-read-line + read-char peek-char cons length vector-length cell)))) ;; Pass continuation as the function's first parameter? (define (prim:cont? exp) (and (prim? exp) (member exp '(Cyc-read-line apply command-line-arguments number->string + read-char peek-char symbol->string list->string substring string-append make-vector list->vector Cyc-installation-dir))))