diff runtime/integer.c @ 8:8d74ef7fa357

Improved helper macros and added separate Rhope stack in runtime
author Mike Pavone <pavone@retrodev.com>
date Wed, 13 May 2009 23:37:19 -0400
parents d61550e2c001
children 52d9948def24
line wrap: on
line diff
--- a/runtime/integer.c	Wed May 13 00:47:40 2009 -0400
+++ b/runtime/integer.c	Wed May 13 23:37:19 2009 -0400
@@ -1,111 +1,28 @@
 #include "integer.h"
 #include "builtin.h"
+#include "context.h"
 
 Method(_PL_,Int32,2,
-	_t_Int32 * left; _t_Int32 * right; calldata convd; returntype ret; int i)
-	convd.params[0] = cdata->params[0];
-	convd.num_params = 1;
-	switch(coerce_value(TYPE_INT32, &convd))
-	{
-	case TAIL_RETURN:
-		do {
-			ret = convd.tail_func(&convd);
-		} while(ret == TAIL_RETURN);
-		//TODO: Support STACK_UNWIND
-		if(ret == EXCEPTION_RETURN)
-			goto exception_convert_left;
-	case EXCEPTION_RETURN:
-		goto exception_convert_left;
-	}
-	left = (_t_Int32 *)copy_object(convd.params[0]);
-	cdata->params[0] = (object *)left;
-	convd.params[0] = cdata->params[1];
-	switch(coerce_value(TYPE_INT32, &convd))
-	{
-	case TAIL_RETURN:
-		do {
-			ret = convd.tail_func(&convd);
-		} while(ret == TAIL_RETURN);
-		//TODO: Support STACK_UNWIND
-		if(ret == EXCEPTION_RETURN)
-			goto exception_convert_right;
-	case EXCEPTION_RETURN:
-		goto exception_convert_right;
-	}
-	right = (_t_Int32 *)convd.params[0];
+	_t_Int32 * left; _t_Int32 * right)
+	call = alloc_cdata(cdata->ct, 1);
+	CopiedParam(0, left, Int32, TYPE_INT32)
+	Param(1, right, Int32, TYPE_INT32)
+	
 	left->num += right->num;
+	
 	release_ref((object *)right);
-	return NORMAL_RETURN;
-	
-exception_convert_left:
-	//The first params hould have been released when the exception occurred
-	for(i = 1; i < cdata->num_params; ++i)
-		release_ref(cdata->params[i]);
-	//Move exception to our calldata struct
-	cdata->params[0] = convd.params[0];
-	return EXCEPTION_RETURN;
-exception_convert_right:
-	//The second param hould have been released when the exception occurred
-	for(i = 0; i < cdata->num_params; ++i)
-		if(i != 1)
-			release_ref(cdata->params[i]);
-	//Move exception to our calldata struct
-	cdata->params[0] = convd.params[0];
-	return EXCEPTION_RETURN;
-}
+EndFunc
 
 Method(_MN_,Int32,2,
-	_t_Int32 * left; _t_Int32 * right; calldata convd; returntype ret; int i)
-	convd.params[0] = cdata->params[0];
-	convd.num_params = 1;
-	switch(coerce_value(TYPE_INT32, &convd))
-	{
-	case TAIL_RETURN:
-		do {
-			ret = convd.tail_func(&convd);
-		} while(ret == TAIL_RETURN);
-		//TODO: Support STACK_UNWIND
-		if(ret == EXCEPTION_RETURN)
-			goto exception_convert_left;
-	case EXCEPTION_RETURN:
-		goto exception_convert_left;
-	}
-	left = (_t_Int32 *)copy_object(convd.params[0]);
-	cdata->params[0] = (object *)left;
-	convd.params[0] = cdata->params[1];
-	switch(coerce_value(TYPE_INT32, &convd))
-	{
-	case TAIL_RETURN:
-		do {
-			ret = convd.tail_func(&convd);
-		} while(ret == TAIL_RETURN);
-		//TODO: Support STACK_UNWIND
-		if(ret == EXCEPTION_RETURN)
-			goto exception_convert_right;
-	case EXCEPTION_RETURN:
-		goto exception_convert_right;
-	}
-	right = (_t_Int32 *)convd.params[0];
+	_t_Int32 * left; _t_Int32 * right)
+	call = alloc_cdata(cdata->ct, 1);
+	CopiedParam(0, left, Int32, TYPE_INT32)
+	Param(1, right, Int32, TYPE_INT32)
+	
 	left->num -= right->num;
+	
 	release_ref((object *)right);
-	return NORMAL_RETURN;
-	
-exception_convert_left:
-	//The first params hould have been released when the exception occurred
-	for(i = 1; i < cdata->num_params; ++i)
-		release_ref(cdata->params[i]);
-	//Move exception to our calldata struct
-	cdata->params[0] = convd.params[0];
-	return EXCEPTION_RETURN;
-exception_convert_right:
-	//The second param hould have been released when the exception occurred
-	for(i = 0; i < cdata->num_params; ++i)
-		if(i != 1)
-			release_ref(cdata->params[i]);
-	//Move exception to our calldata struct
-	cdata->params[0] = convd.params[0];
-	return EXCEPTION_RETURN;
-}
+EndFunc
 
 object * make_Int32(int32_t val)
 {