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
This commit is contained in:
parent
b6098075c7
commit
b4e28ac021
2 changed files with 9 additions and 5 deletions
|
|
@ -143,6 +143,8 @@ HParser* h_choice__ma(HAllocator* mm__, void *args[]) {
|
||||||
|
|
||||||
s->len = len;
|
s->len = len;
|
||||||
HParser *ret = h_new(HParser, 1);
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -145,20 +145,22 @@ HParser* h_sequence__a(void *args[]) {
|
||||||
HParser* h_sequence__ma(HAllocator* mm__, void *args[]) {
|
HParser* h_sequence__ma(HAllocator* mm__, void *args[]) {
|
||||||
size_t len = -1; // because do...while
|
size_t len = -1; // because do...while
|
||||||
const HParser *arg;
|
const HParser *arg;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
arg=((HParser **)args)[++len];
|
arg=((HParser **)args)[++len];
|
||||||
} while(arg);
|
} while(arg);
|
||||||
|
|
||||||
HSequence *s = h_new(HSequence, 1);
|
HSequence *s = h_new(HSequence, 1);
|
||||||
s->p_array = h_new(HParser *, len);
|
s->p_array = h_new(HParser *, len);
|
||||||
|
|
||||||
for (size_t i = 0; i < len; i++) {
|
for (size_t i = 0; i < len; i++) {
|
||||||
s->p_array[i] = ((HParser **)args)[i];
|
s->p_array[i] = ((HParser **)args)[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
s->len = len;
|
s->len = len;
|
||||||
HParser *ret = h_new(HParser, 1);
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue