Beispiel #1
0
static bool pbind_vars(obj* vars, obj lt){
	obj utype;
	switch(lt->type){
    default:
        break;
	case tSymbol:
		if(vars) add_assoc(vars, lt, nil); 
		return true;
	case tRef:
		assert(0);
		let(&(uref(lt)), nil);
		return true;
	case INT:
		assert(0);
	//	return equal(lt,rt);
	case tOp:
		utype = search_assoc(curr_interp->types, ult(lt));
		if(utype){
			return pbind_vars(vars, urt(lt));
		}
		pbind_vars(vars, ult(lt));
		return pbind_vars(vars, urt(lt));
	case LIST:
		list x=ul(lt);
		for(; (x); x=rest(x)){
			pbind_vars(vars, first(x));
		}
		return true;
	}
	print(lt);
	assert(0);
	return nil;
}
Beispiel #2
0
unsigned short limit_test ( void )
{
    unsigned short ra;
    short sa;

    for(ra=0;;ra++) if(ult(ra,7)==0) break;
    hexstring(ra);
    if(ra!=7) return(1);

    for(ra=0xF000;;ra++) if(ult(ra,0xF007)==0) break;
    hexstring(ra);
    if(ra!=0xF007) return(1);

    for(sa=-7;;sa++) if(slt(sa,7)==0) break;
    hexstring(sa);
    if(sa!=7) return(1);

    for(sa=-17;;sa++) if(slt(sa,-7)==0) break;
    hexstring(sa);
    if(sa!=-7) return(1);

    for(ra=0;;ra++) if(ulte(ra,7)==0) break;
    hexstring(ra);
    if(ra!=8) return(1);

    for(ra=0xF000;;ra++) if(ulte(ra,0xF007)==0) break;
    hexstring(ra);
    if(ra!=0xF008) return(1);

    for(ra=0xF000;;ra++) if(ulte(ra,7)==0) break;
    hexstring(ra);
    if(ra!=0xF000) return(1);

    for(sa=-7;;sa++) if(slte(sa,7)==0) break;
    hexstring(sa);
    if(sa!=8) return(1);

    for(sa=-17;;sa++) if(slte(sa,-7)==0) break;
    hexstring(sa);
    if(sa!=-6) return(1);

    for(ra=0;;ra++) if(ugt(ra,7)) break;
    hexstring(ra);
    if(ra!=8) return(1);

    for(ra=0xF000;;ra++) if(ugt(ra,0xF007)) break;
    hexstring(ra);
    if(ra!=0xF008) return(1);

    for(ra=0;;ra++) if(ugte(ra,7)) break;
    hexstring(ra);
    if(ra!=7) return(1);

    for(ra=0xF000;;ra++) if(ugte(ra,0xF007)) break;
    hexstring(ra);
    if(ra!=0xF007) return(1);

    return(0);

}
Beispiel #3
0
obj pop(obj* v){
	obj lt = retain(ult(*v));
	obj rt = retain(urt(*v));
	release(*v);
	*v = rt;
	return lt;
}
Beispiel #4
0
static bool bind_vars(obj* vars, obj lt, obj rt){
	obj utype;
	switch(lt->type){
    default:
        break;
	case tSymbol:
		if(macromode){
			if(obj rr = search_assoc(car(macro_env), lt)){
				//macromode = false;
				if(vars) add_assoc(vars, rr, rt);
				//macromode = true;
				return true;
			}
		}
		if(vars) add_assoc(vars, lt, rt);
		return true;
	case tRef:
		let(&(uref(lt)), rt);
		return true;
	case INT:
		return equal(lt, rt);
	case tOp:
		utype = search_assoc(curr_interp->types, ult(lt));
		if(utype){
			if(vrInt(utype) != rt->type) return false;
			return bind_vars(vars, urt(lt), uref(rt));
		}
		if(rt->type!=tOp) return false;
		if(! bind_vars(vars, ult(lt), ult(rt))) return false;
		return bind_vars(vars, urt(lt), urt(rt));
	case LIST:
		if(rt->type!=LIST) return false;
		list x=ul(lt), a=ul(rt);
		for(; (x && a); x=rest(x),a=rest(a)){
			if(!bind_vars(vars, first(x), first(a))) return false;
		}
		if(x||a) return false;
		return true;
	}
	print(lt);
	assert(0);
	return nil;
}
Beispiel #5
0
Datei: user.c Projekt: erukiti/ma
SHELL	void	sign_up()
{
	clrvar(user.mptr);
	clrvar(user.var);
	user.number=user.member+1;
	ult(user.number)->mpost =0;
	ult(user.number)->post  =0;
	ult(user.number)->mlogin=0;
	ult(user.number)->login =0;
	setvar("mpost","0",user.var);
	setvar("post","0",user.var);
	setvar("mlogin","0",user.var);
	setvar("login","0",user.var);

	for(;;)
		{
		 setvar("pass","",user.var);
		 msgout(IC_act "今からサインアップを行います。");

		 user_chk(1);
	 	 user_rep(user.member+1);
		 user_disp();
		 msgout(IC_act "以上でよろしいでしょうか?");
		 if (ynq())
		 	break;
		 msgout(IC_act "中止しますか?");
		 if (ynq())
		 	{
		 	 user_guest("");
		 	 return;
		 	}
		}
	user_add();
	user_write();
	sys_log("| User登録");
	where_seta();
}
Beispiel #6
0
static obj do_assign(obj lt, obj rt){
	switch(type(lt)) {
	case tRef:
		return retain(*let(&(uref(lt)), rt));
	case tSymbol:
		return retain(*let(lfind_var(lt),rt));
    default:
        break;
	case tInd:{
		obj *var;
		var = lfind_var(ult(lt));
		if(!*var) error("the vector does not exist.");
		if((*var)->refcount > 1){
			obj nv = copy(*var);
			release(*var);
			*var = nv;
			myPrintf("performance alert: copy");
		}
		obj inds = eval(urt(lt));
		doLInd(var, ul(inds), rt);
		release(inds);
		return retain(rt);
        }
    case LIST:
		return applyCC(do_assign, lt, rt);
		
		if(type(rt)!=LIST) error("list<-nonlist");
		list s = ul(rt);
		for(list l = ul(lt); l; l=rest(l), s=rest(s)){
			if(! s) error("number is not enough for rhs.");
			do_assign(first(l),first(s));
		}
		if(s) error("too much for rhs.");
		return nil;
	}
	print(lt);
	assert(0);
	return nil;
}
Beispiel #7
0
Datei: user.c Projekt: erukiti/ma
void	ulist_rep(uint i,var_t *v)
{
	char	*p;
	struct tm	tm;

	p=getvar("memo",v);
	if (p==NULL)
		p="メモなし。";
	lstrcpy(ult(i)->memo  ,nps(p,LN_memo));
	lstrcpy(ult(i)->hoby  ,nps(getvar("hoby",v),LN_memo));
	lstrcpy(ult(i)->id    ,nps(getvar("id",v),0));
	lstrcpy(ult(i)->pass  ,nps(getvar("pass",v),0));
	lstrcpy(ult(i)->handle,nps(getvar("handle",v),LN_handle));
	ult(i)->mpost =atoi(getvar("mpost",v));
	ult(i)->post  =atoi(getvar("post",v));
	ult(i)->mlogin=atoi(getvar("mlogin",v));
	ult(i)->login =atoi(getvar("login",v));

	dtotm(getvar("birth",v),&tm);
	ult(i)->birthm=tm.tm_mon;
	ult(i)->birthd=tm.tm_mday;

	ult(i)->wp    =atoi(getvar("wp",v));
}
Beispiel #8
0
obj eval(obj exp){
ev:	assert(!! exp);
    obj rr,lt, rt;
	switch (exp->type) {
	case tInd:
		return doInd(eval(ult(exp)), ul(eval(urt(exp))));
	case LIST:
		return List2v(evalList(ul(exp)));
	case tArray:
		return map_obj(eval, exp);
	case tAnd:
		return prod_eval(ul(exp), mult);
	case MULT:
		return prod_eval(ul(exp), mult);
	case ARITH:
		return prod_eval(ul(exp), add);
	case POW:
		return prod_eval(ul(exp), power);
	case DIVIDE:
		return prod_eval(ul(exp), divide);
	case tRef:
		return retain(uref(exp));
	case tSymbol:
		if( macromode) {
			if(obj rr = search_assoc(car(macro_env), exp)){
				macromode = false;
				// macro lexical scope should be pushed to the stack here
				rr = exec(rr);
				macromode = true;
				return rr;
			}
		}
		return eval_symbol(exp);
	case tMinus:
		lt = eval(uref(exp));
		rr = uMinus(lt);	// releasing
		if(rr) {release(lt); return rr;}
		static obj symumn = Symbol("-");
		rr = udef_op0(symumn, lt);
		if(rr) {release(lt); return rr;}
		error("uMinus: not defined to that type");
	case tReturn:
		if(! uref(exp)) return encap(tSigRet, nil);
		return  encap(tSigRet, eval(uref(exp)));
	case tBreak:
		return retain(exp);
	case CONDITION:
		return evalCond(exp);
	case tOp:
		if(type(ult(exp)) ==tSymbol) {
			lt = search_assoc(curr_interp->types, ult(exp));
			if(lt) return encap((ValueType)vrInt(lt), eval(urt(exp)));}
		lt = eval(ult(exp));
		push(lt);
		switch(lt->type){
		case tCont:
			assert(0);
		case tSpecial:
			rr = ufn(lt)(urt(exp));
			break;
		case tSyntaxLam:
			rr = macro_exec(lt, urt(exp));
			break;
		case tInternalFn:
        case tClosure:
			rt = eval(urt(exp));
			rr = eval_function(lt, rt);
			break;
        default:
			rt = eval(urt(exp));
			rr = call_fn(mult, lt, rt);
			release(rt);
		}
		release(pop(&is));
		return rr;
	case tClosure:
		assert(0);
	case tCurry:
		return eval_curry(exp, em0(exp));
/*		obj vars = Assoc();
		bind_vars(&vars, em0(exp), em2(exp));
		rr = eval_curry(exp, vars);
		release(vars);
		return rr;
*/	case tArrow:
//		return enclose(exp);
/*		if(macromode){
			if(obj rr = search_assoc(car(macro_env), exp)){
			}
		}
*/ 		return render(tClosure, list3(retain(em0(exp)), retain(em1(exp)), retain(env)));
	case tDefine:
		return func_def(em0(exp), em1(exp), em2(exp));
	case tSyntaxDef:
		let(lfind_var(em0(exp)),  render(tSyntaxLam, list3(retain(em1(exp)), retain(em2(exp)), nil)));
		return nil;
	case tExec:
		return exec(exp);
	case tAssign:
		lt = car(exp);
		if(type(lt)==tOp){
			return func_def(ult(lt), urt(lt), cdr(exp));
		} else if(type(lt)==tMinus){
			static obj symumn = Symbol("-");
			return func_def(symumn, uref(lt), cdr(exp));
		} else return do_assign(lt, eval(cdr(exp)));
	case tIf:
		rr = eval(em0(exp));
		if (type(rr) != INT) error("if: Boolean Expected");
		if (vrInt(rr)) {
			rr = em1(exp);
		} else {
			rr = em2(exp);
		}
		return eval(rr);
	case tWhile:
		for(;;) {
			rr = eval(car(exp));
			if (type(rr) != INT) error("while: Boolean expected");
			if(!vrInt(rr)) break;
			rr = exec(cdr(exp));
			if(rr && type(rr)==tSigRet) return rr;
			if(rr && type(rr)==tBreak) {release(rr); break;}
			if(rr) release(rr);
		}
		return nil;
	default:
		return retain(exp);
	}
}
 bool operator()(const small_bv& v1, const small_bv& v2)
 {
     bv_ult <small_bv, bool> ult;
     return (v1.msb() && !v2.msb()) || ((v1.msb() == v2.msb()) && ult(v1, v2));
 }