Small variations on parser to try to debug problem
parent
16ad77cb53
commit
47fcb17ead
|
@ -200,13 +200,28 @@ Module::Module(const string& interfacePath,
|
|||
|
||||
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)]) |
|
||||
// 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
|
||||
|
||||
// Rule returnType1_p =
|
||||
// (eigenType_p[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::EIGEN)]) |
|
||||
// (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)]);
|
||||
|
||||
// Original
|
||||
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)];
|
||||
|
||||
Rule returnType2_p =
|
||||
(basisType_p[assign_a(retVal.type2)][assign_a(retVal.category2, ReturnValue::BASIS)]) |
|
||||
|
@ -221,7 +236,8 @@ Module::Module(const string& interfacePath,
|
|||
|
||||
Rule void_p = str_p("void")[assign_a(retVal.type1)][assign_a(retVal.category1, ReturnValue::VOID)];
|
||||
|
||||
Rule returnType_p = void_p | returnType1_p | pair_p;
|
||||
Rule returnType_p = void_p | returnType1_p | pair_p; // original
|
||||
// Rule returnType_p = returnType1_p | pair_p;
|
||||
|
||||
Rule methodName_p = lexeme_d[lower_p >> *(alnum_p | '_')];
|
||||
|
||||
|
|
|
@ -21,23 +21,23 @@ namespace wrap {
|
|||
struct ReturnValue {
|
||||
|
||||
typedef enum {
|
||||
CLASS = 0,
|
||||
EIGEN = 1,
|
||||
BASIS = 2,
|
||||
VOID = 3
|
||||
CLASS = 1,
|
||||
EIGEN = 2,
|
||||
BASIS = 3,
|
||||
VOID = 4,
|
||||
DUMMY_CATEGORY = 5
|
||||
} return_category;
|
||||
|
||||
ReturnValue(bool enable_verbosity = true)
|
||||
: verbose(enable_verbosity), isPtr1(false), isPtr2(false),
|
||||
isPair(false), category1(CLASS), category2(CLASS)
|
||||
isPair(false), category1(DUMMY_CATEGORY), category2(DUMMY_CATEGORY)
|
||||
{}
|
||||
|
||||
bool verbose;
|
||||
std::string type1, type2;
|
||||
bool isPtr1, isPtr2, isPair;
|
||||
std::vector<std::string> namespaces1, namespaces2;
|
||||
|
||||
return_category category1, category2;
|
||||
std::string type1, type2;
|
||||
std::vector<std::string> namespaces1, namespaces2;
|
||||
|
||||
typedef enum {
|
||||
arg1, arg2, pair
|
||||
|
|
|
@ -87,6 +87,13 @@ TEST( wrap, parse_geometry ) {
|
|||
|
||||
LONGS_EQUAL(3, module.classes.size());
|
||||
|
||||
// Key for ReturnValue::return_category
|
||||
// CLASS = 1,
|
||||
// EIGEN = 2,
|
||||
// BASIS = 3,
|
||||
// VOID = 4,
|
||||
// DUMMY = 5
|
||||
|
||||
{
|
||||
// check first class
|
||||
// class Point2 {
|
||||
|
@ -112,7 +119,7 @@ TEST( wrap, parse_geometry ) {
|
|||
Method m1 = cls.methods.find("returnChar")->second;
|
||||
LONGS_EQUAL(1, m1.returnVals.size());
|
||||
EXPECT(assert_equal("char", m1.returnVals.front().type1));
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::BASIS, m1.returnVals.front().category1); // FAIL: gets 0 instead of 2
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::BASIS, m1.returnVals.front().category1); // FAIL: gets 1 instead of 3
|
||||
EXPECT(!m1.returnVals.front().isPair);
|
||||
EXPECT(assert_equal("returnChar", m1.name));
|
||||
LONGS_EQUAL(1, m1.argLists.size());
|
||||
|
@ -126,7 +133,7 @@ TEST( wrap, parse_geometry ) {
|
|||
Method m1 = cls.methods.find("vectorConfusion")->second;
|
||||
LONGS_EQUAL(1, m1.returnVals.size());
|
||||
EXPECT(assert_equal("VectorNotEigen", m1.returnVals.front().type1));
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::CLASS, m1.returnVals.front().category1); // FAIL: gets 1 instead of 0
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::CLASS, m1.returnVals.front().category1); // FAIL: gets 0 instead of 1
|
||||
EXPECT(!m1.returnVals.front().isPair);
|
||||
EXPECT(assert_equal("vectorConfusion", m1.name));
|
||||
LONGS_EQUAL(1, m1.argLists.size());
|
||||
|
@ -163,7 +170,7 @@ TEST( wrap, parse_geometry ) {
|
|||
Method m1 = cls.methods.find("norm")->second;
|
||||
LONGS_EQUAL(1, m1.returnVals.size());
|
||||
EXPECT(assert_equal("double", m1.returnVals.front().type1));
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::BASIS, m1.returnVals.front().category1); // FAIL: gets 0 instead of 2 - defaulting to CLASS
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::BASIS, m1.returnVals.front().category1); // FAIL: gets 1 instead of 3
|
||||
EXPECT(assert_equal("norm", m1.name));
|
||||
LONGS_EQUAL(1, m1.argLists.size());
|
||||
EXPECT_LONGS_EQUAL(0, m1.argLists.front().size());
|
||||
|
@ -183,9 +190,9 @@ TEST( wrap, parse_geometry ) {
|
|||
Method m2 = testCls.methods.find("return_pair")->second;
|
||||
LONGS_EQUAL(1, m2.returnVals.size());
|
||||
EXPECT(m2.returnVals.front().isPair);
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::EIGEN, m2.returnVals.front().category1); // FIXME: gets different large numbers - latest: 6152961
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::EIGEN, m2.returnVals.front().category1); // FAIL: gets 1 instead of 2
|
||||
EXPECT(assert_equal("Vector", m2.returnVals.front().type1));
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::EIGEN, m2.returnVals.front().category2); // FIXME: see above
|
||||
EXPECT_LONGS_EQUAL(ReturnValue::EIGEN, m2.returnVals.front().category2); // FAIL: gets 6201089 instead of 2
|
||||
EXPECT(assert_equal("Matrix", m2.returnVals.front().type2));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue