]> www.ginac.de Git - ginac.git/blobdiff - ginsh/ginsh_parser.yy
[build] Define package version number in version.h (for non autotools build).
[ginac.git] / ginsh / ginsh_parser.yy
index b059172ef5166e3b94a6ad1b3690d3e9c9c1088d..eb184b7f1c8fe0388cda675b22fe9ecc33f58d4d 100644 (file)
@@ -4,7 +4,7 @@
  *  This file must be processed with yacc/bison. */
 
 /*
- *  GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2011 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -27,7 +27,9 @@
  */
 
 %{
+#ifdef HAVE_CONFIG_H
 #include "config.h"
+#endif
 #ifdef HAVE_RUSAGE
 #include <sys/resource.h>
 #else
@@ -304,7 +306,7 @@ row : exp                   {$$ = lst($1);}
 
 %%
 // Error print routine
-int yyerror(char *s)
+int yyerror(const char *s)
 {
        cerr << s << " at " << yytext << endl;
        return 0;
@@ -426,9 +428,12 @@ static ex f_evalf2(const exprseq &e)
 
 static ex f_find(const exprseq &e)
 {
-       lst found;
+       exset found;
        e[0].find(e[1], found);
-       return found;
+       lst l;
+       for (exset::const_iterator i = found.begin(); i != found.end(); ++i)
+               l.append(*i);
+       return l;
 }
 
 static ex f_fsolve(const exprseq &e)
@@ -478,11 +483,14 @@ static ex f_map(const exprseq &e)
 
 static ex f_match(const exprseq &e)
 {
-       lst repl_lst;
-       if (e[0].match(e[1], repl_lst))
+       exmap repls;
+       if (e[0].match(e[1], repls)) {
+               lst repl_lst;
+               for (exmap::const_iterator i = repls.begin(); i != repls.end(); ++i)
+                       repl_lst.append(relational(i->first, i->second, relational::equal));
                return repl_lst;
-       else
-               return fail();
+       }
+       throw std::runtime_error("FAIL");
 }
 
 static ex f_normal2(const exprseq &e)
@@ -721,14 +729,15 @@ static void insert_fcns(const fcn_init *p)
 
 static ex f_ginac_function(const exprseq &es, int serial)
 {
-       return function(serial, es).eval(1);
+       return GiNaC::function(serial, es).eval(1);
 }
 
 // All registered GiNaC functions
 namespace GiNaC {
-void ginsh_get_ginac_functions(void)
+static void ginsh_get_ginac_functions(void)
 {
-       vector<function_options>::const_iterator i = function::registered_functions().begin(), end = function::registered_functions().end();
+       vector<function_options> gfv = function::get_registered_functions();
+       vector<function_options>::const_iterator i = gfv.begin(), end = gfv.end();
        unsigned serial = 0;
        while (i != end) {
                fcns.insert(make_pair(i->get_name(), fcn_desc(f_ginac_function, i->get_nparams(), serial)));
@@ -893,7 +902,7 @@ static void ginsh_readline_init(char* name)
 void greeting(void)
 {
     cout << "ginsh - GiNaC Interactive Shell (" << PACKAGE << " V" << VERSION << ")" << endl;
-    cout << "  __,  _______  Copyright (C) 1999-2008 Johannes Gutenberg University Mainz,\n"
+    cout << "  __,  _______  Copyright (C) 1999-2011 Johannes Gutenberg University Mainz,\n"
          << " (__) *       | Germany.  This is free software with ABSOLUTELY NO WARRANTY.\n"
          << "  ._) i N a C | You are welcome to redistribute it under certain conditions.\n"
          << "<-------------' For details type `warranty;'.\n" << endl;