From b4e28ac021d50eaa20a8e2ccf01d557e85bb52ab Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Tue, 19 Nov 2013 19:05:48 -0600 Subject: [PATCH 1/2] Fixed a potential segfault; hand-initialized HParsers in h_choice and h_sequence need PB_MIN set. Conflicts: src/bindings/python/SConscript src/bindings/python/hammer_tests.py --- src/parsers/choice.c | 4 +++- src/parsers/sequence.c | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/parsers/choice.c b/src/parsers/choice.c index 6db1378..bb55fa8 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..bdea8c0 100644 --- a/src/parsers/sequence.c +++ b/src/parsers/sequence.c @@ -145,20 +145,22 @@ HParser* h_sequence__a(void *args[]) { HParser* h_sequence__ma(HAllocator* mm__, void *args[]) { size_t len = -1; // because do...while const HParser *arg; - + do { arg=((HParser **)args)[++len]; } while(arg); - + HSequence *s = h_new(HSequence, 1); s->p_array = h_new(HParser *, len); for (size_t i = 0; i < len; i++) { s->p_array[i] = ((HParser **)args)[i]; } - + 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; } From 91221ac2563b301ccc3bd3dcec8bdf4dd1356e8d Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" Date: Tue, 19 Nov 2013 20:46:34 -0600 Subject: [PATCH 2/2] tweak SConstruct so that 'scan-build scons' works --- SConstruct | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SConstruct b/SConstruct index 623bc5d..78090c3 100644 --- a/SConstruct +++ b/SConstruct @@ -68,10 +68,15 @@ if GetOption("coverage"): LDFLAGS=["-fprofile-arcs", "-ftest-coverage"], LIBS=['gcov']) +env["CC"] = os.getenv("CC") or env["CC"] +env["CXX"] = os.getenv("CXX") or env["CXX"] + if os.getenv("CC") == "clang" or env['PLATFORM'] == 'darwin': env.Replace(CC="clang", CXX="clang++") +env["ENV"].update(x for x in os.environ.items() if x[0].startswith("CCC_")) + #rootpath = env['ROOTPATH'] = os.path.abspath('.') #env.Append(CPPPATH=os.path.join('#', "hammer"))