From ffd050e6034af280618a7e02e4d8ad992b542833 Mon Sep 17 00:00:00 2001
From: Dan Hirsch <thequux@upstandinghackers.com>
Date: Sat, 16 Mar 2013 14:30:15 -0700
Subject: [PATCH] Added generic form of desugaring functions

---
 src/Makefile           | 1 +
 src/internal.h         | 2 ++
 src/parsers/sequence.c | 2 +-
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/Makefile b/src/Makefile
index 128de050..84970c92 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -34,6 +34,7 @@ HAMMER_PARTS := \
 	bitwriter.o \
 	pprint.o \
 	allocator.o \
+	desugar.o \
 	datastructures.o \
 	system_allocator.o \
 	benchmark.o \
diff --git a/src/internal.h b/src/internal.h
index 279f9980..2386e4e7 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -224,6 +224,8 @@ long long h_read_bits(HInputStream* state, int count, char signed_p);
 HParseResult* h_do_parse(const HParser* parser, HParseState *state);
 void put_cached(HParseState *ps, const HParser *p, HParseResult *cached);
 
+HCFChoice *h_desugar(HAllocator *mm__, HParser *parser);
+
 HCountedArray *h_carray_new_sized(HArena * arena, size_t size);
 HCountedArray *h_carray_new(HArena * arena);
 void h_carray_append(HCountedArray *array, void* item);
diff --git a/src/parsers/sequence.c b/src/parsers/sequence.c
index b15b168d..eb215a94 100644
--- a/src/parsers/sequence.c
+++ b/src/parsers/sequence.c
@@ -47,7 +47,7 @@ static HCFChoice* desugar_sequence(HAllocator *mm__, void *env) {
   HCFSequence *seq = h_new(HCFSequence, 1);
   seq->items = h_new(HCFChoice*, s->len+1);
   for (size_t i=0; i<s->len; ++i) {
-    seq->items[i] = s->p_array[i]->vtable->desugar(mm__, s->p_array[i]->env);
+    seq->items[i] = h_desugar(s->p_array[i]);
   }
   seq->items[s->len] = NULL;
   HCFChoice *ret = h_new(HCFChoice, 1);
-- 
GitLab