Refactored all of the desugaring code to no longer depend on memory being initialized to 0. Everything is about 12% faster now.
This commit is contained in:
parent
d71215d494
commit
ec404ca8fe
36 changed files with 411 additions and 417 deletions
|
|
@ -1,10 +1,20 @@
|
|||
#include "hammer.h"
|
||||
#include "internal.h"
|
||||
#include "backends/contextfree.h"
|
||||
|
||||
HCFChoice *h_desugar(HAllocator *mm__, const HParser *parser) {
|
||||
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__);
|
||||
}
|
||||
// we're going to do something naughty and cast away the const to memoize
|
||||
((HParser *)parser)->desugared = parser->vtable->desugar(mm__, parser->env);
|
||||
parser->vtable->desugar(mm__, nstk__, parser->env);
|
||||
((HParser *)parser)->desugared = nstk__->last_completed;
|
||||
if (stk__ == NULL)
|
||||
h_cfstack_free(mm__, nstk__);
|
||||
} else if (stk__ != NULL) {
|
||||
HCFS_APPEND(parser->desugared);
|
||||
}
|
||||
|
||||
return parser->desugared;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue