From 10c8b0bd22bd1f172fb04aa2434e40035accd626 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Tue, 19 Nov 2013 19:00:58 -0600 Subject: [PATCH] fixed the segfault! hand-initialized HParser needed PB_MIN set. --- src/bindings/python/SConscript | 6 +++--- src/bindings/python/hammer_tests.py | 8 ++++---- src/parsers/choice.c | 4 +++- src/parsers/sequence.c | 4 +++- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/bindings/python/SConscript b/src/bindings/python/SConscript index 30d387c..0bde353 100644 --- a/src/bindings/python/SConscript +++ b/src/bindings/python/SConscript @@ -6,15 +6,15 @@ pythonenv = env.Clone(IMPLICIT_COMMAND_DEPENDENCIES = 0) pythonenv.Append(CPPPATH = ['../../', '/usr/include/python2.7']) pythonenv.Append(CCFLAGS = ['-fpic', '-DSWIG', '-Wno-all', '-Wno-extra', '-Wno-error']) -#pythonenv.Append(LIBS = ['hammer']) -#pythonenv.Append(LIBPATH = ['../../']) +pythonenv.Append(LIBS = ['hammer']) +pythonenv.Append(LIBPATH = ['../../']) pythonenv.Append(SWIGFLAGS = ['-DHAMMER_INTERNAL__NO_STDARG_H', '-Isrc/', '-python']) pythonenv.Command("hammer.i", "../swig/hammer.i", Copy("$TARGET", "$SOURCE")) swig = ['hammer.i'] -libhammer_python = pythonenv.SharedLibrary('hammer', libhammer_shared + swig, SHLIBPREFIX='_') +libhammer_python = pythonenv.SharedLibrary('hammer', swig, SHLIBPREFIX='_') pytestenv = pythonenv.Clone() pytestenv['ENV']['LD_LIBRARY_PATH'] = os.path.dirname(str(libhammer_shared[0])) diff --git a/src/bindings/python/hammer_tests.py b/src/bindings/python/hammer_tests.py index 9d0c487..41cd13f 100644 --- a/src/bindings/python/hammer_tests.py +++ b/src/bindings/python/hammer_tests.py @@ -477,7 +477,7 @@ class TestNot2(unittest.TestCase): # # def test_failure(self): # # pass -class TestARightrec(unittest.TestCase): +class TestRightrec(unittest.TestCase): @classmethod def setUpClass(cls): cls.parser = h.h_indirect() @@ -486,13 +486,13 @@ class TestARightrec(unittest.TestCase): def test_success(self): tree = h.h_parse(self.parser, "a", 1).ast.token_data.seq self.assertEqual(tree[0].token_data.uint, ord("a")) - tree = h_parse(self.parser, "aa", 2).ast.token_data.seq + tree = h.h_parse(self.parser, "aa", 2).ast.token_data.seq self.assertEqual(tree[0].token_data.uint, ord("a")) self.assertEqual(tree[1].token_data.seq[0].token_data.uint, ord("a")) - tree = h_parse(self.parser, "aaa", 3).ast.token_data.seq + tree = h.h_parse(self.parser, "aaa", 3).ast.token_data.seq self.assertEqual(tree[0].token_data.uint, ord("a")) self.assertEqual(tree[1].token_data.seq[0].token_data.uint, ord("a")) - self.assertEqual(tree[1].token_data.seq[1].token_data.seq[0].uint, ord("a")) + self.assertEqual(tree[1].token_data.seq[1].token_data.seq[0].token_data.uint, ord("a")) def test_failure(self): pass diff --git a/src/parsers/choice.c b/src/parsers/choice.c index 6db1378..bfc3f90 100644 --- a/src/parsers/choice.c +++ b/src/parsers/choice.c @@ -143,6 +143,8 @@ HParser* h_choice__ma(HAllocator* mm__, void *args[]) { s->len = len; HParser *ret = h_new(HParser, 1); - ret->vtable = &choice_vt; ret->env = (void*)s; + ret->vtable = &choice_vt; + ret->env = (void*)s; + ret->backend = PB_MIN; return ret; } diff --git a/src/parsers/sequence.c b/src/parsers/sequence.c index eff4610..281b78f 100644 --- a/src/parsers/sequence.c +++ b/src/parsers/sequence.c @@ -159,6 +159,8 @@ HParser* h_sequence__ma(HAllocator* mm__, void *args[]) { s->len = len; HParser *ret = h_new(HParser, 1); - ret->vtable = &sequence_vt; ret->env = (void*)s; + ret->vtable = &sequence_vt; + ret->env = (void*)s; + ret->backend = PB_MIN; return ret; }