From 4cf407ebe6a55afb0d698b907ba1b9db9b0f646f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 5 Sep 2018 17:41:47 -0400 Subject: [PATCH] Issue #275 - Return #f instead of raising error --- CHANGELOG.md | 4 ++++ scheme/base.sld | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) 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,