]> www.ginac.de Git - ginac.git/blobdiff - ginsh/ginsh_parser.yy
- degree(), ldegree(), coeff(), lcoeff(), tcoeff() and collect() work with
[ginac.git] / ginsh / ginsh_parser.yy
index c81ea4a8255f92f30c3e02856215c5c189ac8a12..b36e2ece3e0919779bc0f1e1ba0e79d6f223b644 100644 (file)
@@ -125,15 +125,15 @@ line      : ';'
                try {
                        push($1);
                } catch (exception &e) {
-                       cerr << e.what() << endl;
+                       std::cerr << e.what() << endl;
                        YYERROR;
                }
        }
        | T_PRINT '(' exp ')' ';' {
                try {
-                       $3.printtree(cout);
+                       $3.print(print_tree(std::cout));
                } catch (exception &e) {
-                       cerr << e.what() << endl;
+                       std::cerr << e.what() << endl;
                        YYERROR;
                }
        }
@@ -151,7 +151,7 @@ line        : ';'
                        YYERROR;
                }
        }
-       | '?' T_SYMBOL          {print_help(ex_to_symbol($2).getname());}
+       | '?' T_SYMBOL          {print_help(ex_to_symbol($2).get_name());}
        | '?' T_TIME            {print_help("time");}
        | '?' '?'               {print_help_topics();}
        | T_QUIT                {YYACCEPT;}
@@ -295,15 +295,18 @@ static ex f_charpoly(const exprseq &e)
 
 static ex f_coeff(const exprseq &e)
 {
-       CHECK_ARG(1, symbol, coeff);
        CHECK_ARG(2, numeric, coeff);
-       return e[0].coeff(ex_to_symbol(e[1]), ex_to_numeric(e[2]).to_int());
+       return e[0].coeff(e[1], ex_to_numeric(e[2]).to_int());
 }
 
 static ex f_collect(const exprseq &e)
 {
-       CHECK_ARG(1, symbol, collect);
-       return e[0].collect(ex_to_symbol(e[1]));
+       return e[0].collect(e[1]);
+}
+
+static ex f_collect_distributed(const exprseq &e)
+{
+       return e[0].collect(e[1], true);
 }
 
 static ex f_content(const exprseq &e)
@@ -314,8 +317,7 @@ static ex f_content(const exprseq &e)
 
 static ex f_degree(const exprseq &e)
 {
-       CHECK_ARG(1, symbol, degree);
-       return e[0].degree(ex_to_symbol(e[1]));
+       return e[0].degree(e[1]);
 }
 
 static ex f_determinant(const exprseq &e)
@@ -352,7 +354,7 @@ static ex f_divide(const exprseq &e)
        if (divide(e[0], e[1], q))
                return q;
        else
-               return *new fail();
+               return fail();
 }
 
 static ex f_eval2(const exprseq &e)
@@ -386,14 +388,12 @@ static ex f_is(const exprseq &e)
 
 static ex f_lcoeff(const exprseq &e)
 {
-       CHECK_ARG(1, symbol, lcoeff);
-       return e[0].lcoeff(ex_to_symbol(e[1]));
+       return e[0].lcoeff(e[1]);
 }
 
 static ex f_ldegree(const exprseq &e)
 {
-       CHECK_ARG(1, symbol, ldegree);
-       return e[0].ldegree(ex_to_symbol(e[1]));
+       return e[0].ldegree(e[1]);
 }
 
 static ex f_normal2(const exprseq &e)
@@ -461,8 +461,7 @@ static ex f_subs3(const exprseq &e)
 
 static ex f_tcoeff(const exprseq &e)
 {
-       CHECK_ARG(1, symbol, tcoeff);
-       return e[0].tcoeff(ex_to_symbol(e[1]));
+       return e[0].tcoeff(e[1]);
 }
 
 static ex f_trace(const exprseq &e)
@@ -505,6 +504,7 @@ static const fcn_init builtin_fcns[] = {
        {"charpoly", fcn_desc(f_charpoly, 2)},
        {"coeff", fcn_desc(f_coeff, 3)},
        {"collect", fcn_desc(f_collect, 2)},
+       {"collect_distributed", fcn_desc(f_collect_distributed, 2)},
        {"content", fcn_desc(f_content, 2)},
        {"degree", fcn_desc(f_degree, 2)},
        {"denom", fcn_desc(f_denom, 1)},
@@ -589,7 +589,7 @@ void GiNaC::ginsh_get_ginac_functions(void)
 
 static fcn_tab::const_iterator find_function(const ex &sym, int req_params)
 {
-       const string &name = ex_to_symbol(sym).getname();
+       const string &name = ex_to_symbol(sym).get_name();
        typedef fcn_tab::const_iterator I;
        pair<I, I> b = fcns.equal_range(name);
        if (b.first == b.second)