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