view runtime/integer.c @ 18:ea991f95ae1f

C backend working well enough to generate Fib test
author Mike Pavone <pavone@retrodev.com>
date Wed, 27 May 2009 04:49:32 -0400
parents 31f8182f3433
children 640f541e9116
line wrap: on
line source

#include "integer.h"
#include "builtin.h"
#include "context.h"
#include "bool.h"

#define left ((t_Int32 *)cdata->params[0])
#define right ((t_Int32 *)cdata->params[1])

MethodNoLocals(_PL_,Int32,
    NumParams 2,
    CallSpace 1)
    
	CopiedParam(0, TYPE_INT32)
	Param(1, TYPE_INT32)
	
	left->num += right->num;
	
	release_ref((object *)right);
EndFunc

MethodNoLocals(_MN_,Int32,
    NumParams 2,
    CallSpace 1)
    
	CopiedParam(0, TYPE_INT32)
	Param(1, TYPE_INT32)
	
	left->num -= right->num;
	
	release_ref((object *)right);
EndFunc

MethodNoLocals(_LT_,Int32,
	NumParams 2,
	CallSpace 1)
	
	Param(0, TYPE_INT32)
	Param(1, TYPE_INT32)
	
	if(left->num < right->num)
	{
		release_ref(cdata->params[0]);
		Ret(0, Yes)
	} else {
		release_ref(cdata->params[0]);
		Ret(0, No)
	}
	release_ref(cdata->params[1]);
EndFunc

MethodNoLocals(_GT_,Int32,
	NumParams 2,
	CallSpace 1)
	
	Param(0, TYPE_INT32)
	Param(1, TYPE_INT32)
	
	if(left->num > right->num)
	{
		release_ref(cdata->params[0]);
		Ret(0, Yes)
	} else {
		release_ref(cdata->params[0]);
		Ret(0, No)
	}
	release_ref(cdata->params[1]);
EndFunc

object * make_Int32(int32_t val)
{
	t_Int32 * obj;
	object * ret = new_object(TYPE_INT32);
	obj = (t_Int32 *)ret;
	obj->num = val;
	return ret;
}