Block.st
changeset 2841 d3cab7c7d334
parent 2828 1a9cee4de6a6
child 3349 84a92126a268
--- a/Block.st	Thu Aug 07 17:05:44 1997 +0200
+++ b/Block.st	Thu Aug 07 17:33:00 1997 +0200
@@ -881,7 +881,7 @@
 
     |a1 a2 a3 a4 a5 a6 a7 a8|
 
-    (argArray notNil and:[argArray class ~~ Array]) ifTrue:[
+    (argArray notNil and:[(argArray class ~~ Array) and:[argArray isArray not]]) ifTrue:[
 	^ self badArgumentArry
     ].
     (argArray size == nargs) ifFalse:[
@@ -892,7 +892,8 @@
     REGISTER OBJFUNC thecode;
     OBJ home;
     REGISTER OBJ *ap;
-    int nargs;
+    int __nargs;
+    OBJ nA;
 
 #if defined(THIS_CONTEXT)
     if (__ISVALID_ILC_LNO(__pilc))
@@ -903,7 +904,11 @@
 #ifndef NEW_BLOCK_CALL
     home = __BlockInstPtr(self)->b_home;
     if (thecode != (OBJFUNC)nil) {
-	switch (nargs = __intVal(__INST(nargs))) {
+	if ((nA = __INST(nargs)) == __MKSMALLINT(0)) {
+	    RETURN ( (*thecode)(home) );
+	}
+
+	switch (__intVal(__INST(nargs))) {
 	    default:
 		goto error;
 	    case 8:
@@ -936,27 +941,30 @@
     }
 #endif
 
-    switch (nargs = __intVal(__INST(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;
+    __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;
+	}
     }
 
 #ifdef NEW_BLOCK_CALL
@@ -964,24 +972,23 @@
 	RETURN ( (*thecode)(self, a1, a2, a3, a4, a5, a6, a7, a8) );
     }
 # ifdef PASS_ARG_POINTER
-    RETURN ( __interpret(self, nargs, nil, nil, nil, nil, &a1) );
+    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) );
 # endif
 
 #else
 
 # ifdef PASS_ARG_POINTER
-    RETURN ( __interpret(self, nargs, nil, home, nil, nil, &a1) );
+    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) );
 # endif
 
 #endif
 
 error: ;
-%}
-.
+%}.
     "
      the above code only supports up-to 7 arguments
     "
@@ -1217,17 +1224,18 @@
     aStream nextPut:$-.
     sel printOn:aStream.
 
-"
-    aStream nextPutAll:'[] in '.
-    homeClass := home containingClass.
-    homeClass notNil ifTrue:[
-	homeClass name printOn:aStream.
-	aStream space.
-	(homeClass selectorForMethod:home) printOn:aStream
-    ] ifFalse:[
-	aStream nextPutAll:' ???' 
-    ]
-"
+"/
+"/    aStream nextPutAll:'[] in '.
+"/    homeClass := home containingClass.
+"/    homeClass notNil ifTrue:[
+"/	homeClass name printOn:aStream.
+"/	aStream space.
+"/	(homeClass selectorForMethod:home) printOn:aStream
+"/    ] ifFalse:[
+"/	aStream nextPutAll:' ???' 
+"/    ]
+"/
+
 ! !
 
 !Block methodsFor:'private accessing'!
@@ -1441,6 +1449,6 @@
 !Block class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.76 1997-07-31 22:32:08 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.77 1997-08-07 15:33:00 cg Exp $'
 ! !
 Block initialize!