From: David Kastrup Date: Mon, 23 Jul 2012 09:39:39 +0000 (+0200) Subject: Create ly_is_rational predicate that allows exact rationals and infinities X-Git-Tag: release/2.15.42-1~27 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c518714bac6beb904724397af17de5282056a25d;p=lilypond.git Create ly_is_rational predicate that allows exact rationals and infinities --- 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) {