diff --git a/src/hammer.h b/src/hammer.h index e337b49374f07db7745a28aa218149f42236a074..13724cac70b16e3ec3a80012ecf955f5409a1daa 100644 --- a/src/hammer.h +++ b/src/hammer.h @@ -112,10 +112,13 @@ typedef bool (*HPredicate)(HParseResult *p); typedef struct HParserVtable_ HParserVtable; +typedef struct HCFChoice_ HCFChoice; // forward declaration + typedef struct HParser_ { const HParserVtable *vtable; void *env; void *data; /* e.g., parse tables */ + HCFChoice *desugared; /* if the parser can be desugared, its desugared form */ } HParser; // {{{ Stuff for benchmarking diff --git a/src/parsers/indirect.c b/src/parsers/indirect.c index ed556270d1ab100c6d1ca4250f7a47f4e8d81490..c6935489042953122d9069625131ed2f34b4c64e 100644 --- a/src/parsers/indirect.c +++ b/src/parsers/indirect.c @@ -10,8 +10,10 @@ static bool indirect_isValidCF(void *env) { return inner->vtable->isValidCF(inner->env); } -static HCFChoice desugar_indirect(HAllocator *mm__, void *env) { - +static HCFChoice* desugar_indirect(HAllocator *mm__, void *env) { + HParser *p = (HParser*)env; + HParser *inner = (HParser*)p->env; + return inner->desugared; } static const HParserVtable indirect_vt = {