// get global A2_API inline void a2_getglobal(struct a2_state* state){ struct a2_obj* k = a2_getcstack(state->env_p, a2_top(state)-1); check_key(k); struct a2_obj* v = a2_get_envglobal(state->env_p, k); if(v==NULL) obj_setX(k, A2_TNIL, point, NULL); else *k = *v; }
//get global varable static inline void _vm_getglobal(struct a2_vm* vm_p){ int bx = ir_gbx(curr_ir); struct a2_obj* _dobj = callinfo_sfreg(curr_ci, ir_ga(curr_ir)); struct a2_obj* _k = _getvalue(vm_p, bx); struct a2_obj* _obj = a2_get_envglobal(vm_p->env_p, _k); if(_obj==NULL){ char _buf[64] = {0}; a2_error(vm_p->env_p, e_vm_error, "[vm error@%zd]: the global \'%s\' is not find.\n", curr_line, obj2str(_k, _buf, sizeof(_buf))); } *_dobj = *_obj; curr_pc++; }