From 875c9b9c57154cbeaf2b34afd9980e6875a41885 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com> Date: Mon, 18 Mar 2013 01:18:39 -0400 Subject: [PATCH] rvm instructions for ch(); fixed a declaration in optional() --- src/parsers/ch.c | 8 ++++++++ src/parsers/optional.c | 7 ++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/parsers/ch.c b/src/parsers/ch.c index 8b67744e..1f6526a5 100644 --- a/src/parsers/ch.c +++ b/src/parsers/ch.c @@ -12,10 +12,18 @@ static HParseResult* parse_ch(void* env, HParseState *state) { } } +static bool ch_ctrvm(HRVMProg *prog, void* env) { + uint8_t c = (uint8_t)(unsigned long)(env); + h_rvm_insert_insn(prog, RVM_MATCH, c & c << 8); + h_rvm_insert_insn(prog, RVM_STEP, 0); + return true; +} + static const HParserVtable ch_vt = { .parse = parse_ch, .isValidRegular = h_true, .isValidCF = h_true, + .compile_to_rvm = ch_ctrvm, }; const HParser* h_ch(const uint8_t c) { diff --git a/src/parsers/optional.c b/src/parsers/optional.c index 3d3e9f6a..203d4a7f 100644 --- a/src/parsers/optional.c +++ b/src/parsers/optional.c @@ -21,9 +21,10 @@ static bool opt_isValidCF(void *env) { return p->vtable->isValidCF(p->env); } -static bool opt_ctrvm(struct HRVMProg_ *prog, void* env) { +static bool opt_ctrvm(HRVMProg *prog, void* env) { uint16_t insn = h_rvm_insert_insn(prog, RVM_FORK, 0); - if (!h_compile_regex(prog, (HParser*)env->env)) + HParser *p = (HParser*) env; + if (!h_compile_regex(prog, p->env)) return false; h_rvm_patch_arg(prog, insn, h_rvm_get_ip(prog)); return true; @@ -33,7 +34,7 @@ static const HParserVtable optional_vt = { .parse = parse_optional, .isValidRegular = opt_isValidRegular, .isValidCF = opt_isValidCF, - .compile_to_rvm = opt_ctvrm, + .compile_to_rvm = opt_ctrvm, }; const HParser* h_optional(const HParser* p) { -- GitLab