Simple hack around assigning return category flags, tests pass in debug, fail on pointer argument passing in release mode
parent
ab7655e5eb
commit
2f44bc0a1a
|
@ -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 namespace_ret_p = namespace_name_p[push_back_a(namespaces_return)] >> str_p("::");
|
||||||
|
|
||||||
// Rule returnType1_p =
|
// const values
|
||||||
// (basisType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::BASIS)]) |
|
static const ReturnValue::return_category RETURN_EIGEN = ReturnValue::EIGEN;
|
||||||
// ((*namespace_ret_p)[assign_a(retVal.namespaces1, namespaces_return)][clear_a(namespaces_return)]
|
static const ReturnValue::return_category RETURN_BASIS = ReturnValue::BASIS;
|
||||||
// >> (className_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::CLASS)]) >>
|
static const ReturnValue::return_category RETURN_CLASS = ReturnValue::CLASS;
|
||||||
// !ch_p('*')[assign_a(retVal.isPtr1,true)]) |
|
static const ReturnValue::return_category RETURN_VOID = ReturnValue::VOID;
|
||||||
// (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
|
|
||||||
|
|
||||||
// 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 =
|
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)]
|
((*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)]) >>
|
>> (className_p[assign_a(retVal.type1)][assign_a(retVal.category1, RETURN_CLASS)]) >>
|
||||||
!ch_p('*')[assign_a(retVal.isPtr1,true)]) |
|
!ch_p('*')[assign_a(retVal.isPtr1,true)]) |
|
||||||
eigenType_p[assign_a(retVal.category1, ReturnValue::EIGEN)][assign_a(retVal.type1)];
|
(eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, RETURN_EIGEN)]);
|
||||||
|
|
||||||
// Original
|
// Original
|
||||||
// Rule returnType1_p =
|
// Rule returnType1_p =
|
||||||
|
@ -242,20 +248,27 @@ void Module::parseMarkup(const std::string& data) {
|
||||||
// (eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::EIGEN)]);
|
// (eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::EIGEN)]);
|
||||||
|
|
||||||
Rule returnType2_p =
|
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)]
|
((*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)]) |
|
!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 =
|
Rule pair_p =
|
||||||
(str_p("pair") >> '<' >> returnType1_p >> ',' >> returnType2_p >> '>')
|
(str_p("pair") >> '<' >> returnType1_p >> ',' >> returnType2_p >> '>')
|
||||||
[assign_a(retVal.isPair,true)];
|
[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 = void_p | returnType1_p | pair_p;
|
||||||
// Rule returnType_p = returnType1_p | pair_p;
|
|
||||||
|
|
||||||
Rule methodName_p = lexeme_d[lower_p >> *(alnum_p | '_')];
|
Rule methodName_p = lexeme_d[lower_p >> *(alnum_p | '_')];
|
||||||
|
|
||||||
|
|
|
@ -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
|
// For a pair, store the returned pair so we do not evaluate the function twice
|
||||||
file.oss << " " << return_type(false, pair) << " pairResult = " << result << ";\n";
|
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
|
// first return value in pair
|
||||||
if (category1 == ReturnValue::CLASS) { // if we are going to make one
|
if (category1 == ReturnValue::CLASS) { // if we are going to make one
|
||||||
string objCopy, ptrType;
|
string objCopy, ptrType;
|
||||||
|
@ -107,9 +101,6 @@ void ReturnValue::wrap_result(const string& result, FileWriter& file, const Type
|
||||||
} else
|
} else
|
||||||
file.oss << " out[1] = wrap< " << return_type(true,arg2) << " >(pairResult.second);\n";
|
file.oss << " out[1] = wrap< " << return_type(true,arg2) << " >(pairResult.second);\n";
|
||||||
} else { // Not a pair
|
} 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) {
|
if (category1 == ReturnValue::CLASS) {
|
||||||
string objCopy, ptrType;
|
string objCopy, ptrType;
|
||||||
|
|
|
@ -24,13 +24,12 @@ struct ReturnValue {
|
||||||
CLASS = 1,
|
CLASS = 1,
|
||||||
EIGEN = 2,
|
EIGEN = 2,
|
||||||
BASIS = 3,
|
BASIS = 3,
|
||||||
VOID = 4,
|
VOID = 4
|
||||||
DUMMY_CATEGORY = 5
|
|
||||||
} return_category;
|
} return_category;
|
||||||
|
|
||||||
ReturnValue(bool enable_verbosity = true)
|
ReturnValue(bool enable_verbosity = true)
|
||||||
: verbose(enable_verbosity), isPtr1(false), isPtr2(false),
|
: verbose(enable_verbosity), isPtr1(false), isPtr2(false),
|
||||||
isPair(false), category1(DUMMY_CATEGORY), category2(DUMMY_CATEGORY)
|
isPair(false), category1(CLASS), category2(CLASS)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
bool verbose;
|
bool verbose;
|
||||||
|
|
Loading…
Reference in New Issue