when normal() doesn't recur any further because the specified recursion level
authorChristian Bauer <Christian.Bauer@uni-mainz.de>
Sat, 6 Jan 2001 19:18:29 +0000 (19:18 +0000)
committerChristian Bauer <Christian.Bauer@uni-mainz.de>
Sat, 6 Jan 2001 19:18:29 +0000 (19:18 +0000)
was reached, the remaining subexpression is replaced by a symbol to avoid
continuing with non-polynomial expressions

ginac/normal.cpp

index 1cbb87737cf305b96ef50590a704690dd954b1bb..d59e42d58b7671d13ddcd1a0b6473d0da7ea1c78 100644 (file)
@@ -1910,7 +1910,7 @@ static ex frac_cancel(const ex &n, const ex &d)
 ex add::normal(lst &sym_lst, lst &repl_lst, int level) const
 {
        if (level == 1)
-               return (new lst(*this, _ex1()))->setflag(status_flags::dynallocated);
+               return (new lst(replace_with_symbol(*this, sym_lst, repl_lst), _ex1()))->setflag(status_flags::dynallocated);
        else if (level == -max_recursion_level)
                throw(std::runtime_error("max recursion level reached"));
 
@@ -1991,7 +1991,7 @@ ex add::normal(lst &sym_lst, lst &repl_lst, int level) const
 ex mul::normal(lst &sym_lst, lst &repl_lst, int level) const
 {
        if (level == 1)
-               return (new lst(*this, _ex1()))->setflag(status_flags::dynallocated);
+               return (new lst(replace_with_symbol(*this, sym_lst, repl_lst), _ex1()))->setflag(status_flags::dynallocated);
        else if (level == -max_recursion_level)
                throw(std::runtime_error("max recursion level reached"));
 
@@ -2022,7 +2022,7 @@ ex mul::normal(lst &sym_lst, lst &repl_lst, int level) const
 ex power::normal(lst &sym_lst, lst &repl_lst, int level) const
 {
        if (level == 1)
-               return (new lst(*this, _ex1()))->setflag(status_flags::dynallocated);
+               return (new lst(replace_with_symbol(*this, sym_lst, repl_lst), _ex1()))->setflag(status_flags::dynallocated);
        else if (level == -max_recursion_level)
                throw(std::runtime_error("max recursion level reached"));