dbus-c++: dbusxx-xml2cpp -- legalize identifiers for proxy.
This makes dbusxx-xml2cpp generate correct proxy C++ for
org.freedesktop.ModemManager.Modem.xml (argument "new") and for
org.freedesktop.ModemManager.Modem.Cdma.xml (arguments "cdma-1x-state" and
"evdo-state").
BUG=chromium-os:18498
TEST=build_packages --nousepkg
Change-Id: I10928ba9657cc7696a8a4444ece2ca5bacc503d8
Reviewed-on: http://gerrit.chromium.org/gerrit/5096
Tested-by: Darin Petkov <[email protected]>
Reviewed-by: Eric Shienbrood <[email protected]>
diff --git a/tools/generate_adaptor.cpp b/tools/generate_adaptor.cpp
index ebae98f..dbfa5bf 100644
--- a/tools/generate_adaptor.cpp
+++ b/tools/generate_adaptor.cpp
@@ -35,24 +35,6 @@
extern const char *header;
extern const char *dbus_includes;
-/*
- * Convert '-' characters found in the XML
- * introspection into '_' characters, so
- * that the result will be a legal C++
- * identifier.
- */
-static string legalize(string input)
-{
- size_t pos = 0;
-
- while (pos != string::npos) {
- pos = input.find('-', pos);
- if (pos != string::npos)
- input[pos] = '_';
- }
- return input;
-}
-
/*! Generate adaptor code for object methods
*/
void generate_methods(const Xml::Nodes &methods, ostringstream &body) {
diff --git a/tools/generate_proxy.cpp b/tools/generate_proxy.cpp
index cfece45..b7df947 100644
--- a/tools/generate_proxy.cpp
+++ b/tools/generate_proxy.cpp
@@ -143,7 +143,7 @@
if (property_access == "read" || property_access == "readwrite")
{
body << tab << tab << "const " << signature_to_type (property.get("type"))
- << " " << prop_name << "() {" << endl;
+ << " " << legalize(prop_name) << "() {" << endl;
body << tab << tab << tab << "::DBus::CallMessage call ;\n ";
body << tab << tab << tab
<< "call.member(\"Get\"); call.interface(\"org.freedesktop.DBus.Properties\");"
@@ -170,7 +170,7 @@
if (property_access == "write" || property_access == "readwrite")
{
- body << tab << tab << "void " << prop_name << "( const "<< signature_to_type (property.get("type")) << " & input" << ") {" << endl;
+ body << tab << tab << "void " << legalize(prop_name) << "( const "<< signature_to_type (property.get("type")) << " & input" << ") {" << endl;
body << tab << tab << tab << "::DBus::CallMessage call ;\n ";
body << tab << tab << tab <<"call.member(\"Set\"); call.interface( \"org.freedesktop.DBus.Properties\");"<< endl;
body << tab << tab << tab <<"::DBus::MessageIter wi = call.writer(); " << endl;
@@ -222,7 +222,7 @@
string arg_name = arg.get("name");
if (arg_name.length())
- body << arg_name;
+ body << legalize(arg_name);
else
body << "argin" << i;
@@ -240,7 +240,7 @@
string arg_name = arg.get("name");
if (arg_name.length())
- body << " " << arg_name;
+ body << " " << legalize(arg_name);
else
body << " argout" << i;
@@ -265,7 +265,7 @@
Xml::Node &arg = **ai;
string arg_name = arg.get("name");
if (arg_name.length())
- body << tab << tab << "wi << " << arg_name << ";" << endl;
+ body << tab << tab << "wi << " << legalize(arg_name) << ";" << endl;
else
body << tab << tab << "wi << argin" << j << ";" << endl;
}
@@ -295,7 +295,7 @@
string arg_name = arg.get("name");
if (arg_name.length())
- body << tab << tab << "ri >> " << arg.get("name") << ";" << endl;
+ body << tab << tab << "ri >> " << legalize(arg.get("name")) << ";" << endl;
else
body << tab << tab << "ri >> argout" << i << ";" << endl;
}
@@ -329,7 +329,7 @@
string arg_name = arg.get("name");
if (arg_name.length())
- body << arg_name;
+ body << legalize(arg_name);
else
body << "argin" << i;
@@ -369,7 +369,7 @@
string arg_name = arg.get("name");
if (arg_name.length())
- body << arg_name << ";" << " ri >> " << arg_name << ";" << endl;
+ body << legalize(arg_name) << ";" << " ri >> " << legalize(arg_name) << ";" << endl;
else
body << "arg" << i << ";" << " ri >> " << "arg" << i << ";" << endl;
}
@@ -384,7 +384,7 @@
string arg_name = arg.get("name");
if (arg_name.length())
- body << arg_name;
+ body << legalize(arg_name);
else
body << "arg" << j;
diff --git a/tools/generator_utils.cpp b/tools/generator_utils.cpp
index e08ad27..2e44a70 100644
--- a/tools/generator_utils.cpp
+++ b/tools/generator_utils.cpp
@@ -50,6 +50,18 @@
}
}
+std::string legalize(const std::string &str)
+{
+ string legal = str;
+ underscorize(legal);
+ // TODO: Check for other C++ keywords, as needed.
+ if (legal == "new")
+ {
+ legal = "_" + legal;
+ }
+ return legal;
+}
+
string stub_name(string name)
{
underscorize(name);
diff --git a/tools/generator_utils.h b/tools/generator_utils.h
index b8cc7e9..0875faf 100644
--- a/tools/generator_utils.h
+++ b/tools/generator_utils.h
@@ -33,5 +33,6 @@
std::string signature_to_type(const std::string &signature);
void _parse_signature(const std::string &signature, std::string &type, unsigned int &i);
void underscorize(std::string &str);
+std::string legalize(const std::string &str);
#endif//__DBUSXX_TOOLS_GENERATOR_UTILS_H