]> www.ginac.de Git - ginac.git/blobdiff - ginac/function.pl
- The default implementations of evalf(), diff(), normal() and expand() use
[ginac.git] / ginac / function.pl
index c3dbcd6f3bb3db8d74806eef325fe8a5ecd54438..33fc5050fc4b88f5eee8fa9ec4964cbefa7ea2c7 100755 (executable)
@@ -773,7 +773,20 @@ ex function::evalf(int level) const
 {
        GINAC_ASSERT(serial<registered_functions().size());
 
-       exvector eseq=evalfchildren(level);
+       // Evaluate children first
+       exvector eseq;
+       if (level == 1)
+               eseq = seq;
+       else if (level == -max_recursion_level)
+               throw(std::runtime_error("max recursion level reached"));
+       else
+               eseq.reserve(seq.size());
+       level--;
+       exvector::const_iterator it = seq.begin(), itend = seq.end();
+       while (it != itend) {
+               eseq.push_back((*it).evalf(level));
+               it++;
+       }
        
        if (registered_functions()[serial].evalf_f==0) {
                return function(serial,eseq).hold();