From 7180169af4e1cbc18fed839fd590aa77817a1f04 Mon Sep 17 00:00:00 2001
From: "Sven M. Hallberg" <pesco@khjk.org>
Date: Fri, 19 Apr 2013 15:20:09 +0200
Subject: [PATCH] save a parser's desugared form when h_desugar is called on it
 for the first time

---
 src/desugar.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/desugar.c b/src/desugar.c
index fbd15811..6117c221 100644
--- a/src/desugar.c
+++ b/src/desugar.c
@@ -2,5 +2,10 @@
 #include "internal.h"
 
 HCFChoice *h_desugar(HAllocator *mm__, const HParser *parser) {
-  return parser->vtable->desugar(mm__, parser->env);
+  if(parser->desugared == NULL) {
+    // we're going to do something naughty and cast away the const to memoize
+    ((HParser *)parser)->desugared = parser->vtable->desugar(mm__, parser->env);
+  }
+
+  return parser->desugared;
 }
-- 
GitLab