diff runtime/func.h @ 59:4f1ae6eb71d8

Use replicated switch statement for returns and late-bound calls
author Mike Pavone <pavone@retrodev.com>
date Thu, 08 Oct 2009 22:54:30 -0400
parents 4c22fe798779
children fa24ef3b026f
line wrap: on
line diff
--- a/runtime/func.h	Thu Oct 08 03:03:48 2009 -0400
+++ b/runtime/func.h	Thu Oct 08 22:54:30 2009 -0400
@@ -17,32 +17,29 @@
 
 
 #define Func(name,numparams) \
-	case FUNC_ ## name:\
+f_ ## name:\
 		for(idx = numparams; idx < cdata->num_params; ++idx)\
 			release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\
-f_ ## name:\
+sf_ ## name:\
 		lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));
 
 
 #define FuncNoLocals(name,numparams) \
-	case FUNC_ ## name:\
+f_ ## name:\
 		for(idx = numparams; idx < cdata->num_params; ++idx)\
 			release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\
-f_ ## name:		
+sf_ ## name:		
 
 #define EndFunc(name)	\
 		free_stack(ct, lv_ ## name);\
-		func = cdata->func;\
-		goto _dispatch;\
+		func = cdata->func;
 	
 #define EndFuncNoLocals	\
-		func = cdata->func;\
-		resume = cdata->resume;\
-		goto _dispatch;\
+		func = cdata->func;
 
 #define Method(name) \
-	case FUNC_ ## name:\
 f_ ## name:\
+sf_ ## name:\
 		switch(get_blueprint(cdata->params[0])->type_id)\
 		{
 			
@@ -57,8 +54,8 @@
 			goto m_ ## name ## _AT_ ## type_name;
 			
 #define MethodImpl(name,type_name,mytype_id,numparams) \
-	case FUNC_ ## name ## _AT_ ## type_name:\
 f_ ## name ## _AT_ ## type_name:\
+sf_ ## name ## _AT_ ## type_name:\
 		if (cdata->num_params < 1)\
 			goto _exception;\
 		if(get_blueprint(cdata->params[0])->type_id != mytype_id)\
@@ -73,8 +70,8 @@
 			
 				
 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \
-		case FUNC_ ## name ## _AT_ ## type_name:\
 f_ ## name ## _AT_ ## type_name:\
+sf_ ## name ## _AT_ ## type_name:\
 		if (cdata->num_params < 1)\
 			goto _exception;\
 		if(get_blueprint(cdata->params[0])->type_id != mytype_id)\
@@ -110,8 +107,8 @@
 #define Call(tocall, numparams, resumeto, myname)\
 			cdata->func = FUNC_ ## myname ## _ ## resumeto;\
 			cdata->num_params = numparams;\
-			goto f_ ## tocall;\
-		case FUNC_ ## myname ## _ ## resumeto:\
+			goto sf_ ## tocall;\
+r ## resumeto ## _ ## myname:\
 			lv_ ## myname = (lt_ ## myname *)(cdata->lastframe+1);
 	
 #define FreeCall\