Merge pull request #18 from pesco/h_action_fail

call actions only on successful parse
This commit is contained in:
Meredith L. Patterson 2012-06-12 21:18:04 -07:00
commit 03a1a3c6f0
2 changed files with 6 additions and 2 deletions

View file

@ -426,6 +426,7 @@ static void test_action(void) {
g_check_parse_ok(action_, "ab", 2, "(u0x41 u0x42)");
g_check_parse_ok(action_, "AB", 2, "(u0x41 u0x42)");
g_check_parse_failed(action_, "XX", 2);
}
static void test_not_in(void) {

View file

@ -10,8 +10,11 @@ static HParseResult* parse_action(void *env, HParseState *state) {
if (a->p && a->action) {
HParseResult *tmp = h_do_parse(a->p, state);
//HParsedToken *tok = a->action(h_do_parse(a->p, state));
const HParsedToken *tok = a->action(tmp);
return make_result(state, (HParsedToken*)tok);
if(tmp) {
const HParsedToken *tok = a->action(tmp);
return make_result(state, (HParsedToken*)tok);
} else
return NULL;
} else // either the parser's missing or the action's missing
return NULL;
}