Add function node parsing.

This commit is contained in:
2018-03-08 21:10:05 -08:00
parent 2487cdebe0
commit 2d26e45e90
6 changed files with 123 additions and 7 deletions

View File

@@ -5,21 +5,30 @@ int libab_tree_has_vector(libab_tree_variant variant) {
return variant == BASE || variant == OP ||
variant == UNARY_OP || variant == BLOCK ||
variant == IF || variant == CALL || variant == WHILE ||
variant == DOWHILE;
variant == DOWHILE || variant == FUN;
}
int libab_tree_has_string(libab_tree_variant variant) {
return variant == ID || variant == NUM ||
variant == OP || variant == UNARY_OP;
variant == OP || variant == UNARY_OP ||
variant == FUN || variant == FUN_PARAM;
}
int libab_tree_has_type(libab_tree_variant variant) {
return variant == FUN_PARAM || variant == FUN;
}
void libab_tree_free(libab_tree* tree) {
int free_string = 0;
int free_vector = 0;
int free_type = 0;
free_vector = libab_tree_has_vector(tree->variant);
free_string = libab_tree_has_string(tree->variant);
free_type = libab_tree_has_type(tree->variant);
if(free_string) free(tree->string_value);
if(free_vector) vec_free(&tree->children);
if(free_type && tree->parse_type)
libab_parsetype_free_recursive(tree->parse_type);
}
int _tree_foreach_free(void* data, va_list args) {