Add memory-streams to list of features

This commit is contained in:
Justin Ethier 2022-05-28 08:21:11 -07:00
parent 702451541a
commit 6ffd229dcd
5 changed files with 31 additions and 7 deletions

View file

@ -2,6 +2,10 @@
## 0.35.0 - TBD ## 0.35.0 - TBD
Features
- Add `memory-streams` to the list of symbols that `(features)` can return, indicating that the current installation supports in-memory streams.
Bug Fixes Bug Fixes
- Enforce a maximum recursion depth when printing an object via `display` and `write`, and when comparing objects via `equal?`. This prevents segmentation faults when working with circular data structures. - Enforce a maximum recursion depth when printing an object via `display` and `write`, and when comparing objects via `equal?`. This prevents segmentation faults when working with circular data structures.

View file

@ -375,6 +375,7 @@ object Cyc_io_peek_u8(void *data, object cont, object port);
object Cyc_write_bytevector(void *data, object bvec, object port, object start, object end); object Cyc_write_bytevector(void *data, object bvec, object port, object start, object end);
object Cyc_io_read_line(void *data, object cont, object port); object Cyc_io_read_line(void *data, object cont, object port);
void Cyc_io_read_token(void *data, object cont, object port); void Cyc_io_read_token(void *data, object cont, object port);
int Cyc_have_mstreams();
/**@}*/ /**@}*/

View file

@ -32,6 +32,15 @@ if (obj_is_not_closure(clo)) { \
} \ } \
} }
int Cyc_have_mstreams()
{
#if CYC_HAVE_FMEMOPEN && CYC_HAVE_OPEN_MEMSTREAM
return 1;
#else
return 0;
#endif
}
object Cyc_heap_alloc_port(void *data, port_type *p); object Cyc_heap_alloc_port(void *data, port_type *p);
port_type *Cyc_io_open_input_string(void *data, object str) port_type *Cyc_io_open_input_string(void *data, object str)
{ {

View file

@ -2942,6 +2942,13 @@ object Cyc_compilation_environment(void *data, object cont, object var)
snprintf(buf, sizeof(buf), "%s", CYC_PLATFORM); snprintf(buf, sizeof(buf), "%s", CYC_PLATFORM);
make_utf8_string(data, str, buf); make_utf8_string(data, str, buf);
_return_closcall1(data, cont, &str); _return_closcall1(data, cont, &str);
} else if (strncmp(((symbol) var)->desc, "memory-streams", 9) == 0) {
char buf[] = "memory-streams";
if (!Cyc_have_mstreams()) {
buf[0] = '\0';
}
make_utf8_string(data, str, buf);
_return_closcall1(data, cont, &str);
} }
} }
Cyc_rt_raise2(data, Cyc_rt_raise2(data,

View file

@ -235,14 +235,17 @@
(begin (begin
;; Features implemented by this Scheme ;; Features implemented by this Scheme
(define (features) (define (features)
(cons (let ((feats *other-features*))
'cyclone (if (> (string-length (Cyc-compilation-environment 'memory-streams)) 0)
(set! feats (cons 'memory-streams feats)))
(cons (cons
(string->symbol 'cyclone
(string-append "version-" *version-number*))
(cons (cons
(string->symbol (Cyc-compilation-environment 'platform)) (string->symbol
*other-features*)))) (string-append "version-" *version-number*))
(cons
(string->symbol (Cyc-compilation-environment 'platform))
feats)))))
(define *other-features* (define *other-features*
'(r7rs '(r7rs