libt2n: (gerd) really fix default arguments (#1427)
[libt2n] / codegen / main.cpp
index ca91221..7df215a 100644 (file)
@@ -24,6 +24,7 @@
 #include <fstream>
 #include <list>
 #include <stdexcept>
+#include <string>
 #include <boost/lexical_cast.hpp>
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -323,8 +324,22 @@ protected:
                 assert(arg->get_attribute("type"));
                 a.type=get_type(root, arg->get_attribute("type")->get_value());
 
-                if(arg->get_attribute("default"))
-                    a.defaultArg=arg->get_attribute("default")->get_value();
+                // this would be the nice way of solving the problem of default arguments
+                // but currently the output of gccxml is unreliable (e.g. namespace only
+                // sometimes available)
+                // if(arg->get_attribute("default"))
+                //    a.defaultArg=arg->get_attribute("default")->get_value();
+
+                // so we need to get the def. arg. via attribute
+                // which is previously set by the macro LIBT2N_DEFAULT_ARG(type,value)
+                if(arg->get_attribute("attributes"))
+                {
+                    std::string attr=arg->get_attribute("attributes")->get_value();
+                    const std::string look_for = "gccxml(libt2n-default-arg,";
+
+                    if (attr.compare(0,look_for.size(),look_for) == 0)
+                        a.defaultArg=attr.substr(look_for.size(),attr.size()-look_for.size()-1);
+                }
 
                 // todo: ugly - could be any other error
                 if (a.type.name.empty())