Mercurial > repos > rhope
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) {