Mercurial > repos > rhope
diff runtime/builtin.c @ 186:ba35ab624ec2
Add support for raw C function output from C backend as well as an option to use Boehm-GC instead of reference counting
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 07 Oct 2011 00:10:02 -0700 |
parents | f2cb85c53ced |
children |
line wrap: on
line diff
--- a/runtime/builtin.c Wed Jul 27 21:32:40 2011 -0700 +++ b/runtime/builtin.c Fri Oct 07 00:10:02 2011 -0700 @@ -104,15 +104,22 @@ object * make_String(char * text) { +#ifdef RAW_FUNC + returntype ret; +#endif object * params[1]; t_Array * arr = (t_Array *)_internal_array_allocnaked(strlen(text), make_Blueprint(TYPE_UINT8)); arr->payload.Length = arr->payload.Storage; memcpy(((char *)arr) + sizeof(t_Array), text, arr->payload.Length); params[0] = (object *)arr; +#ifdef RAW_FUNC + ret = f_String(1, params); + return ret.retvals[0]; +#else rhope(FUNC_String, params, 1, 1); - return params[0]; +#endif } object * make_Bool(int32_t val) @@ -139,18 +146,32 @@ object * make_List(int32_t numels,...) { +#ifdef RAW_FUNC + returntype ret; +#endif int32_t idx, elidx; object * inout[3]; va_list args; va_start(args, numels); +#ifdef RAW_FUNC + ret = f_List(1, inout); + inout[0] = ret.retvals[0]; +#else rhope(FUNC_List, inout, 0, 1); +#endif for (idx = 0; idx < numels; ++idx) { elidx = va_arg(args, int32_t); inout[1] = make_Int32(elidx); inout[2] = va_arg(args, object *); +#ifdef RAW_FUNC + ret = f_Append(3, inout); + inout[0] = ret.retvals[0]; +#else + rhope(FUNC_Append, inout, 3, 3); +#endif } return inout[0]; }