}
// dirty hack to distinguish between serial numbers of functions and real
// pointers.
+ GiNaC::function* f = NULL;
try {
- GiNaC::function f(reinterpret_cast<unsigned>(reader->second), args);
- return f;
+ unsigned serial = (unsigned)(unsigned long)(void *)(reader->second);
+ f = new GiNaC::function(serial, args);
}
catch ( std::runtime_error ) {
+ if ( f ) delete f;
ex ret = reader->second(args);
return ret;
}
+ return f->setflag(status_flags::dynallocated);
}
/// paren_expr: '(' expression ')'