[GiNaC-devel] [SCM] GiNaC -- a C++ library for symbolic computations branch, ginac_1-5, updated. release_1-4-0-198-g8bf0597
Alexei Sheplyakov
varg at metalica.kh.ua
Fri Jul 31 15:23:32 CEST 2009
On Fri, Jul 31, 2009 at 02:43:38PM +0200, Jens Vollinga wrote:
> Alexei Sheplyakov schrieb:
>> I'm afraid this code is a bit dangerous.
>>
>> Suppose reader->second corresponds to the serial of some (GiNaC::)function
>> (and not a pointer to a C++ function). ret = GiNaC::function(...) calls
>> eval(), and it might throw an exception. We catch the exception and
>> dereference ->second => oops...
>
> you are right. I fixed it now. Thanks!
I don't think the new variant is any different.
69 // dirty hack to distinguish between serial numbers of functions and real
70 // pointers.
71 try {
72 GiNaC::function f(reinterpret_cast<unsigned>(reader->second), args);
73 return f;
eval() is still called here. The compiler has to call ex::ex(const basic&)
ctor in order to convert the value being returned to the correct type (ex).
That ctor calls ex::construct_from_basic(const basic&), and it calls eval()
(which might throw an exception, and so on).
Best regards,
Alexei
More information about the GiNaC-devel
mailing list