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