Fix a lisp error in the translator involving variables of mode rational
commit6272a07465a373f5c42d7f4e326c355ab4ed4c51
authorKris Katterjohn <katterjohn@gmail.com>
Thu, 5 Mar 2020 21:54:52 +0000 (5 15:54 -0600)
committerKris Katterjohn <katterjohn@gmail.com>
Thu, 5 Mar 2020 21:54:52 +0000 (5 15:54 -0600)
treec3491acc0771fe6bd6f707dfa0fc69c6ab56b97c
parentf39fd92866a2acfeab5a9b9a502721fc05864c28
Fix a lisp error in the translator involving variables of mode rational

When a variable was declared to be of mode rational, a lisp error
would occur during translation when attempting to convert it to a
float via DCONV-$FLOAT.  There was an assumption in DCONV-$FLOAT
that the cdr of its argument was a list when its car was the symbol
$RATIONAL.

Two examples are

  foo (x) := (mode_declare (x, rational), float (x))
  bar (x) := (mode_declare (x, rational), 1.0 + x)

Attempting to translate either of these would cause a lisp error
during translation.

It appears that this has never worked in Maxima under Common Lisp,
although it worked "accidentally" under Maclisp.  In Maclisp no error
checking was done in CAR and CDR calls in compiled code (there were
CAR and CDR variables to control the behavior in interpreted code),
so if Macsyma was compiled and calling CADR on the argument to
DCONV-$FLOAT didn't return the symbol QUOTE, then this translated
correctly.

tests/rtest_translator.mac runs as expected, with a new test.
src/transl.lisp
tests/rtest_translator.mac