From 5668b46f97ff3c6fe541f274c5b59d3841e6671f Mon Sep 17 00:00:00 2001
From: "Sven M. Hallberg" <pesco@khjk.org>
Date: Fri, 1 Jun 2012 19:41:56 +0200
Subject: [PATCH] skip previously parsed input in cache hit case

---
 src/hammer.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/hammer.c b/src/hammer.c
index 356a9bcb..707a1e9e 100644
--- a/src/hammer.c
+++ b/src/hammer.c
@@ -208,7 +208,14 @@ HParseResult* h_do_parse(const HParser* parser, HParseState *state) {
       setupLR(parser, state, m->left);
       return m->left->seed; // BUG: this might not be correct
     } else {
-      return m->right;
+      HParseResult *res = m->right;
+
+      // skip over the previously-parsed input
+      long long offs = res->bit_length + state->input_stream.bit_offset;
+      state->input_stream.index += offs >> 3;
+      state->input_stream.bit_offset = offs & 7;
+
+      return res;
     }
   }
 }
-- 
GitLab