diff runtime/func.h @ 35:3498713c3dc9

C backend portion of supporting user defined types is done, but untested. Parser/NWorker still need a fair bit of work
author Mike Pavone <pavone@retrodev.com>
date Wed, 30 Sep 2009 23:55:04 -0400
parents 31f8182f3433
children a24eb366195c d2f9b0a9403d
line wrap: on
line diff
--- a/runtime/func.h	Wed Sep 30 01:25:03 2009 -0400
+++ b/runtime/func.h	Wed Sep 30 23:55:04 2009 -0400
@@ -153,6 +153,38 @@
 		free_stack(cdata->ct, call);\
 		return ret;\
 	}
+	
+#define GFieldCall(fieldid)\
+	call->num_params = 1;\
+	call->resume = 0;\
+	ret = get_field(fieldid, call);\
+	while(ret == TAIL_RETURN)\
+		ret = call->tail_func(call);\
+	if(ret == EXCEPTION_RETURN)\
+	{\
+		for(idx = 0; idx < cdata->num_params; ++idx)\
+			if(cdata->params[idx])\
+				release_ref(cdata->params[idx]);\
+		cdata->params[0] = call->params[0];\
+		free_stack(cdata->ct, call);\
+		return ret;\
+	}
+	
+#define SFieldCall(fieldid)\
+	call->num_params = 2;\
+	call->resume = 0;\
+	ret = set_field(fieldid, call);\
+	while(ret == TAIL_RETURN)\
+		ret = call->tail_func(call);\
+	if(ret == EXCEPTION_RETURN)\
+	{\
+		for(idx = 0; idx < cdata->num_params; ++idx)\
+			if(cdata->params[idx])\
+				release_ref(cdata->params[idx]);\
+		cdata->params[0] = call->params[0];\
+		free_stack(cdata->ct, call);\
+		return ret;\
+	}
 
 #define TMCall(methodid, numparams)\
 	free_stack(cdata->ct, call);\