// get data size from a2_obj size_t a2_obj_size(struct a2_obj* obj_p){ assert(obj_p); switch(obj_t(obj_p)){ case A2_TSTRING: return a2_string_len(a2_gcobj2string(obj_vX(obj_p, obj))); case A2_TNUMBER: return sizeof(a2_number); case A2_TNIL: return 0; case A2_TBOOL: return sizeof(obj_vX(obj_p, uinteger)); case _A2_TADDR: return sizeof(obj_vX(obj_p, addr)); default: assert(0); return 0; } }
A2_API inline void a2_len(struct a2_state* state, int idx){ struct a2_obj* obj = a2_getcstack(state->env_p, idx); size_t len =0; struct a2_obj len_obj; switch(obj_t(obj)){ case A2_TMAP: len = a2_map_len(a2_gcobj2map(obj_vX(obj, obj))); break; case A2_TARRAY: len = a2_array_len(a2_gcobj2array(obj_vX(obj, obj))); break; case A2_TSTRING: len = a2_string_len(a2_gcobj2string(obj_vX(obj, obj))); break; default: a2_error(state->env_p, e_run_error, "the type is not map or array at len function."); } len_obj = a2_number2obj((a2_number)len); a2_pushstack(state->env_p, &len_obj); }