Add free function for freeing the custom structs.
This commit is contained in:
parent
af87c6646d
commit
b1a113a57d
|
@ -8,7 +8,7 @@ project(libabacus)
|
|||
|
||||
add_compile_options(-pedantic -Wall)
|
||||
|
||||
add_library(abacus STATIC src/lexer.c src/util.c src/table.c src/parser.c src/libabacus.c src/tree.c src/debug.c src/parsetype.c src/reserved.c src/trie.c src/refcount.c src/ref_vec.c src/ref_trie.c src/basetype.c src/type.c src/value.c)
|
||||
add_library(abacus STATIC src/lexer.c src/util.c src/table.c src/parser.c src/libabacus.c src/tree.c src/debug.c src/parsetype.c src/reserved.c src/trie.c src/refcount.c src/ref_vec.c src/ref_trie.c src/basetype.c src/type.c src/value.c src/custom.c)
|
||||
add_executable(libabacus src/main.c)
|
||||
add_subdirectory(external/liblex)
|
||||
|
||||
|
|
|
@ -76,4 +76,20 @@ typedef struct libab_behavior_s libab_behavior;
|
|||
typedef struct libab_operator_s libab_operator;
|
||||
typedef struct libab_function_s libab_function;
|
||||
|
||||
/**
|
||||
* Frees the given behavior.
|
||||
* @param behavior the behavior to free.
|
||||
*/
|
||||
void libab_behavior_free(libab_behavior* behavior);
|
||||
/**
|
||||
* Frees the given operator.
|
||||
* @param op the operator to free.
|
||||
*/
|
||||
void libab_operator_free(libab_operator* op);
|
||||
/**
|
||||
* Frees the given function.
|
||||
* @param fun the function to free.
|
||||
*/
|
||||
void libab_function_free(libab_function* fun);
|
||||
|
||||
#endif
|
||||
|
|
13
src/custom.c
Normal file
13
src/custom.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
#include "custom.h"
|
||||
|
||||
void libab_behavior_free(libab_behavior* behavior) {
|
||||
libab_parsetype_free_recursive(behavior->type);
|
||||
}
|
||||
|
||||
void libab_operator_free(libab_operator* op) {
|
||||
libab_behavior_free(&op->behavior);
|
||||
}
|
||||
|
||||
void libab_function_free(libab_function* fun) {
|
||||
libab_behavior_free(&fun->behavior);
|
||||
}
|
|
@ -69,8 +69,8 @@ void libab_table_free(libab_table* table) {
|
|||
}
|
||||
void libab_table_entry_free(libab_table_entry* entry) {
|
||||
if(entry->variant == ENTRY_OP) {
|
||||
libab_parsetype_free_recursive(entry->data_u.op.behavior.type);
|
||||
libab_operator_free(&entry->data_u.op);
|
||||
} else if(entry->variant == ENTRY_FUN) {
|
||||
libab_parsetype_free_recursive(entry->data_u.function.behavior.type);
|
||||
libab_function_free(&entry->data_u.function);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user