23 lines
716 B
C
23 lines
716 B
C
#include "hammer.h"
|
|
#include "internal.h"
|
|
#include "backends/contextfree.h"
|
|
|
|
HCFChoice *h_desugar(HAllocator *mm__, HCFStack *stk__, const HParser *parser) {
|
|
HCFStack *nstk__ = stk__;
|
|
if(parser->desugared == NULL) {
|
|
if (nstk__ == NULL) {
|
|
nstk__ = h_cfstack_new(mm__);
|
|
}
|
|
if(nstk__->prealloc == NULL)
|
|
nstk__->prealloc = h_new(HCFChoice, 1);
|
|
// we're going to do something naughty and cast away the const to memoize
|
|
((HParser *)parser)->desugared = nstk__->prealloc;
|
|
parser->vtable->desugar(mm__, nstk__, parser->env);
|
|
if (stk__ == NULL)
|
|
h_cfstack_free(mm__, nstk__);
|
|
} else if (stk__ != NULL) {
|
|
HCFS_APPEND(parser->desugared);
|
|
}
|
|
|
|
return parser->desugared;
|
|
}
|