diff --git a/wrap/Module.cpp b/wrap/Module.cpp index 4fc53268c..6154a2178 100644 --- a/wrap/Module.cpp +++ b/wrap/Module.cpp @@ -217,21 +217,27 @@ void Module::parseMarkup(const std::string& data) { Rule namespace_ret_p = namespace_name_p[push_back_a(namespaces_return)] >> str_p("::"); -// Rule returnType1_p = -// (basisType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::BASIS)]) | -// ((*namespace_ret_p)[assign_a(retVal.namespaces1, namespaces_return)][clear_a(namespaces_return)] -// >> (className_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::CLASS)]) >> -// !ch_p('*')[assign_a(retVal.isPtr1,true)]) | -// (eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::EIGEN)]) -// | str_p("void")[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::VOID)]; // FIXME: allows for void in a pair + // const values + static const ReturnValue::return_category RETURN_EIGEN = ReturnValue::EIGEN; + static const ReturnValue::return_category RETURN_BASIS = ReturnValue::BASIS; + static const ReturnValue::return_category RETURN_CLASS = ReturnValue::CLASS; + static const ReturnValue::return_category RETURN_VOID = ReturnValue::VOID; - // current revision + // alternate version 1 +// Rule returnType1_p = +// basisType_p[assign_a(retVal.category1, ReturnValue::BASIS)][assign_a(retVal.type1)] | +// eigenType_p[assign_a(retVal.category1, ReturnValue::EIGEN)][assign_a(retVal.type1)] | +// ((*namespace_ret_p)[assign_a(retVal.namespaces1, namespaces_return)][clear_a(namespaces_return)] +// >> (className_p[assign_a(retVal.category1, ReturnValue::CLASS)][assign_a(retVal.type1)]) >> +// !ch_p('*')[assign_a(retVal.isPtr1,true)]); + + // switching to using constants Rule returnType1_p = - basisType_p[assign_a(retVal.category1, ReturnValue::BASIS)][assign_a(retVal.type1)] | + (basisType_p[assign_a(retVal.type1)][assign_a(retVal.category1, RETURN_BASIS)]) | ((*namespace_ret_p)[assign_a(retVal.namespaces1, namespaces_return)][clear_a(namespaces_return)] - >> (className_p[assign_a(retVal.category1, ReturnValue::CLASS)][assign_a(retVal.type1)]) >> - !ch_p('*')[assign_a(retVal.isPtr1,true)]) | - eigenType_p[assign_a(retVal.category1, ReturnValue::EIGEN)][assign_a(retVal.type1)]; + >> (className_p[assign_a(retVal.type1)][assign_a(retVal.category1, RETURN_CLASS)]) >> + !ch_p('*')[assign_a(retVal.isPtr1,true)]) | + (eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, RETURN_EIGEN)]); // Original // Rule returnType1_p = @@ -240,22 +246,29 @@ void Module::parseMarkup(const std::string& data) { // >> (className_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::CLASS)]) >> // !ch_p('*')[assign_a(retVal.isPtr1,true)]) | // (eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::EIGEN)]); - + Rule returnType2_p = - (basisType_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::BASIS)]) | + (basisType_p[assign_a(retVal.type2)][assign_a(retVal.category2, RETURN_BASIS)]) | ((*namespace_ret_p)[assign_a(retVal.namespaces2, namespaces_return)][clear_a(namespaces_return)] - >> (className_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::CLASS)]) >> + >> (className_p[assign_a(retVal.type2)][assign_a(retVal.category2, RETURN_CLASS)]) >> !ch_p('*') [assign_a(retVal.isPtr2,true)]) | - (eigenType_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::EIGEN)]); + (eigenType_p[assign_a(retVal.type2)][assign_a(retVal.category2, RETURN_EIGEN)]); + + // Original +// Rule returnType2_p = +// (basisType_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::BASIS)]) | +// ((*namespace_ret_p)[assign_a(retVal.namespaces2, namespaces_return)][clear_a(namespaces_return)] +// >> (className_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::CLASS)]) >> +// !ch_p('*') [assign_a(retVal.isPtr2,true)]) | +// (eigenType_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::EIGEN)]); Rule pair_p = (str_p("pair") >> '<' >> returnType1_p >> ',' >> returnType2_p >> '>') [assign_a(retVal.isPair,true)]; - Rule void_p = str_p("void")[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::VOID)]; + Rule void_p = str_p("void")[assign_a(retVal.type1)][assign_a(retVal.category1, RETURN_VOID)]; - Rule returnType_p = void_p | returnType1_p | pair_p; // original -// Rule returnType_p = returnType1_p | pair_p; + Rule returnType_p = void_p | returnType1_p | pair_p; Rule methodName_p = lexeme_d[lower_p >> *(alnum_p | '_')]; diff --git a/wrap/ReturnValue.cpp b/wrap/ReturnValue.cpp index c7902e60f..3cb68181b 100644 --- a/wrap/ReturnValue.cpp +++ b/wrap/ReturnValue.cpp @@ -55,12 +55,6 @@ void ReturnValue::wrap_result(const string& result, FileWriter& file, const Type // For a pair, store the returned pair so we do not evaluate the function twice file.oss << " " << return_type(false, pair) << " pairResult = " << result << ";\n"; - // sanity check values - if ((category1 != ReturnValue::CLASS) || (category1 != ReturnValue::EIGEN) || (category1 != ReturnValue::BASIS)) - throw invalid_argument("ReturnValue::wrap_result() FAILURE: invalid first member of pair "); - if ((category2 != ReturnValue::CLASS) || (category2 != ReturnValue::EIGEN) || (category2 != ReturnValue::BASIS)) - throw invalid_argument("ReturnValue::wrap_result() FAILURE: invalid second member of pair "); - // first return value in pair if (category1 == ReturnValue::CLASS) { // if we are going to make one string objCopy, ptrType; @@ -107,9 +101,6 @@ void ReturnValue::wrap_result(const string& result, FileWriter& file, const Type } else file.oss << " out[1] = wrap< " << return_type(true,arg2) << " >(pairResult.second);\n"; } else { // Not a pair - // sanity check values - if ((category1 != ReturnValue::CLASS) || (category1 != ReturnValue::EIGEN) || (category1 != ReturnValue::BASIS)) - throw invalid_argument("ReturnValue::wrap_result() FAILURE: return non-void flag "); if (category1 == ReturnValue::CLASS) { string objCopy, ptrType; diff --git a/wrap/ReturnValue.h b/wrap/ReturnValue.h index f83ff507f..7a677532f 100644 --- a/wrap/ReturnValue.h +++ b/wrap/ReturnValue.h @@ -24,13 +24,12 @@ struct ReturnValue { CLASS = 1, EIGEN = 2, BASIS = 3, - VOID = 4, - DUMMY_CATEGORY = 5 + VOID = 4 } return_category; ReturnValue(bool enable_verbosity = true) : verbose(enable_verbosity), isPtr1(false), isPtr2(false), - isPair(false), category1(DUMMY_CATEGORY), category2(DUMMY_CATEGORY) + isPair(false), category1(CLASS), category2(CLASS) {} bool verbose;