diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 32b7c1c5..dbb20384 100755 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -1198,6 +1198,8 @@ SEXP_API sexp sexp_write_simple_object (sexp ctx, sexp self, sexp_sint_t n, sexp SEXP_API sexp sexp_finalize_port (sexp ctx, sexp self, sexp_sint_t n, sexp port); SEXP_API sexp sexp_make_input_port (sexp ctx, FILE* in, sexp name); SEXP_API sexp sexp_make_output_port (sexp ctx, FILE* out, sexp name); +SEXP_API sexp sexp_make_non_null_input_port (sexp ctx, FILE* in, sexp name); +SEXP_API sexp sexp_make_non_null_output_port (sexp ctx, FILE* out, sexp name); SEXP_API sexp sexp_port_binaryp_op (sexp ctx, sexp self, sexp_sint_t n, sexp port); SEXP_API sexp sexp_port_openp_op (sexp ctx, sexp self, sexp_sint_t n, sexp port); #if SEXP_USE_FOLD_CASE_SYMS diff --git a/sexp.c b/sexp.c index 06e5c3ef..cf4ad914 100644 --- a/sexp.c +++ b/sexp.c @@ -1407,6 +1407,16 @@ sexp sexp_make_output_port (sexp ctx, FILE* out, sexp name) { return p; } +sexp sexp_make_non_null_input_port (sexp ctx, FILE* in, sexp name) { + if (!in) return sexp_user_exception(ctx, SEXP_FALSE, "null input-port", name); + return sexp_make_input_port(ctx, in, name); +} + +sexp sexp_make_non_null_output_port (sexp ctx, FILE* out, sexp name) { + if (!out) return sexp_user_exception(ctx, SEXP_FALSE, "null output-port", name); + return sexp_make_output_port(ctx, out, name); +} + sexp sexp_port_binaryp_op (sexp ctx, sexp self, sexp_sint_t n, sexp port) { sexp_assert_type(ctx, sexp_portp, SEXP_IPORT, port); return sexp_make_boolean(sexp_port_binaryp(port)); diff --git a/tools/chibi-ffi b/tools/chibi-ffi index 6c873660..39a60541 100755 --- a/tools/chibi-ffi +++ b/tools/chibi-ffi @@ -393,9 +393,9 @@ ((string-type? base) (cat "sexp_c_string(ctx, " val ", -1)")) ((eq? 'input-port base) - (cat "sexp_make_input_port(ctx, " val ", SEXP_FALSE)")) + (cat "sexp_make_non_null_input_port(ctx, " val ", SEXP_FALSE)")) ((eq? 'output-port base) - (cat "sexp_make_output_port(ctx, " val ", SEXP_FALSE)")) + (cat "sexp_make_non_null_output_port(ctx, " val ", SEXP_FALSE)")) (else (let ((ctype (assq base *types*)) (void*? (void-pointer-type? type)))