Add functions to allocate function structs.
This commit is contained in:
53
src/util.c
53
src/util.c
@@ -200,6 +200,59 @@ libab_result libab_create_value_raw(libab_ref* into, void* data, libab_ref* type
|
||||
return result;
|
||||
}
|
||||
|
||||
libab_result libab_create_function_internal(libab_ref* into, libab_ref* type,
|
||||
libab_function_ptr fun) {
|
||||
libab_function* new_function;
|
||||
libab_result result = LIBAB_SUCCESS;
|
||||
|
||||
if((new_function = malloc(sizeof(*new_function)))) {
|
||||
result = libab_function_init_internal(new_function, type, fun);
|
||||
} else {
|
||||
result = LIBAB_MALLOC;
|
||||
}
|
||||
|
||||
if(result == LIBAB_SUCCESS) {
|
||||
result = libab_ref_new(into, new_function,
|
||||
((libab_parsetype*) libab_ref_get(type))->data_u.base->free_function);
|
||||
if(result != LIBAB_SUCCESS) {
|
||||
libab_function_free(new_function);
|
||||
}
|
||||
}
|
||||
|
||||
if(result != LIBAB_SUCCESS) {
|
||||
libab_ref_null(into);
|
||||
free(new_function);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
libab_result libab_create_function_tree(libab_ref* into, libab_ref* type,
|
||||
libab_tree* tree) {
|
||||
libab_function* new_function;
|
||||
libab_result result = LIBAB_SUCCESS;
|
||||
|
||||
if((new_function = malloc(sizeof(*new_function)))) {
|
||||
result = libab_function_init_tree(new_function, type, tree);
|
||||
} else {
|
||||
result = LIBAB_MALLOC;
|
||||
}
|
||||
|
||||
if(result == LIBAB_SUCCESS) {
|
||||
result = libab_ref_new(into, new_function, ((libab_parsetype*) libab_ref_get(type))->data_u.base->free_function);
|
||||
if(result != LIBAB_SUCCESS) {
|
||||
libab_function_free(new_function);
|
||||
}
|
||||
}
|
||||
|
||||
if(result != LIBAB_SUCCESS) {
|
||||
libab_ref_null(into);
|
||||
free(new_function);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
libab_result libab_create_function_list(libab_ref* into, libab_ref* type) {
|
||||
libab_function_list* list;
|
||||
libab_result result = LIBAB_SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user