Add scope to internal functions.
This commit is contained in:
parent
82747eae6a
commit
13ccea10e4
|
@ -11,7 +11,7 @@ struct libab_s;
|
||||||
* A function pointer that is called
|
* A function pointer that is called
|
||||||
* to execute a certain type of function.
|
* to execute a certain type of function.
|
||||||
*/
|
*/
|
||||||
typedef libab_result (*libab_function_ptr)(struct libab_s*, libab_ref_vec*, libab_ref*);
|
typedef libab_result (*libab_function_ptr)(struct libab_s*, libab_ref*, libab_ref_vec*, libab_ref*);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The variant of the operator that
|
* The variant of the operator that
|
||||||
|
|
|
@ -38,34 +38,34 @@ libab_result create_double_value(libab* ab, double val, libab_ref* into) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
libab_result function_atan(libab* ab, libab_ref_vec* params, libab_ref* into) {
|
libab_result function_atan(libab* ab, libab_ref* scope, libab_ref_vec* params, libab_ref* into) {
|
||||||
printf("atan called\n");
|
printf("atan called\n");
|
||||||
double* val = libab_unwrap_param(params, 0);
|
double* val = libab_unwrap_param(params, 0);
|
||||||
return create_double_value(ab, atan(*val), into);
|
return create_double_value(ab, atan(*val), into);
|
||||||
}
|
}
|
||||||
|
|
||||||
libab_result function_atan2(libab* ab, libab_ref_vec* params, libab_ref* into) {
|
libab_result function_atan2(libab* ab, libab_ref* scope, libab_ref_vec* params, libab_ref* into) {
|
||||||
printf("atan2 called\n");
|
printf("atan2 called\n");
|
||||||
double* left = libab_unwrap_param(params, 0);
|
double* left = libab_unwrap_param(params, 0);
|
||||||
double* right = libab_unwrap_param(params, 1);
|
double* right = libab_unwrap_param(params, 1);
|
||||||
return create_double_value(ab, atan2(*left, *right), into);
|
return create_double_value(ab, atan2(*left, *right), into);
|
||||||
}
|
}
|
||||||
|
|
||||||
libab_result function_print_num(libab* ab, libab_ref_vec* params, libab_ref* into) {
|
libab_result function_print_num(libab* ab, libab_ref* scope, libab_ref_vec* params, libab_ref* into) {
|
||||||
double* param = libab_unwrap_param(params, 0);
|
double* param = libab_unwrap_param(params, 0);
|
||||||
printf("%f\n", *param);
|
printf("%f\n", *param);
|
||||||
libab_get_unit_value(ab, into);
|
libab_get_unit_value(ab, into);
|
||||||
return LIBAB_SUCCESS;
|
return LIBAB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
libab_result function_print_unit(libab* ab, libab_ref_vec* params, libab_ref* into) {
|
libab_result function_print_unit(libab* ab, libab_ref* scope, libab_ref_vec* params, libab_ref* into) {
|
||||||
printf("()\n");
|
printf("()\n");
|
||||||
libab_get_unit_value(ab, into);
|
libab_get_unit_value(ab, into);
|
||||||
return LIBAB_SUCCESS;
|
return LIBAB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define OP_FUNCTION(name, expression) \
|
#define OP_FUNCTION(name, expression) \
|
||||||
libab_result name(libab* ab, libab_ref_vec* params, libab_ref* into) { \
|
libab_result name(libab* ab, libab_ref* scope, libab_ref_vec* params, libab_ref* into) { \
|
||||||
libab_result result = LIBAB_SUCCESS; \
|
libab_result result = LIBAB_SUCCESS; \
|
||||||
double right; \
|
double right; \
|
||||||
double left; \
|
double left; \
|
||||||
|
|
|
@ -530,7 +530,7 @@ libab_result _interpreter_call_behavior(struct interpreter_state* state,
|
||||||
libab_ref* into) {
|
libab_ref* into) {
|
||||||
libab_result result = LIBAB_SUCCESS;
|
libab_result result = LIBAB_SUCCESS;
|
||||||
if (behavior->variant == BIMPL_INTERNAL) {
|
if (behavior->variant == BIMPL_INTERNAL) {
|
||||||
result = behavior->data_u.internal(state->ab, params, into);
|
result = behavior->data_u.internal(state->ab, scope, params, into);
|
||||||
} else {
|
} else {
|
||||||
result = _interpreter_call_tree(state, behavior->data_u.tree, params, scope, into);
|
result = _interpreter_call_tree(state, behavior->data_u.tree, params, scope, into);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user