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