diff --git a/src/cfgrammar.c b/src/cfgrammar.c index 896236c21e7d40b983cbeaf7cc3e91301953dc4f..c965a44ee5b143afa1ce0b30e445a01d0922c2b5 100644 --- a/src/cfgrammar.c +++ b/src/cfgrammar.c @@ -239,6 +239,13 @@ void h_stringmap_put_char(HCFStringMap *m, uint8_t c, void *v) h_hashtable_put(m->char_branches, (void *)char_key(c), node); } +// helper for h_stringmap_update +void *combine_stringmap(void *v1, void *v2) +{ + h_stringmap_update((HCFStringMap *)v1, (HCFStringMap *)v2); + return v1; +} + void h_stringmap_update(HCFStringMap *m, const HCFStringMap *n) { if(n->epsilon_branch) @@ -247,7 +254,7 @@ void h_stringmap_update(HCFStringMap *m, const HCFStringMap *n) if(n->end_branch) m->end_branch = n->end_branch; - h_hashtable_update(m->char_branches, n->char_branches); + h_hashtable_merge(combine_stringmap, m->char_branches, n->char_branches); } void *h_stringmap_get(const HCFStringMap *m, const uint8_t *str, size_t n, bool end)