From bc69b2796decdafb3b1e344a60ca0a088e7c3c65 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 23 Oct 2014 09:49:35 +0200 Subject: [PATCH] Improve parsing of enum values in lp_gen_wrappers to support octal and hexadecimal values. --- tools/genwrappers.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/genwrappers.cc b/tools/genwrappers.cc index 5f942002f..26ad7acc1 100644 --- a/tools/genwrappers.cc +++ b/tools/genwrappers.cc @@ -24,7 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include -#include #include #include #include @@ -339,7 +338,19 @@ static void parseEnum(Project *proj, XmlNode node){ int value = 0; for (it=enumValues.begin();it!=enumValues.end();++it){ string initializer = (*it).getChild("initializer").getText(); - if (initializer.length() > 1) value=atoi(initializer.substr(1).c_str()); + if ((initializer.length() > 1) && (initializer.at(0) == '=')) { + std::stringstream ss; + if ((initializer.length() > 2) && (initializer.at(1) == '0')) { + if ((initializer.length() > 3) && (initializer.at(2) == 'x')) { + ss << std::hex << initializer.substr(3); + } else { + ss << std::oct << initializer.substr(2); + } + } else { + ss << std::dec << initializer.substr(1); + } + ss >> value; + } ConstField *cf=new ConstField(Type::getType("int"),(*it).getChild("name").getText(),value); cf->setHelp((*it).getChild("detaileddescription").getChild("para").getText()); klass->addConstField(cf);