Add utilities to reuse common internal function code.
This commit is contained in:
parent
88b32ef58d
commit
fb55e20e84
|
@ -127,5 +127,23 @@ libab_result libab_create_function_list(libab_ref* into, libab_ref* type);
|
||||||
*/
|
*/
|
||||||
libab_result libab_put_table_value(libab_table* table, const char* key,
|
libab_result libab_put_table_value(libab_table* table, const char* key,
|
||||||
libab_ref* value);
|
libab_ref* value);
|
||||||
|
/**
|
||||||
|
* Returns the data stored in the given reference to a libab_value.
|
||||||
|
* This is not the same as libab_ref_get: libab_ref_get will return directly
|
||||||
|
* the data pointed to by the ference. libab_unwrap_value assumes the reference
|
||||||
|
* it's given is that to a libab_value, extracts it, then extracts its data
|
||||||
|
* field.
|
||||||
|
* @param ref the reference to unwrap.
|
||||||
|
* @return the resulting data.
|
||||||
|
*/
|
||||||
|
void* libab_unwrap_value(libab_ref* ref);
|
||||||
|
/**
|
||||||
|
* Similar to unwrap_value; Assumes the vector is a vector of
|
||||||
|
* values, and unwraps the value at the given index.
|
||||||
|
* @param vec the vector to unwrap a value from.
|
||||||
|
* @param index the index to look up.
|
||||||
|
* @return the value at the given index.
|
||||||
|
*/
|
||||||
|
void* libab_unwrap_param(libab_ref_vec* vec, size_t index);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -438,8 +438,6 @@ libab_result _interpreter_call_function(struct interpreter_state* state, libab_r
|
||||||
if(result == LIBAB_SUCCESS) {
|
if(result == LIBAB_SUCCESS) {
|
||||||
libab_ref_free(into);
|
libab_ref_free(into);
|
||||||
result = _interpreter_cast_and_perform_call(function, params, &temp_new_types, into);
|
result = _interpreter_cast_and_perform_call(function, params, &temp_new_types, into);
|
||||||
} else {
|
|
||||||
printf("Failed check. %d\n", result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
libab_ref_vec_free(&temp_new_types);
|
libab_ref_vec_free(&temp_new_types);
|
||||||
|
|
14
src/util.c
14
src/util.c
|
@ -309,3 +309,17 @@ libab_result libab_put_table_value(libab_table* table, const char* key,
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* libab_unwrap_value(libab_ref* ref) {
|
||||||
|
libab_value* value = libab_ref_get(ref);
|
||||||
|
return libab_ref_get(&value->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* libab_unwrap_param(libab_ref_vec* vec, size_t index) {
|
||||||
|
libab_ref temp;
|
||||||
|
void* data;
|
||||||
|
libab_ref_vec_index(vec, index, &temp);
|
||||||
|
data = libab_unwrap_value(&temp);
|
||||||
|
libab_ref_free(&temp);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user