Esempio n. 1
0
// load objects from  fp
static void _a2_io_load(struct a2_io* io_p){
	memcpy(io_p->buf, &(io_p->buf[io_p->seek]), io_p->size-io_p->seek);
	size_t len= fread( &(io_p->buf[io_p->size-io_p->seek]), sizeof(byte), io_p->seek, io_p->fp);
	if(len<=0)
		a2_error(io_p->env_p, e_io_error, "io error.\n");
	
	io_p->rsize += io_p->seek;
	io_p->seek = io_p->size-io_p->seek;
}
Esempio n. 2
0
File: a2_vm.c Progetto: eagles125/A2
//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++;
}
Esempio n. 3
0
// set array
A2_API inline void a2_setarray(struct a2_state* state){
	int top = a2_top(state)-1;
	struct a2_obj* v = a2_getcstack(state->env_p, top);
	struct a2_obj* k = a2_getcstack(state->env_p, top-1);
	struct a2_obj* array = a2_getcstack(state->env_p, top-2);
	struct a2_obj* _v = NULL;

	check_array(array);
	check_num(k);
	_v  = a2_array_get(a2_gcobj2array(obj_vX(array, obj)), k);
	if(_v==NULL)
		a2_error(state->env_p, e_run_error, 
			"the error index at array.\n");
	else
		*_v = *v;
	a2_topset(state, top-1);
}
Esempio n. 4
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);
}