Esempio n. 1
0
// 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;
	}
}
Esempio n. 2
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);
}