diff --git a/CHANGELOG.md b/CHANGELOG.md index dff97050..6205faef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 0.9.3 - TBD +Bug Fixes + +- Fix `input-port?`, `output-port?`, `input-port-open?`, and `output-port-open?` to return `#f` instead of crashing when a non-port object is passed. + ## 0.9.2 - August 26, 2018 Features diff --git a/scheme/base.sld b/scheme/base.sld index 441d9785..3a9155c7 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -1360,7 +1360,9 @@ (define-c input-port? "(void *data, int argc, closure _, object k, object port)" " port_type *p = (port_type *)port; - Cyc_check_port(data, port); + if (boolean_f == Cyc_is_port(port)) { + return_closcall1(data, k, boolean_f); + } return_closcall1( data, k, @@ -1368,7 +1370,9 @@ (define-c output-port? "(void *data, int argc, closure _, object k, object port)" " port_type *p = (port_type *)port; - Cyc_check_port(data, port); + if (boolean_f == Cyc_is_port(port)) { + return_closcall1(data, k, boolean_f); + } return_closcall1( data, k, @@ -1376,7 +1380,9 @@ (define-c input-port-open? "(void *data, int argc, closure _, object k, object port)" " port_type *p = (port_type *)port; - Cyc_check_port(data, port); + if (boolean_f == Cyc_is_port(port)) { + return_closcall1(data, k, boolean_f); + } return_closcall1( data, k, @@ -1384,7 +1390,9 @@ (define-c output-port-open? "(void *data, int argc, closure _, object k, object port)" " port_type *p = (port_type *)port; - Cyc_check_port(data, port); + if (boolean_f == Cyc_is_port(port)) { + return_closcall1(data, k, boolean_f); + } return_closcall1( data, k,