From 810c06c6db23a4334a434b2b8cfce10d2d8d8e71 Mon Sep 17 00:00:00 2001
From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com>
Date: Wed, 20 Feb 2013 21:03:34 -0500
Subject: [PATCH] Desugaring functions are all done! But we're not ready for
 the CF backends yet because desugared structures still need to be stashed in
 the parser.

---
 src/hammer.h           | 3 +++
 src/parsers/indirect.c | 6 ++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/hammer.h b/src/hammer.h
index e337b493..13724cac 100644
--- a/src/hammer.h
+++ b/src/hammer.h
@@ -112,10 +112,13 @@ typedef bool (*HPredicate)(HParseResult *p);
 
 typedef struct HParserVtable_ HParserVtable;
 
+typedef struct HCFChoice_ HCFChoice; // forward declaration
+
 typedef struct HParser_ {
   const HParserVtable *vtable;
   void *env;
   void *data; /* e.g., parse tables */
+  HCFChoice *desugared; /* if the parser can be desugared, its desugared form */
 } HParser;
 
 // {{{ Stuff for benchmarking
diff --git a/src/parsers/indirect.c b/src/parsers/indirect.c
index ed556270..c6935489 100644
--- a/src/parsers/indirect.c
+++ b/src/parsers/indirect.c
@@ -10,8 +10,10 @@ static bool indirect_isValidCF(void *env) {
   return inner->vtable->isValidCF(inner->env);
 }
 
-static HCFChoice desugar_indirect(HAllocator *mm__, void *env) {
-
+static HCFChoice* desugar_indirect(HAllocator *mm__, void *env) {
+  HParser *p = (HParser*)env;
+  HParser *inner = (HParser*)p->env;
+  return inner->desugared;
 }
 
 static const HParserVtable indirect_vt = {
-- 
GitLab