Use reference counted table in libab.

This commit is contained in:
2018-04-24 11:32:57 -07:00
parent cea057aaa6
commit a86938b574
8 changed files with 63 additions and 52 deletions

View File

@@ -1162,14 +1162,14 @@ libab_result _parse_block(struct parser_state* state, libab_tree** store_into,
return result;
}
void libab_parser_init(libab_parser* parser, libab_table* table) {
parser->base_table = table;
void libab_parser_init(libab_parser* parser, libab_ref* table) {
libab_ref_copy(table, &parser->base_table);
}
libab_result libab_parser_parse(libab_parser* parser, ll* tokens,
const char* string, libab_tree** store_into) {
libab_result result;
struct parser_state state;
_parser_state_init(&state, tokens, string, parser->base_table);
_parser_state_init(&state, tokens, string, libab_ref_get(&parser->base_table));
result = _parse_block(&state, store_into, 0);
if (result == LIBAB_SUCCESS) {
@@ -1182,8 +1182,8 @@ libab_result libab_parser_parse_type(libab_parser* parser, ll* tokens,
const char* string,
libab_ref* store_into) {
struct parser_state state;
_parser_state_init(&state, tokens, string, parser->base_table);
_parser_state_init(&state, tokens, string, libab_ref_get(&parser->base_table));
return _parse_type(&state, store_into);
}
void libab_parser_free(libab_parser* parser) { parser->base_table = NULL; }
void libab_parser_free(libab_parser* parser) { libab_ref_free(&parser->base_table); }