+added mb_get_var, mb_get_var_value and mb_set_var_value implementation.

This commit is contained in:
Wang Renxin 2015-09-22 11:07:11 +08:00
parent 33ff6e1100
commit c609687f2b

View File

@ -4758,6 +4758,72 @@ int mb_push_value(struct mb_interpreter_t* s, void** l, mb_value_t val) {
return result; return result;
} }
int mb_get_var(struct mb_interpreter_t* s, void** l, void** v) {
/* Get a token literally, store it in an argument if it's a variable */
int result = MB_FUNC_OK;
_ls_node_t* ast = 0;
_object_t* obj = 0;
mb_assert(s && l);
if(v) *v = 0;
ast = (_ls_node_t*)(*l);
if(ast) {
obj = (_object_t*)(ast->data);
if(_IS_SEP(obj, ',')) {
ast = ast->next;
obj = (_object_t*)(ast->data);
}
ast = ast->next;
}
if(obj && obj->type == _DT_VAR) {
if(v)
*v = obj;
}
_exit:
*l = ast;
return result;
}
int mb_get_var_value(struct mb_interpreter_t* s, void* v, mb_value_t* val) {
/* Get the value of a variable */
int result = MB_FUNC_OK;
_object_t* obj = 0;
mb_assert(s);
if(!val || !v) goto _exit;
obj = (_object_t*)v;
if(obj->type != _DT_VAR) goto _exit;
_internal_object_to_public_value(obj->data.variable->data, val);
_exit:
return result;
}
int mb_set_var_value(struct mb_interpreter_t* s, void* v, mb_value_t val) {
/* Set the value of a variable */
int result = MB_FUNC_OK;
_object_t* obj = 0;
mb_assert(s);
if(!v) goto _exit;
obj = (_object_t*)v;
if(obj->type != _DT_VAR) goto _exit;
_public_value_to_internal_object(&val, obj->data.variable->data);
_exit:
return result;
}
int mb_init_array(struct mb_interpreter_t* s, void** l, mb_data_e t, int* d, int c, void** a) { int mb_init_array(struct mb_interpreter_t* s, void** l, mb_data_e t, int* d, int c, void** a) {
/* Create an array */ /* Create an array */
int result = MB_FUNC_OK; int result = MB_FUNC_OK;