number_codes breaks if handling unmatched-doublequote error

Jasper Taylor <[email protected]> Mon, 16 Nov 2009 12:50:44 +0000
Newsgroups gmane.comp.gnu.prolog.bugs
Message-ID <[email protected]>
Hi Daniel and everyone.
I am using gprolog 1.3.2 on Linux and I have this problem. In certain 
circumstances, number_codes is raising an exception when it should 
succeed. This only happens if:
* number_codes has a string matching a valid number as the 2nd arg and a 
variable as the first
* number_codes is called in the exception handling clause of 'catch'
* the exception clause is executing because the goal of 'catch' 
contained a read_term which caused a parse error
* the parse error was due to an unmatched double quote.

This example produces the bug. It looks like the read_term is producing 
two errors, one of which hangs around and causes an exception in 
number_codes. The string of codes converts to sin("foo).


catch(read_from_codes([115,105,110,40,34,102,111,111,41,47], Term),
      Bug,
      number_codes(G, [51,49])).

note that if you replace number_codes with name, the example executes 
and catches the exception correctly, but G gets set to the atom '31' 
rather than the number 31, which I guess is because the implementation 
of name calls number_codes internally, and calls atom_codes when that 
raises an exception.
Hope you enjoy this challenge!
    --Jasper