From 81d2e700371ab464fe0b90bb7d699c0cf739decf Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sun, 17 May 2020 18:35:12 -0400 Subject: [PATCH] Issue #374 - Allow full access to open-binary prims --- CHANGELOG.md | 12 ++++++++++++ include/cyclone/runtime.h | 2 ++ runtime.c | 22 ++++++++++++++++++++++ scheme/eval.sld | 2 ++ 4 files changed, 38 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f465cff..ef411cf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.18 - TBD + +Features + +- Added the `(cyclone foreign)` library to make it easier to integrate with C code using the FFI. + +Bug Fixes + +- Allow `open-binary-input-file` and `open-binary-output-file` to be accessible via the REPL. +- Fix `bytevector?` predicate which was accidentally aliased to `vector?`. +- Fix `list-copy` to return a non-list object instead of raising an error, per R7RS. + ## 0.17 - April 6, 2020 Bug Fixes diff --git a/include/cyclone/runtime.h b/include/cyclone/runtime.h index 93608603..222fe736 100644 --- a/include/cyclone/runtime.h +++ b/include/cyclone/runtime.h @@ -714,6 +714,8 @@ extern const object primitive_string_127; extern const object primitive_symbol_127; extern const object primitive_open_91input_91file; extern const object primitive_open_91output_91file; +extern const object primitive_open_91binary_91input_91file; +extern const object primitive_open_91binary_91output_91file; extern const object primitive_close_91port; extern const object primitive_close_91input_91port; extern const object primitive_close_91output_91port; diff --git a/runtime.c b/runtime.c index c1cb5627..b9b744c8 100644 --- a/runtime.c +++ b/runtime.c @@ -5412,6 +5412,22 @@ void _open_91output_91file(void *data, object cont, object args) return_closcall1(data, cont, &p); }} +void _open_91binary_91input_91file(void *data, object cont, object args) +{ + Cyc_check_num_args(data, "open-binary-input-file", 1, args); + { + port_type p = Cyc_io_open_binary_input_file(data, car(args)); + return_closcall1(data, cont, &p); +}} + +void _open_91binary_91output_91file(void *data, object cont, object args) +{ + Cyc_check_num_args(data, "open-binary-output-file", 1, args); + { + port_type p = Cyc_io_open_binary_output_file(data, car(args)); + return_closcall1(data, cont, &p); +}} + void _close_91port(void *data, object cont, object args) { Cyc_check_num_args(data, "close-port", 1, args); @@ -6370,6 +6386,10 @@ static primitive_type open_91input_91file_primitive = { {0}, primitive_tag, "open-input-file", &_open_91input_91file }; static primitive_type open_91output_91file_primitive = { {0}, primitive_tag, "open-output-file", &_open_91output_91file }; +static primitive_type open_91binary_91input_91file_primitive = + { {0}, primitive_tag, "open-binary-input-file", &_open_91binary_91input_91file }; +static primitive_type open_91binary_91output_91file_primitive = + { {0}, primitive_tag, "open-binary-output-file", &_open_91binary_91output_91file }; static primitive_type close_91port_primitive = { {0}, primitive_tag, "close-port", &_close_91port }; static primitive_type close_91input_91port_primitive = @@ -6525,6 +6545,8 @@ const object primitive_bytevector_127 = &bytevector_127_primitive; const object primitive_symbol_127 = &symbol_127_primitive; const object primitive_open_91input_91file = &open_91input_91file_primitive; const object primitive_open_91output_91file = &open_91output_91file_primitive; +const object primitive_open_91binary_91input_91file = &open_91binary_91input_91file_primitive; +const object primitive_open_91binary_91output_91file = &open_91binary_91output_91file_primitive; const object primitive_close_91port = &close_91port_primitive; const object primitive_close_91input_91port = &close_91input_91port_primitive; const object primitive_close_91output_91port = &close_91output_91port_primitive; diff --git a/scheme/eval.sld b/scheme/eval.sld index 7b3a1667..42001ff6 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -320,6 +320,8 @@ (list 'symbol? symbol?) (list 'open-input-file open-input-file) (list 'open-output-file open-output-file) + (list 'open-binary-input-file open-binary-input-file) + (list 'open-binary-output-file open-binary-output-file) (list 'close-port close-port) (list 'close-input-port close-input-port) (list 'close-output-port close-output-port)