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];
 }