view runtime/integer.c @ 37:640f541e9116

Added support for type declarations on user defined workers and added a few more methods to Int32 in the runtime for the C backend
author Mike Pavone <pavone@retrodev.com>
date Mon, 05 Oct 2009 23:12:43 -0400
parents ea991f95ae1f
children a24eb366195c d2f9b0a9403d
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(_TM_,Int32,
    NumParams 2,
    CallSpace 1)
    
	CopiedParam(0, TYPE_INT32)
	Param(1, TYPE_INT32)
	
	left->num *= right->num;
	
	release_ref((object *)right);
EndFunc

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

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

MethodNoLocals(RShift,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;
}