예제 #1
0
void free_env_code(void)
{
    unsigned int i;
    InsT_t *inst;

    code_t *c = &EiC_ENV->CODE;
	
    while(c->prev) /* find start point */
		c = (code_t*)c->prev;
	
	inst = c->inst;
	/* rem free up other info also */
    for (i = 0; i < c->nextinst; i++, inst++)
		if (inst->opcode == jmptab) 
		{
			eicstack_t *s;
			s = inst->val.p.p;
			xfree(s->val); s->val = NULL; //maks
			xfree(s); s = NULL; //maks
		} 
		else if (inst->opcode == assigntype) 
		{
			EiC_freetype(inst->val.p.p);
			
		} 
		else if(inst->opcode == halt) 
		{
			EiC_freetype(inst->val.p.p);
		}
		
		EiC_freecode(c);
		EiC_ENV->CODE = *c;
}
예제 #2
0
파일: eicmod.c 프로젝트: JackJone/opencv
static int showhashtab(void)
{
    int tab;
    token_t e1;

    EiC_work_tab = tab  = stand_tab;   /* standard name space */
    EiC_inittoken(&e1);

    switch(EiC_lexan()) {
      TYPESPEC:
      TYPEQUAL:
	retractlexan();
	EiC_type_name(&e1);
	break;
      case ID:
	if(strcmp(EiC_LEXEM,"tags") == 0) 
	    tab = tag_tab;
	else if(strcmp(EiC_LEXEM,"builtin") == 0)
		e1.Type = EiC_addtype(t_builtin,0);
	else
	    retractlexan();
	break;		
      default:
	retractlexan();
    }
    if(e1.Type) {
	showtab(tab, 0,&e1,NULL,NULL);
	EiC_freetype(e1.Type);
    } else {
	showtab(tab,0,NULL,NULL,IsObject);
	showtab(tab,0,NULL,NULL,EiC_IsFunc);
    }
    return 1;
}
예제 #3
0
파일: eicmod.c 프로젝트: JackJone/opencv
symentry_t *EiC_add_builtinfunc(char *name, val_t(*vfunc) ())
{
    symentry_t *sym;
    sym = EiC_insertLUT(stand_tab, name, ID);
    EiC_freetype(sym->type);
    sym->level = 1;
    sym->val.vfunc = vfunc;
    sym->type = EiC_addtype(t_builtin,NULL);
    return sym;
}