*/
#define LIBT2N_EXPORT __attribute__((annotate("libt2n-default")))
-
-/** @brief tell libt2n about a default argument
- @param type type of the default argument
- @param value default value
- @par Example
- @code
- LIBT2N_EXPORT std::string testfunc(LIBT2N_DEFAULT_ARG(const std::string str&,"hello world"))
- {
- // your code here
- }
- @endcode
- @remarks Codegen gets default arguments via this define (gccxml-attribute) because gccxml
- does not correctly output them (e.g. the namespace is ambiguous)
-*/
-#define LIBT2N_DEFAULT_ARG(type,value) __attribute__((annotate("libt2n-default-arg,"#value))) type = value
-
#else
// used during regular compile
#define LIBT2N_EXPORT
-#define LIBT2N_DEFAULT_ARG(type,value) type = value
#endif
assert(arg->get_attribute("type"));
a.type=get_type(root, arg->get_attribute("type")->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 = "annotate(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);
- }
+ if(arg->get_attribute("default"))
+ a.defaultArg=arg->get_attribute("default")->get_value();
// todo: ugly - could be any other error
if (a.type.name.empty())