diff --git a/src/desugar.c b/src/desugar.c index fbd1581..6117c22 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; }