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