Parse_error_("no function \"" << name << "\" with " <<
args.size() << " arguments");
}
- ex ret = GiNaC::function(reinterpret_cast<unsigned>(reader->second), args);
- return ret;
+ // dirty hack to distinguish between serial numbers of functions and real
+ // pointers.
+ GiNaC::function* f = NULL;
+ try {
+ f = new GiNaC::function(reinterpret_cast<unsigned>(reader->second), 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 ')'