Exemple #1
0
var Evalf(Var x)
{
	switch(Type(x))
	{
	case TYPE(int):
		{
			var r = Flt();
			F::SetZ(r,x);
			return r;
		}
		break;
	case TYPE(rat):
		{
			var r = Flt();
			F::SetQ(r,x);
			return r;
		}
		break;
	case TYPE(flt):
		{
			var r = Flt();
			F::Set(r,x);
			mpf_set_prec(CFlt(r),mpf_get_default_prec());
			return r;
		}
		break;
	case TYPE(sym):
		{
			std::map<Var,attr_t>::const_iterator
				iter = Attributes.find(x);
			if(iter != Attributes.end() &&
				iter->second.count(Constant))
				return CProcs[x](0);
		}
		break;
	case TYPE(vec):
		{
			size_t n = Size(x);
			var r = Vec(n);
			for(size_t i = 0; i < n; ++i)
				At(r,i) = Evalf(At(x,i));
			return r;
		}
		break;
	case TYPE(ex):
		{
			var b = Evalf(Body(x));
			return Eval(Ex(Head(x),b));
		}
		break;
	}
	return x;
}
Exemple #2
0
static void Z70_lambda(CL_FORM *base)
{
	COPY(INDIRECT(GET_FORM(ARG(0)) + 5), ARG(1));
	COPY(INDIRECT(GET_FORM(ARG(0)) + 4), ARG(2));
	Flt(ARG(1), 2);
	if(CL_TRUEP(ARG(1)))
	{
		COPY(INDIRECT(GET_FORM(ARG(0)) + 3), ARG(1));
		Fstringp(ARG(1));
		if(CL_TRUEP(ARG(1)))
		{
		}
		else
		{
			COPY(SYMVAL(Slisp, 58), ARG(1));	/* WRONG_TYPE */
			COPY(INDIRECT(GET_FORM(ARG(0)) + 3), ARG(2));
			LOAD_SYMBOL(SYMBOL(Slisp, 44), ARG(3));	/* STRING */
			Ferror(ARG(1), 3);
		}
		COPY(INDIRECT(GET_FORM(ARG(0)) + 3), ARG(1));
		COPY(INDIRECT(GET_FORM(ARG(0)) + 5), ARG(2));
		Frow_major_aref(ARG(1));
		COPY(INDIRECT(GET_FORM(ARG(0)) + 5), ARG(2));
		F1plus(ARG(2));
		COPY(ARG(2), INDIRECT(GET_FORM(ARG(0)) + 5));
		COPY(ARG(1), ARG(0));
	}
	else
	{
		LOAD_NIL(ARG(0));
	}
}
Exemple #3
0
	//-----------------------------------------------------------------------
	int CLuaObjectSkillEffect::setDistance(lua_State *L)
	{
		CObjectSkillEffect* effectObject  = LUA_RETRIEVE_OBJECT(CObjectSkillEffect,CLuaObjectSkillEffect,L); 
		if (NULL == effectObject) { DYNAMIC_ASSERT(0); return 0; }

		Int dis = CLuaSkillSystem::getInstance().getLuaManager()->getNumber(2);
		effectObject->setDistance( Flt(dis) );

		return 0;
	}
Exemple #4
0
void Fmin(CL_FORM *base, int nargs)
{
	CL_FORM *rest_0;
	CL_FORM *local;
	rest_0 = ARG(1);
	local = ARG(nargs);
	{
		COPY(ARG(0), LOCAL(0));
		{
			CL_FORM *rest_1;
			LOAD_NIL(LOCAL(1));
			rest_1 = rest_0;
			M1_1:;
			if(NOT(REST_NOT_EMPTY(rest_1)))
			{
				LOAD_NIL(LOCAL(1));
				goto RETURN1;
			}
			{
				CL_FORM *rest_2;
				rest_2 = rest_1;
				REST_CAR(rest_2, LOCAL(1));
			}
			COPY(LOCAL(1), LOCAL(2));
			COPY(LOCAL(0), LOCAL(3));
			Flt(LOCAL(2), 2);
			if(CL_TRUEP(LOCAL(2)))
			{
				COPY(LOCAL(1), LOCAL(0));
			}
			{
				CL_FORM *rest_3;
				rest_3 = rest_1;
				rest_1 = REST_CDR(rest_3);
			}
			goto M1_1;
		}
		RETURN1:;
		COPY(LOCAL(0), ARG(0));
	}
}
Exemple #5
0
void string_not_greaterp1(CL_FORM *base)
{
    COPY(ARG(0), ARG(6));
    Fstring(ARG(6));
    COPY(ARG(6), ARG(0));
    COPY(ARG(1), ARG(6));
    Fstring(ARG(6));
    COPY(ARG(6), ARG(1));
    COPY(ARG(2), ARG(6));
    COPY(ARG(3), ARG(7));
    COPY(ARG(0), ARG(8));
    Flength(ARG(8));
    check_seq_start_end(ARG(6));
    COPY(ARG(6), ARG(3));
    COPY(ARG(4), ARG(6));
    COPY(ARG(5), ARG(7));
    COPY(ARG(1), ARG(8));
    Flength(ARG(8));
    check_seq_start_end(ARG(6));
    COPY(ARG(6), ARG(5));
    COPY(ARG(2), ARG(6));
    COPY(ARG(4), ARG(7));
    LOAD_NIL(ARG(8));
    LOAD_NIL(ARG(9));
M1_1:
    ;
    COPY(ARG(6), ARG(10));
    COPY(ARG(3), ARG(11));
    Fnumeql(ARG(10), 2);
    if(CL_TRUEP(ARG(10)))
    {
        COPY(ARG(6), ARG(0));
        goto RETURN2;
    }
    COPY(ARG(7), ARG(10));
    COPY(ARG(5), ARG(11));
    Fnumeql(ARG(10), 2);
    if(CL_TRUEP(ARG(10)))
    {
        LOAD_NIL(ARG(0));
        goto RETURN2;
    }
    COPY(ARG(0), ARG(10));
    COPY(ARG(6), ARG(11));
    COPY(ARG(10), ARG(12));
    Fstringp(ARG(12));
    if(CL_TRUEP(ARG(12)))
    {
    }
    else
    {
        COPY(SYMVAL(Slisp, 58), ARG(12));	/* WRONG_TYPE */
        COPY(ARG(10), ARG(13));
        LOAD_SYMBOL(SYMBOL(Slisp, 44), ARG(14));	/* STRING */
        Ferror(ARG(12), 3);
    }
    COPY(ARG(10), ARG(12));
    COPY(ARG(11), ARG(13));
    Frow_major_aref(ARG(12));
    COPY(ARG(12), ARG(8));
    COPY(ARG(1), ARG(10));
    COPY(ARG(7), ARG(11));
    COPY(ARG(10), ARG(12));
    Fstringp(ARG(12));
    if(CL_TRUEP(ARG(12)))
    {
    }
    else
    {
        COPY(SYMVAL(Slisp, 58), ARG(12));	/* WRONG_TYPE */
        COPY(ARG(10), ARG(13));
        LOAD_SYMBOL(SYMBOL(Slisp, 44), ARG(14));	/* STRING */
        Ferror(ARG(12), 3);
    }
    COPY(ARG(10), ARG(9));
    COPY(ARG(11), ARG(10));
    Frow_major_aref(ARG(9));
    if(CL_CHARP(ARG(8)))
    {
        COPY(ARG(8), ARG(10));
    }
    else
    {
        COPY(SYMVAL(Slisp, 58), ARG(10));	/* WRONG_TYPE */
        COPY(ARG(8), ARG(11));
        LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(12));	/* CHARACTER */
        Ferror(ARG(10), 3);
    }
    rt_char_upcase(ARG(10));
    rt_char_code(ARG(10));
    if(CL_CHARP(ARG(9)))
    {
        COPY(ARG(9), ARG(11));
    }
    else
    {
        COPY(SYMVAL(Slisp, 58), ARG(11));	/* WRONG_TYPE */
        COPY(ARG(9), ARG(12));
        LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(13));	/* CHARACTER */
        Ferror(ARG(11), 3);
    }
    rt_char_upcase(ARG(11));
    rt_char_code(ARG(11));
    Flt(ARG(10), 2);
    if(CL_TRUEP(ARG(10)))
    {
        COPY(ARG(6), ARG(0));
        goto RETURN1;
    }
    else
    {
        if(CL_CHARP(ARG(8)))
        {
            COPY(ARG(8), ARG(10));
        }
        else
        {
            COPY(SYMVAL(Slisp, 58), ARG(10));	/* WRONG_TYPE */
            COPY(ARG(8), ARG(11));
            LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(12));	/* CHARACTER */
            Ferror(ARG(10), 3);
        }
        rt_char_upcase(ARG(10));
        rt_char_code(ARG(10));
        if(CL_CHARP(ARG(9)))
        {
            COPY(ARG(9), ARG(11));
        }
        else
        {
            COPY(SYMVAL(Slisp, 58), ARG(11));	/* WRONG_TYPE */
            COPY(ARG(9), ARG(12));
            LOAD_SYMBOL(SYMBOL(Slisp, 18), ARG(13));	/* CHARACTER */
            Ferror(ARG(11), 3);
        }
        rt_char_upcase(ARG(11));
        rt_char_code(ARG(11));
        Fnumeql(ARG(10), 2);
        if(CL_TRUEP(ARG(10)))
        {
        }
        else
        {
            LOAD_NIL(ARG(0));
            goto RETURN1;
        }
    }
    COPY(ARG(6), ARG(10));
    F1plus(ARG(10));
    F1plus(ARG(7));
    COPY(ARG(10), ARG(6));
    goto M1_1;
RETURN2:
    ;
RETURN1:
    ;
}
Exemple #6
0
void quick_sort(CL_FORM *base)
{
    LOAD_FIXNUM(ARG(5), 0, ARG(5));
    LOAD_FIXNUM(ARG(6), 0, ARG(6));
    COPY(ARG(2), ARG(7));
    COPY(ARG(1), ARG(8));
    F1plus(ARG(8));
    Fle(ARG(7), 2);
    if(CL_TRUEP(ARG(7)))
    {
        goto RETURN1;
    }
    COPY(ARG(1), ARG(5));
    COPY(ARG(2), ARG(6));
    F1minus(ARG(6));
    COPY(ARG(0), ARG(7));
    COPY(ARG(1), ARG(8));
    Felt(ARG(7));
M1_1:
    ;
    COPY(ARG(5), ARG(8));
    COPY(ARG(6), ARG(9));
    Fgt(ARG(8), 2);
    if(CL_TRUEP(ARG(8)))
    {
        goto RETURN2;
    }
M2_1:
    ;
    COPY(ARG(5), ARG(8));
    COPY(ARG(6), ARG(9));
    Fgt(ARG(8), 2);
    if(CL_TRUEP(ARG(8)))
    {
        goto THEN1;
    }
    else
    {
        COPY(ARG(3), ARG(9));
        COPY(ARG(4), ARG(10));
        COPY(ARG(0), ARG(11));
        COPY(ARG(6), ARG(12));
        Felt(ARG(11));
        Ffuncall(ARG(10), 2);
        mv_count = 1;
        COPY(ARG(4), ARG(11));
        COPY(ARG(7), ARG(12));
        Ffuncall(ARG(11), 2);
        mv_count = 1;
        Ffuncall(ARG(9), 3);
        mv_count = 1;
    }
    if(CL_TRUEP(ARG(9)))
    {
THEN1:
        ;
        goto RETURN3;
    }
    F1minus(ARG(6));
    goto M2_1;
RETURN3:
    ;
    COPY(ARG(6), ARG(8));
    COPY(ARG(1), ARG(9));
    Flt(ARG(8), 2);
    if(CL_TRUEP(ARG(8)))
    {
        COPY(ARG(0), ARG(8));
        COPY(ARG(1), ARG(9));
        F1plus(ARG(9));
        COPY(ARG(2), ARG(10));
        COPY(ARG(3), ARG(11));
        COPY(ARG(4), ARG(12));
        quick_sort(ARG(8));
        goto RETURN1;
    }
M3_1:
    ;
    COPY(ARG(5), ARG(8));
    COPY(ARG(6), ARG(9));
    Fgt(ARG(8), 2);
    if(CL_TRUEP(ARG(8)))
    {
        goto THEN2;
    }
    else
    {
        COPY(ARG(3), ARG(9));
        COPY(ARG(4), ARG(10));
        COPY(ARG(0), ARG(11));
        COPY(ARG(5), ARG(12));
        Felt(ARG(11));
        Ffuncall(ARG(10), 2);
        mv_count = 1;
        COPY(ARG(4), ARG(11));
        COPY(ARG(7), ARG(12));
        Ffuncall(ARG(11), 2);
        mv_count = 1;
        Ffuncall(ARG(9), 3);
        mv_count = 1;
        if(CL_TRUEP(ARG(9)))
        {
            goto ELSE3;
        }
        else
        {
            goto THEN2;
        }
    }
    {
THEN2:
        ;
        goto RETURN4;
    }
ELSE3:
    ;
    F1plus(ARG(5));
    goto M3_1;
RETURN4:
    ;
    COPY(ARG(5), ARG(8));
    COPY(ARG(6), ARG(9));
    Fgt(ARG(8), 2);
    if(CL_TRUEP(ARG(8)))
    {
        goto RETURN2;
    }
    COPY(ARG(0), ARG(8));
    COPY(ARG(5), ARG(9));
    Felt(ARG(8));
    COPY(ARG(0), ARG(9));
    COPY(ARG(6), ARG(10));
    Felt(ARG(9));
    COPY(ARG(0), ARG(10));
    COPY(ARG(5), ARG(11));
    Fset_elt(ARG(9));
    COPY(ARG(8), ARG(9));
    COPY(ARG(0), ARG(10));
    COPY(ARG(6), ARG(11));
    Fset_elt(ARG(9));
    F1plus(ARG(5));
    F1minus(ARG(6));
    goto M1_1;
RETURN2:
    ;
    COPY(ARG(0), ARG(7));
    COPY(ARG(1), ARG(8));
    COPY(ARG(5), ARG(9));
    COPY(ARG(3), ARG(10));
    COPY(ARG(4), ARG(11));
    quick_sort(ARG(7));
    COPY(ARG(0), ARG(7));
    COPY(ARG(5), ARG(8));
    COPY(ARG(2), ARG(9));
    COPY(ARG(3), ARG(10));
    COPY(ARG(4), ARG(11));
    quick_sort(ARG(7));
RETURN1:
    ;
}
Exemple #7
0
void FcharGE(CL_FORM *base, int nargs)
{
	CL_FORM *rest_0;
	CL_FORM *local;
	rest_0 = ARG(1);
	local = ARG(nargs);
	{
		CL_FORM *rest_1;
		LOAD_NIL(LOCAL(0));
		rest_1 = rest_0;
		M1_1:;
		if(NOT(REST_NOT_EMPTY(rest_1)))
		{
			LOAD_NIL(LOCAL(0));
			LOAD_SYMBOL(SYMBOL(Slisp, 48), ARG(0));	/* T */
			goto RETURN1;
		}
		{
			CL_FORM *rest_2;
			rest_2 = rest_1;
			REST_CAR(rest_2, LOCAL(0));
		}
		if(CL_CHARP(ARG(0)))
		{
			COPY(ARG(0), LOCAL(1));
		}
		else
		{
			COPY(SYMVAL(Slisp, 58), LOCAL(1));	/* WRONG_TYPE */
			COPY(ARG(0), LOCAL(2));
			LOAD_SYMBOL(SYMBOL(Slisp, 18), LOCAL(3));	/* CHARACTER */
			Ferror(LOCAL(1), 3);
		}
		rt_char_code(LOCAL(1));
		if(CL_CHARP(LOCAL(0)))
		{
			COPY(LOCAL(0), LOCAL(2));
		}
		else
		{
			COPY(SYMVAL(Slisp, 58), LOCAL(2));	/* WRONG_TYPE */
			COPY(LOCAL(0), LOCAL(3));
			LOAD_SYMBOL(SYMBOL(Slisp, 18), LOCAL(4));	/* CHARACTER */
			Ferror(LOCAL(2), 3);
		}
		rt_char_code(LOCAL(2));
		Flt(LOCAL(1), 2);
		if(CL_TRUEP(LOCAL(1)))
		{
			LOAD_NIL(ARG(0));
			goto RETURN1;
		}
		COPY(LOCAL(0), ARG(0));
		{
			CL_FORM *rest_3;
			rest_3 = rest_1;
			rest_1 = REST_CDR(rest_3);
		}
		goto M1_1;
	}
	RETURN1:;
}
Exemple #8
0
void print_float(CL_FORM *base)
{
	COPY(ARG(0), ARG(2));
	Fminusp(ARG(2));
	if(CL_TRUEP(ARG(2)))
	{
		LOAD_CHAR(ARG(2), '-', ARG(2));
		COPY(ARG(1), ARG(3));
		write_char1(ARG(2));
		mv_count = 1;
		COPY(ARG(0), ARG(2));
		Fminus(ARG(2), 1);
		COPY(ARG(2), ARG(0));
	}
	COPY(ARG(0), ARG(2));
	Fzerop(ARG(2));
	if(CL_TRUEP(ARG(2)))
	{
		LOAD_SMSTR((CL_FORM *)&Kprint_float[0], ARG(2));	/* 0.0 */
		COPY(ARG(2), ARG(3));
		COPY(ARG(1), ARG(4));
		LOAD_FIXNUM(ARG(5), 0, ARG(5));
		COPY(ARG(2), ARG(6));
		Flength(ARG(6));
		write_string1(ARG(3));
		COPY(ARG(3), ARG(0));
	}
	else
	{
		LOAD_FIXNUM(ARG(2), 10, ARG(2));
		COPY(ARG(0), ARG(2));
		LOAD_FIXNUM(ARG(3), 10, ARG(3));
		rt_log(ARG(2));
		LOAD_FIXNUM(ARG(3), 1, ARG(3));
		LOAD_FIXNUM(ARG(3), 1, ARG(3));
		rt_floor(ARG(2));
		mv_count = 1;
		COPY(ARG(0), ARG(3));
		GEN_FLOAT(ARG(4), 10.0, ARG(4));
		LOAD_FIXNUM(ARG(5), -1, ARG(5));
		COPY(ARG(2), ARG(6));
		Fminus(ARG(5), 2);
		COPY(ARG(5), ARG(6));
		Fminusp(ARG(6));
		if(CL_TRUEP(ARG(6)))
		{
			LOAD_FIXNUM(ARG(6), 1, ARG(6));
			COPY(ARG(4), ARG(7));
			COPY(ARG(5), ARG(8));
			Fminus(ARG(8), 1);
			Fexpt(ARG(7));
			Fdiv(ARG(6), 2);
			COPY(ARG(6), ARG(4));
		}
		else
		{
			rt_expt(ARG(4));
		}
		Fmult(ARG(3), 2);
		LOAD_NIL(ARG(4));
		COPY(SYMVAL(Slisp, 2), ARG(5));	/* SHORT-FLOAT-EPSILON */
		LOAD_NIL(ARG(6));
		COPY(ARG(3), ARG(7));
		LOAD_FIXNUM(ARG(8), 1, ARG(8));
		COPY(ARG(5), ARG(9));
		Fminus(ARG(8), 2);
		Fge(ARG(7), 2);
		if(CL_TRUEP(ARG(7)))
		{
			GEN_FLOAT(ARG(7), 0.1, ARG(3));
			F1plus(ARG(2));
		}
		COPY(ARG(2), ARG(7));
		LOAD_FIXNUM(ARG(8), 7, ARG(8));
		Fgt(ARG(7), 2);
		if(CL_TRUEP(ARG(7)))
		{
			goto THEN1;
		}
		else
		{
			COPY(ARG(2), ARG(8));
			LOAD_FIXNUM(ARG(9), -3, ARG(9));
			Flt(ARG(8), 2);
		}
		if(CL_TRUEP(ARG(8)))
		{
			THEN1:;
			LOAD_FIXNUM(ARG(7), 0, ARG(4));
		}
		else
		{
			COPY(ARG(2), ARG(4));
			LOAD_FIXNUM(ARG(7), 0, ARG(2));
		}
		COPY(ARG(4), ARG(7));
		Fminusp(ARG(7));
		if(CL_TRUEP(ARG(7)))
		{
			LOAD_CHAR(ARG(7), '0', ARG(7));
			COPY(ARG(1), ARG(8));
			write_char1(ARG(7));
			mv_count = 1;
			LOAD_CHAR(ARG(7), '.', ARG(7));
			COPY(ARG(1), ARG(8));
			write_char1(ARG(7));
			mv_count = 1;
			LOAD_FIXNUM(ARG(7), 0, ARG(7));
			M1_1:;
			COPY(ARG(7), ARG(8));
			COPY(ARG(4), ARG(9));
			Fminus(ARG(9), 1);
			F1minus(ARG(9));
			Fge(ARG(8), 2);
			if(CL_TRUEP(ARG(8)))
			{
				goto RETURN1;
			}
			LOAD_CHAR(ARG(8), '0', ARG(8));
			COPY(ARG(1), ARG(9));
			write_char1(ARG(8));
			mv_count = 1;
			F1plus(ARG(7));
			goto M1_1;
			RETURN1:;
			LOAD_FIXNUM(ARG(7), -1, ARG(4));
		}
		M2_1:;
		COPY(ARG(5), ARG(7));
		LOAD_FIXNUM(ARG(8), 10, ARG(8));
		Fmult(ARG(7), 2);
		COPY(ARG(7), ARG(5));
		LOAD_FIXNUM(ARG(7), 10, ARG(7));
		COPY(ARG(3), ARG(8));
		Fmult(ARG(7), 2);
		LOAD_FIXNUM(ARG(8), 1, ARG(8));
		LOAD_FIXNUM(ARG(8), 1, ARG(8));
		rt_truncate(ARG(7));
		COPY(&mv_buf[0], ARG(8));
		{
			int nargs;
			nargs = 2;
			mv_count = 1;
			{
				switch(nargs)
				{
					case 0:
					LOAD_NIL(ARG(7));
					case 1:
					LOAD_NIL(ARG(8));
					nargs = 2;
				}
				COPY(ARG(7), ARG(6));
				COPY(ARG(8), ARG(3));
			}
		}
		COPY(ARG(3), ARG(7));
		LOAD_FIXNUM(ARG(8), 1, ARG(8));
		COPY(ARG(5), ARG(9));
		Fminus(ARG(8), 2);
		Fge(ARG(7), 2);
		if(CL_TRUEP(ARG(7)))
		{
			goto THEN2;
		}
		else
		{
			COPY(ARG(3), ARG(8));
			COPY(ARG(5), ARG(9));
			Fle(ARG(8), 2);
		}
		if(CL_TRUEP(ARG(8)))
		{
			THEN2:;
			goto RETURN2;
		}
		COPY(ARG(6), ARG(7));
		LOAD_FIXNUM(ARG(8), 10, ARG(8));
		digit_char1(ARG(7));
		COPY(ARG(1), ARG(8));
		write_char1(ARG(7));
		mv_count = 1;
		COPY(ARG(4), ARG(7));
		Fzerop(ARG(7));
		if(CL_TRUEP(ARG(7)))
		{
			LOAD_CHAR(ARG(7), '.', ARG(7));
			COPY(ARG(1), ARG(8));
			write_char1(ARG(7));
			mv_count = 1;
		}
		F1minus(ARG(4));
		goto M2_1;
		RETURN2:;
		COPY(ARG(3), ARG(7));
		GEN_FLOAT(ARG(8), 0.5, ARG(8));
		Fge(ARG(7), 2);
		if(CL_TRUEP(ARG(7)))
		{
			F1plus(ARG(6));
		}
		COPY(ARG(6), ARG(7));
		LOAD_FIXNUM(ARG(8), 10, ARG(8));
		digit_char1(ARG(7));
		COPY(ARG(1), ARG(8));
		write_char1(ARG(7));
		mv_count = 1;
		COPY(ARG(4), ARG(7));
		LOAD_FIXNUM(ARG(8), 0, ARG(8));
		Fge(ARG(7), 2);
		if(CL_TRUEP(ARG(7)))
		{
			LOAD_FIXNUM(ARG(7), 0, ARG(7));
			M3_1:;
			COPY(ARG(7), ARG(8));
			COPY(ARG(4), ARG(9));
			Fge(ARG(8), 2);
			if(CL_TRUEP(ARG(8)))
			{
				goto RETURN3;
			}
			LOAD_CHAR(ARG(8), '0', ARG(8));
			COPY(ARG(1), ARG(9));
			write_char1(ARG(8));
			mv_count = 1;
			F1plus(ARG(7));
			goto M3_1;
			RETURN3:;
			LOAD_CHAR(ARG(7), '.', ARG(7));
			COPY(ARG(1), ARG(8));
			write_char1(ARG(7));
			mv_count = 1;
			LOAD_CHAR(ARG(7), '0', ARG(7));
			COPY(ARG(1), ARG(8));
			write_char1(ARG(7));
			mv_count = 1;
		}
		COPY(ARG(2), ARG(7));
		Fzerop(ARG(7));
		if(CL_TRUEP(ARG(7)))
		{
		}
		else
		{
			LOAD_CHAR(ARG(7), 'E', ARG(7));
			COPY(ARG(1), ARG(8));
			write_char1(ARG(7));
			mv_count = 1;
			COPY(ARG(2), ARG(7));
			COPY(ARG(1), ARG(8));
			print_integer(ARG(7));
			mv_count = 1;
		}
		LOAD_NIL(ARG(0));
	}
}
Exemple #9
0
Fichier : gen.cpp Projet : hyln9/nV
void parser::gen(size_t m)
{
	node_t& n = m_node[m];
	parser::iter_t iter = lower(m);

	switch(n.tag)
	{
	case tag_inequality:
		{
			head(count(m) + 1);
			emit(TAG(Inequality));
			parser::iter_t end = upper(m);
			while(iter != end)
			{
				gen(iter->second);
				++iter;
			}
		}
		break;
	case tag_sequence:
		{
			parser::iter_t end = upper(m);
			while(iter != end)
			{
				gen(iter->second);
				++iter;
			}
		}
		break;
	case tag_expression:
		if (n.value == -1) {
			head(count(m) + 1);
			emit(TAG(CompoundExpression));
			parser::iter_t end = upper(m);
			while(iter != end)
			{
				gen(iter->second);
				++iter;
			}
			break;
		}
		else if(s_oper[n.value].postfix || s_oper[n.value].prefix) {
			head(2);
			emit(s_oper[n.value].symbol);
			gen(iter->second);
			break;
		}
		head(3);
		emit(s_oper[n.value].symbol);
		gen(iter->second);
		gen((++iter)->second);
		break;
	case tag_suffix:
		switch(n.value)
		{
		case -1:
			{
				parser::iter_t begin = lower(m), end = upper(m);
				iter = --end;
				while(iter != begin)
				{
					--iter;
					gen(iter->second);
				}
				gen(end->second);
				while(iter != end)
				{
					gen(iter->second);
					++iter;
				}
			}
			break;
		case -2:
			head(2);
			emit(TAG(Part));
			n.value = -6;
			break;
		case -3:
			head(count(iter->second) + 2);
			emit(TAG(Part));
			n.value = -7;
			break;
		case -4:
			head(1);
			n.value = -8;
			break;
		case -5:
			head(count(iter->second) + 1);
			n.value = -9;
			break;
		case -6: break;
		case -7: gen(iter->second); break;
		case -8: break;
		case -9: gen(iter->second);	break;
		}
		break;
	case tag_primary:
		switch(n.value)
		{
		case instr_symbol:
			sym(m_note.find(m)->second);
			break;
		case instr_integer:
			{
				const wchar *s = m_note.find(m)->second;
				emit(Int(string(s,s + wcslen(s)).c_str(),10));
			}
			break;
		case instr_float:
			{
				const wchar *s = m_note.find(m)->second;
				emit(Flt(string(s,s + wcslen(s)).c_str(),10));
			}
			break;
		case instr_string:
			emit(Str(m_note.find(m)->second));
			break;
		case -1:
			emit(Vec());
			break;
		case -2:
			{
				var r = Vec(count(iter->second));
				emit(r);
				code_stack.push(std::make_pair(r,0));
				gen(iter->second);
			}
			break;
		case -3:
			gen(iter->second);
			break;
		case -4:
			head(2);
			emit(TAG(Blank));
			gen(iter->second);
			break;
		case -5:
			head(2);
			emit(TAG(Optional));
			head(1);
			emit(TAG(Blank));
			break;
		case -6:
			head(1);
			emit(TAG(Blank));
			break;
		case -7:
			head(2);
			emit(TAG(BlankSequence));
			gen(iter->second);
			break;
		case -8:
			head(2);
			emit(TAG(Optional));
			head(1);
			emit(TAG(BlankSequence));
			break;
		case -9:
			head(1);
			emit(TAG(BlankSequence));
			break;
		case -10:
			head(2);
			emit(TAG(Slot));
			gen(iter->second);
			break;
		case -11:
			head(2);
			emit(TAG(Slot));
			emit(Int(1L));
			break;
		case -12:
			head(2);
			emit(TAG(SlotSequence));
			gen(iter->second);
			break;
		case -13:
			head(2);
			emit(TAG(SlotSequence));
			emit(Int(1L));
			break;
		case -14:
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			head(2);
			emit(TAG(Blank));
			gen((++iter)->second);
			break;
		case -15:
			head(2);
			emit(TAG(Optional));
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			head(1);
			emit(TAG(Blank));
			break;
		case -16:
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			head(1);
			emit(TAG(Blank));
			break;
		case -17:
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			head(2);
			emit(TAG(BlankSequence));
			gen((++iter)->second);
			break;
		case -18:
			head(2);
			emit(TAG(Optional));
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			head(1);
			emit(TAG(BlankSequence));
			break;
		case -19:
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			head(1);
			emit(TAG(BlankSequence));
			break;
		case -20:
			head(3);
			emit(TAG(Pattern));
			gen(iter->second);
			gen((++iter)->second);
			break;
		case -21:
			head(3);
			emit(TAG(Property));
			gen(iter->second);
			gen((++iter)->second);
			break;
		}
		break;
	}
}