diff --git a/src/backends/regex.c b/src/backends/regex.c index 53032de85e21d20177a97fe4309b4e42f2041d70..fa695d94e8b4cf5e8621eca6651c2537a85b8d84 100644 --- a/src/backends/regex.c +++ b/src/backends/regex.c @@ -213,7 +213,7 @@ HParseResult *run_trace(HAllocator *mm__, HRVMProg *orig_prog, HRVMTrace *trace, break; case SVM_ACTION: // Action should modify stack appropriately - if (!orig_prog->actions[cur->arg].fn(arena, &ctx, orig_prog->actions[cur->arg].env)) { + if (!orig_prog->actions[cur->arg].action(arena, &ctx, orig_prog->actions[cur->arg].env)) { // action failed... abort somehow // TODO: Actually abort } @@ -257,13 +257,13 @@ uint16_t h_rvm_create_action(HRVMProg *prog, HSVMActionFunc action_func, void* e // Ensure that there's room in the action array... if (!(prog->action_count & (prog->action_count + 1))) { // needs to be scaled up. - array_size = (prog->action_count + 1) * 2; // action_count+1 is a + size_t array_size = (prog->action_count + 1) * 2; // action_count+1 is a // power of two - prog->actions = prog->allocator->realloc(prog->actions, array_size * sizeof(*prog->actions)); + prog->actions = prog->allocator->realloc(prog->allocator, prog->actions, array_size * sizeof(*prog->actions)); // TODO: Handle the allocation failed case nicely. } - HAction *action = &prog->actions[prog->action_count]; + HSVMAction *action = &prog->actions[prog->action_count]; action->action = action_func; action->env = env; return prog->action_count++; @@ -273,9 +273,9 @@ uint16_t h_rvm_insert_insn(HRVMProg *prog, HRVMOp op, uint16_t arg) { // Ensure that there's room in the insn array... if (!(prog->length & (prog->length + 1))) { // needs to be scaled up. - array_size = (prog->length + 1) * 2; // action_count+1 is a - // power of two - prog->insns = prog->allocator->realloc(prog->insns, array_size * sizeof(*prog->insns)); + size_t array_size = (prog->length + 1) * 2; // action_count+1 is a + // power of two + prog->insns = prog->allocator->realloc(prog->allocator, prog->insns, array_size * sizeof(*prog->insns)); // TODO: Handle the allocation failed case nicely. } diff --git a/src/backends/regex.h b/src/backends/regex.h index 9d612987bf585a0fbd20c9ab178238f96f8d2828..3528e82fb5872d813b60ddce5683209ebf3906fc 100644 --- a/src/backends/regex.h +++ b/src/backends/regex.h @@ -39,7 +39,7 @@ typedef struct HSVMContext_ { // aliased anywhere. typedef bool (*HSVMActionFunc)(HArena *arena, HSVMContext *ctx, void* env); typedef struct HSVMAction_ { - HSVMActionFunc action + HSVMActionFunc action; void* env; } HSVMAction; diff --git a/src/hammer.h b/src/hammer.h index 1d8e2a86913576871dc709f16f4dc6fccafc91b4..ccb10c8d10a79aca72cc8f6aea359e89491f3e14 100644 --- a/src/hammer.h +++ b/src/hammer.h @@ -117,11 +117,12 @@ typedef const HParsedToken* (*HAction)(const HParseResult *p); */ typedef bool (*HPredicate)(HParseResult *p); +typedef struct HRVMProg_ HRVMProg; typedef struct HParserVtable_ { HParseResult* (*parse)(void *env, HParseState *state); bool (*isValidRegular)(void *env); bool (*isValidCF)(void *env); - bool (*compile_to_rvm)(struct HRVMProg_ *prog, void* env); + bool (*compile_to_rvm)(HRVMProg *prog, void* env); } HParserVtable; typedef struct HParser_ {