shave off another ~500ns/iter by not initialising HLeftRecs we'll never use
This commit is contained in:
parent
99ca500d2b
commit
dd5cc15a2b
1 changed files with 3 additions and 2 deletions
|
|
@ -188,9 +188,10 @@ HParseResult* h_do_parse(const HParser* parser, HParseState *state) {
|
||||||
// check to see if there is already a result for this object...
|
// check to see if there is already a result for this object...
|
||||||
if (!m) {
|
if (!m) {
|
||||||
// It doesn't exist, so create a dummy result to cache
|
// It doesn't exist, so create a dummy result to cache
|
||||||
HLeftRec *base = a_new(HLeftRec, 1);
|
HLeftRec *base = NULL;
|
||||||
// But only cache it now if there's some chance it could grow; primitive parsers can't
|
// But only cache it now if there's some chance it could grow; primitive parsers can't
|
||||||
if (parser->vtable->higher) {
|
if (parser->vtable->higher) {
|
||||||
|
base = a_new(HLeftRec, 1);
|
||||||
base->seed = NULL; base->rule = parser; base->head = NULL;
|
base->seed = NULL; base->rule = parser; base->head = NULL;
|
||||||
h_slist_push(state->lr_stack, base);
|
h_slist_push(state->lr_stack, base);
|
||||||
// cache it
|
// cache it
|
||||||
|
|
@ -207,7 +208,7 @@ HParseResult* h_do_parse(const HParser* parser, HParseState *state) {
|
||||||
cached->input_stream = state->input_stream;
|
cached->input_stream = state->input_stream;
|
||||||
}
|
}
|
||||||
// setupLR, used below, mutates the LR to have a head if appropriate, so we check to see if we have one
|
// setupLR, used below, mutates the LR to have a head if appropriate, so we check to see if we have one
|
||||||
if (NULL == base->head) {
|
if (!base || NULL == base->head) {
|
||||||
h_hashtable_put(state->cache, key, cached_result(state, tmp_res));
|
h_hashtable_put(state->cache, key, cached_result(state, tmp_res));
|
||||||
return tmp_res;
|
return tmp_res;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue