mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-03 19:26:34 +02:00
Issue #337
Added `open-binary-input-file` and `open-binary-output-file` from R7RS.
This commit is contained in:
parent
60e9007d57
commit
e6c23e25c1
4 changed files with 39 additions and 4 deletions
|
@ -7,6 +7,7 @@ https://github.com/cyclone-scheme/cyclone-winds
|
||||||
|
|
||||||
Bug Fixes
|
Bug Fixes
|
||||||
|
|
||||||
|
- Added `open-binary-input-file` and `open-binary-output-file` from R7RS.
|
||||||
- Validate the number of arguments passed to `if` expressions.
|
- Validate the number of arguments passed to `if` expressions.
|
||||||
- Raise a useful error instead of aborting the whole program (!) when apply attempts to execute an object of the wrong type.
|
- Raise a useful error instead of aborting the whole program (!) when apply attempts to execute an object of the wrong type.
|
||||||
- Better handling of edge cases where an object of the wrong type is executed instead of a closure. Previously there were cases where this would cause the runtime to crash.
|
- Better handling of edge cases where an object of the wrong type is executed instead of a closure. Previously there were cases where this would cause the runtime to crash.
|
||||||
|
|
|
@ -243,6 +243,8 @@ port_type Cyc_stdin(void);
|
||||||
port_type Cyc_stderr(void);
|
port_type Cyc_stderr(void);
|
||||||
port_type Cyc_io_open_input_file(void *data, object str);
|
port_type Cyc_io_open_input_file(void *data, object str);
|
||||||
port_type Cyc_io_open_output_file(void *data, object str);
|
port_type Cyc_io_open_output_file(void *data, object str);
|
||||||
|
port_type Cyc_io_open_binary_input_file(void *data, object str);
|
||||||
|
port_type Cyc_io_open_binary_output_file(void *data, object str);
|
||||||
port_type *Cyc_io_open_output_string(void *data);
|
port_type *Cyc_io_open_output_string(void *data);
|
||||||
port_type *Cyc_io_open_input_string(void *data, object str);
|
port_type *Cyc_io_open_input_string(void *data, object str);
|
||||||
port_type *Cyc_io_open_input_bytevector(void *data, object bv);
|
port_type *Cyc_io_open_input_bytevector(void *data, object bv);
|
||||||
|
|
28
runtime.c
28
runtime.c
|
@ -4167,32 +4167,52 @@ port_type Cyc_stderr()
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
port_type Cyc_io_open_input_file(void *data, object str)
|
port_type _Cyc_io_open_input_file(void *data, object str, const char *mode)
|
||||||
{
|
{
|
||||||
const char *fname;
|
const char *fname;
|
||||||
Cyc_check_str(data, str);
|
Cyc_check_str(data, str);
|
||||||
fname = ((string_type *) str)->str;
|
fname = ((string_type *) str)->str;
|
||||||
make_input_port(p, NULL, CYC_IO_BUF_LEN);
|
make_input_port(p, NULL, CYC_IO_BUF_LEN);
|
||||||
p.fp = fopen(fname, "r");
|
p.fp = fopen(fname, mode);
|
||||||
if (p.fp == NULL) {
|
if (p.fp == NULL) {
|
||||||
Cyc_rt_raise2(data, "Unable to open file", str);
|
Cyc_rt_raise2(data, "Unable to open file", str);
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
port_type Cyc_io_open_output_file(void *data, object str)
|
port_type _Cyc_io_open_output_file(void *data, object str, const char *mode)
|
||||||
{
|
{
|
||||||
const char *fname;
|
const char *fname;
|
||||||
Cyc_check_str(data, str);
|
Cyc_check_str(data, str);
|
||||||
fname = ((string_type *) str)->str;
|
fname = ((string_type *) str)->str;
|
||||||
make_port(p, NULL, 0);
|
make_port(p, NULL, 0);
|
||||||
p.fp = fopen(fname, "w");
|
p.fp = fopen(fname, mode);
|
||||||
if (p.fp == NULL) {
|
if (p.fp == NULL) {
|
||||||
Cyc_rt_raise2(data, "Unable to open file", str);
|
Cyc_rt_raise2(data, "Unable to open file", str);
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
port_type Cyc_io_open_input_file(void *data, object str)
|
||||||
|
{
|
||||||
|
return _Cyc_io_open_input_file(data, str, "r");
|
||||||
|
}
|
||||||
|
|
||||||
|
port_type Cyc_io_open_output_file(void *data, object str)
|
||||||
|
{
|
||||||
|
return _Cyc_io_open_output_file(data, str, "w");
|
||||||
|
}
|
||||||
|
|
||||||
|
port_type Cyc_io_open_binary_input_file(void *data, object str)
|
||||||
|
{
|
||||||
|
return _Cyc_io_open_input_file(data, str, "rb");
|
||||||
|
}
|
||||||
|
|
||||||
|
port_type Cyc_io_open_binary_output_file(void *data, object str)
|
||||||
|
{
|
||||||
|
return _Cyc_io_open_output_file(data, str, "wb");
|
||||||
|
}
|
||||||
|
|
||||||
object Cyc_io_close_input_port(void *data, object port)
|
object Cyc_io_close_input_port(void *data, object port)
|
||||||
{
|
{
|
||||||
return Cyc_io_close_port(data, port);
|
return Cyc_io_close_port(data, port);
|
||||||
|
|
|
@ -196,6 +196,8 @@
|
||||||
symbol?
|
symbol?
|
||||||
open-input-file
|
open-input-file
|
||||||
open-output-file
|
open-output-file
|
||||||
|
open-binary-input-file
|
||||||
|
open-binary-output-file
|
||||||
close-port
|
close-port
|
||||||
close-input-port
|
close-input-port
|
||||||
close-output-port
|
close-output-port
|
||||||
|
@ -366,6 +368,8 @@
|
||||||
(symbol? 1 1)
|
(symbol? 1 1)
|
||||||
(open-input-file 1 1)
|
(open-input-file 1 1)
|
||||||
(open-output-file 1 1)
|
(open-output-file 1 1)
|
||||||
|
(open-binary-input-file 1 1)
|
||||||
|
(open-binary-output-file 1 1)
|
||||||
(close-port 1 1)
|
(close-port 1 1)
|
||||||
(close-input-port 1 1)
|
(close-input-port 1 1)
|
||||||
(close-output-port 1 1)
|
(close-output-port 1 1)
|
||||||
|
@ -553,6 +557,8 @@
|
||||||
((eq? p 'Cyc-current-exception-handler) "Cyc_current_exception_handler")
|
((eq? p 'Cyc-current-exception-handler) "Cyc_current_exception_handler")
|
||||||
((eq? p 'open-input-file) "Cyc_io_open_input_file")
|
((eq? p 'open-input-file) "Cyc_io_open_input_file")
|
||||||
((eq? p 'open-output-file) "Cyc_io_open_output_file")
|
((eq? p 'open-output-file) "Cyc_io_open_output_file")
|
||||||
|
((eq? p 'open-binary-input-file) "Cyc_io_open_binary_input_file")
|
||||||
|
((eq? p 'open-binary-output-file) "Cyc_io_open_binary_output_file")
|
||||||
((eq? p 'close-port) "Cyc_io_close_port")
|
((eq? p 'close-port) "Cyc_io_close_port")
|
||||||
((eq? p 'close-input-port) "Cyc_io_close_input_port")
|
((eq? p 'close-input-port) "Cyc_io_close_input_port")
|
||||||
((eq? p 'close-output-port) "Cyc_io_close_output_port")
|
((eq? p 'close-output-port) "Cyc_io_close_output_port")
|
||||||
|
@ -714,6 +720,8 @@
|
||||||
Cyc-end-thread!
|
Cyc-end-thread!
|
||||||
open-input-file
|
open-input-file
|
||||||
open-output-file
|
open-output-file
|
||||||
|
open-binary-input-file
|
||||||
|
open-binary-output-file
|
||||||
close-port
|
close-port
|
||||||
close-input-port
|
close-input-port
|
||||||
close-output-port
|
close-output-port
|
||||||
|
@ -802,6 +810,8 @@
|
||||||
((eq? p 'Cyc-stderr) "port_type")
|
((eq? p 'Cyc-stderr) "port_type")
|
||||||
((eq? p 'open-input-file) "port_type")
|
((eq? p 'open-input-file) "port_type")
|
||||||
((eq? p 'open-output-file) "port_type")
|
((eq? p 'open-output-file) "port_type")
|
||||||
|
((eq? p 'open-binary-input-file) "port_type")
|
||||||
|
((eq? p 'open-binary-output-file) "port_type")
|
||||||
;((eq? p 'Cyc-fast-plus) "object")
|
;((eq? p 'Cyc-fast-plus) "object")
|
||||||
;((eq? p 'Cyc-fast-sub) "object")
|
;((eq? p 'Cyc-fast-sub) "object")
|
||||||
;((eq? p 'Cyc-fast-mul) "object")
|
;((eq? p 'Cyc-fast-mul) "object")
|
||||||
|
@ -860,6 +870,8 @@
|
||||||
Cyc-stderr
|
Cyc-stderr
|
||||||
open-input-file
|
open-input-file
|
||||||
open-output-file
|
open-output-file
|
||||||
|
open-binary-input-file
|
||||||
|
open-binary-output-file
|
||||||
Cyc-installation-dir
|
Cyc-installation-dir
|
||||||
Cyc-compilation-environment
|
Cyc-compilation-environment
|
||||||
string->number
|
string->number
|
||||||
|
|
Loading…
Add table
Reference in a new issue