support up to 12 args.
authorClaus Gittinger <cg@exept.de>
Thu, 04 Jun 1998 01:33:20 +0200
changeset 3497 e534dfaca7de
parent 3496 85e19a68bd61
child 3498 f5c7c83bcf5f
support up to 12 args.
Block.st
--- a/Block.st	Fri May 29 23:28:42 1998 +0200
+++ b/Block.st	Thu Jun 04 01:33:20 1998 +0200
@@ -881,13 +881,13 @@
      ArgArray must be either an Array or nil.
      The size of the argArray must match the number of arguments the receiver expects."
 
-    |a1 a2 a3 a4 a5 a6 a7 a8|
+    |a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12|
 
     (argArray notNil and:[(argArray class ~~ Array) and:[argArray isArray not]]) ifTrue:[
-	^ self badArgumentArry
+        ^ self badArgumentArry
     ].
     (argArray size == nargs) ifFalse:[
-	^ self wrongNumberOfArguments:(argArray size)
+        ^ self wrongNumberOfArguments:(argArray size)
     ].
 %{
 
@@ -899,84 +899,104 @@
 
 #if defined(THIS_CONTEXT)
     if (__ISVALID_ILC_LNO(__pilc))
-	    __ContextInstPtr(__thisContext)->c_lineno = __ILC_LNO_AS_OBJ(__pilc);
+            __ContextInstPtr(__thisContext)->c_lineno = __ILC_LNO_AS_OBJ(__pilc);
 #endif
     thecode = __BlockInstPtr(self)->b_code;
 
 #ifndef NEW_BLOCK_CALL
     home = __BlockInstPtr(self)->b_home;
     if (thecode != (OBJFUNC)nil) {
-	if ((nA = __INST(nargs)) == __MKSMALLINT(0)) {
-	    RETURN ( (*thecode)(home) );
-	}
+        if ((nA = __INST(nargs)) == __MKSMALLINT(0)) {
+            RETURN ( (*thecode)(home) );
+        }
 
-	switch (__intVal(__INST(nargs))) {
-	    default:
-		goto error;
-	    case 8:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7]) );
-	    case 7:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]) );
-	    case 6:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5]) );
-	    case 5:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4]) );
-	    case 4:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3]) );
-	    case 3:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1], ap[2]) );
-	    case 2:
-		ap = __ArrayInstPtr(argArray)->a_element;
-		RETURN ( (*thecode)(home, ap[0], ap[1]) );
-	    case 1:
-		RETURN ( (*thecode)(home, __ArrayInstPtr(argArray)->a_element[0]) );
-	    case 0:
-		RETURN ( (*thecode)(home) );
-		break;
-	}
+        switch (__intVal(__INST(nargs))) {
+            default:
+                goto error;
+            case 12:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], ap[9], ap[10], ap[11]) );
+            case 11:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], ap[9], ap[10]) );
+            case 10:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8], ap[9]) );
+            case 9:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7], ap[8]) );
+            case 8:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6], ap[7]) );
+            case 7:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]) );
+            case 6:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4], ap[5]) );
+            case 5:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3], ap[4]) );
+            case 4:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2], ap[3]) );
+            case 3:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1], ap[2]) );
+            case 2:
+                ap = __ArrayInstPtr(argArray)->a_element;
+                RETURN ( (*thecode)(home, ap[0], ap[1]) );
+            case 1:
+                RETURN ( (*thecode)(home, __ArrayInstPtr(argArray)->a_element[0]) );
+            case 0:
+                RETURN ( (*thecode)(home) );
+                break;
+        }
     }
 #endif
 
     __nargs = __intVal(__INST(nargs));
     if (__nargs) {
         switch (__nargs) {
-	    default:
-	        goto error;
-	    case 8:
-	        a8 = __ArrayInstPtr(argArray)->a_element[7];
-	    case 7:
-	        a7 = __ArrayInstPtr(argArray)->a_element[6];
-	    case 6:
-	        a6 = __ArrayInstPtr(argArray)->a_element[5];
-	    case 5:
-	        a5 = __ArrayInstPtr(argArray)->a_element[4];
-	    case 4:
-	        a4 = __ArrayInstPtr(argArray)->a_element[3];
-	    case 3:
-	        a3 = __ArrayInstPtr(argArray)->a_element[2];
-	    case 2:
-	        a2 = __ArrayInstPtr(argArray)->a_element[1];
-	    case 1:
-	        a1 = __ArrayInstPtr(argArray)->a_element[0];
-	    case 0:
-	        break;
-	}
+            default:
+                goto error;
+            case 12:
+                a12 = __ArrayInstPtr(argArray)->a_element[11];
+            case 11:
+                a11 = __ArrayInstPtr(argArray)->a_element[10];
+            case 10:
+                a10 = __ArrayInstPtr(argArray)->a_element[9];
+            case 9:
+                a9 = __ArrayInstPtr(argArray)->a_element[8];
+            case 8:
+                a8 = __ArrayInstPtr(argArray)->a_element[7];
+            case 7:
+                a7 = __ArrayInstPtr(argArray)->a_element[6];
+            case 6:
+                a6 = __ArrayInstPtr(argArray)->a_element[5];
+            case 5:
+                a5 = __ArrayInstPtr(argArray)->a_element[4];
+            case 4:
+                a4 = __ArrayInstPtr(argArray)->a_element[3];
+            case 3:
+                a3 = __ArrayInstPtr(argArray)->a_element[2];
+            case 2:
+                a2 = __ArrayInstPtr(argArray)->a_element[1];
+            case 1:
+                a1 = __ArrayInstPtr(argArray)->a_element[0];
+            case 0:
+                break;
+        }
     }
 
 #ifdef NEW_BLOCK_CALL
     if (thecode != (OBJFUNC)nil) {
-	RETURN ( (*thecode)(self, a1, a2, a3, a4, a5, a6, a7, a8) );
+        RETURN ( (*thecode)(self, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) );
     }
 # ifdef PASS_ARG_POINTER
     RETURN ( __interpret(self, __nargs, nil, nil, nil, nil, &a1) );
 # else
-    RETURN ( __interpret(self, __nargs, nil, nil, nil, nil, a1, a2, a3, a4, a5, a6, a7, a8) );
+    RETURN ( __interpret(self, __nargs, nil, nil, nil, nil, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) );
 # endif
 
 #else
@@ -984,7 +1004,7 @@
 # ifdef PASS_ARG_POINTER
     RETURN ( __interpret(self, __nargs, nil, home, nil, nil, &a1) );
 # else
-    RETURN ( __interpret(self, __nargs, nil, home, nil, nil, a1, a2, a3, a4, a5, a6, a7, a8) );
+    RETURN ( __interpret(self, __nargs, nil, home, nil, nil, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) );
 # endif
 
 #endif
@@ -992,11 +1012,11 @@
 error: ;
 %}.
     "
-     the above code only supports up-to 7 arguments
+     the above code only supports up-to 12 arguments
     "
     ^ ArgumentSignal
-	raiseRequestWith:self
-	errorString:'only blocks with up-to 7 arguments supported'
+        raiseRequestWith:self
+        errorString:'only blocks with up-to 12 arguments supported'
 ! !
 
 !Block methodsFor:'looping'!
@@ -1451,6 +1471,6 @@
 !Block class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.78 1998-03-31 13:47:49 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.79 1998-06-03 23:33:20 cg Exp $'
 ! !
 Block initialize!