# HG changeset patch # User Claus Gittinger # Date 870967980 -7200 # Node ID d3cab7c7d33425d57650edb41d216a58cfb3e20b # Parent 493b24293589e6e4a94e0c9f724ada6d3e0f3e45 allow non-array in valueWithArguments diff -r 493b24293589 -r d3cab7c7d334 Block.st --- 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!