Example #1
0
File: mono.c Project: kmizumar/Mono
//deep-bindによる。シンボルが見つからなかったら登録。
//見つかったらそこに値をいれておく。
void bindsym(int symaddr, int valaddr){
        int addr,num;
    char *name;
    
    name = symname(symaddr);
    if((addr=findsym(name)) == NIL){
        addr = freshcell();
        SET_NAME(addr,name);
        SET_CDR(addr,E);
        E = addr;
    }
    switch(GET_TAG(valaddr)){
                case NUM: {     SET_TAG(addr,NUM);
                                num = GET_NUMBER(valaddr);
                    SET_NUMBER(addr,num);
                    break; }
        case SYM: {     SET_TAG(addr,SYM);
                                name = GET_NAME(valaddr);
                                SET_NAME(addr,name);
                                break; }
        case LIS: {     SET_TAG(addr,LIS);
                                SET_BIND(addr,valaddr);
                                break; }
    }
}
Example #2
0
File: mlis.c Project: kzfm1024/misc
void clrcell(int addr){
    SET_TAG(addr,EMP);
    free(heap[addr].name);
    heap[addr].name = NULL;
    SET_CAR(addr,0);
    SET_CDR(addr,0);
    SET_BIND(addr,0);
}
Example #3
0
File: mlis.c Project: kzfm1024/misc
void bindfunc1(char *name, int addr){
    int sym,val;
    
    sym = makesym(name);
    val = freshcell();
    SET_TAG(val,FUNC);
    SET_BIND(val,addr);
    SET_CDR(val,0);
    bindsym(sym,val);
}
Example #4
0
void bindfunc(char *name, tag tag, int func){
	int sym,val;
	
    sym = makesym(name);
	val = freshcell();
    SET_TAG(val,tag);
    switch(tag){
    	case SUBR:
        case FSUBR:		SET_SUBR(val,func); break;
        case LAMBDA:	SET_BIND(val,func); break;
    }
    SET_CDR(val,0);
    bindsym(sym,val);
}
Example #5
0
File: mono.c Project: kmizumar/Mono
void bindfunc(char *name, ftype ftype, int func){
        int addr;

        addr = freshcell();
        SET_NAME(addr,name);
        SET_TAG(addr,FUN);
    SET_FTYPE(addr,ftype);
    switch(ftype){
        case SUBR:
        case FSUBR:             SET_SUBR(addr,func);
        case LAMBDA:    SET_BIND(addr,func);
    }
    SET_CDR(addr,E);
    E = addr;
}