From c518714bac6beb904724397af17de5282056a25d Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Mon, 23 Jul 2012 11:39:39 +0200 Subject: [PATCH] Create ly_is_rational predicate that allows exact rationals and infinities --- lily/include/lily-guile.hh | 1 + lily/lily-guile.cc | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 059e5aa0cc..f2b8f08ba1 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -103,6 +103,7 @@ inline bool ly_cheap_is_list (SCM x) { return scm_is_pair (x) || x == SCM_EOL; } inline bool ly_is_procedure (SCM x) { return scm_is_true (scm_procedure_p (x)); } inline bool ly_is_port (SCM x) { return scm_is_true (scm_port_p (x)); } +bool ly_is_rational (SCM); /* want to take the address of this function; scm_is_symbol() is a macro. diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 9806f14d24..96097e4cf0 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -618,14 +618,20 @@ ly_scm2rational (SCM r) Rational robust_scm2rational (SCM n, Rational rat) { - if (scm_is_real (n) - && (scm_is_true (scm_exact_p (n)) - || scm_is_true (scm_inf_p (n)))) + if (ly_is_rational (n)) return ly_scm2rational (n); else return rat; } +bool +ly_is_rational (SCM n) +{ + return (scm_is_real (n) + && (scm_is_true (scm_exact_p (n)) + || scm_is_true (scm_inf_p (n)))); +} + SCM alist_to_hashq (SCM alist) { -- 2.39.5