In Smallapack, I implemented a hack to handle methods with 15+ arguments, including regular Smalltalk + FFI (you can figure that Smalltalk methods wrapping a FFI call sometimes need 15+ parameters too).. It is rooted at http://bugs.squeak.org/view.php?id=2918 A more recent version can be found at http://www.squeaksource.com/Smallapack/Compiler-nice.150.mcz It might be non trivial to merge with Pharo, but you can give it a try.
Nicolas 2010/10/6 Levente Uzonyi <[email protected]>: > On Tue, 5 Oct 2010, Schwab,Wilhelm K wrote: > >> yes, that's what the link describes. The open question is whether anyone >> has successfully done that with 15+ arguments? > > It works up to 128 arguments. But why don't you try it yourself? > > > Levente > >> >> >> >> ________________________________________ >> From: [email protected] >> [[email protected]] On Behalf Of Levente Uzonyi >> [[email protected]] >> Sent: Tuesday, October 05, 2010 10:26 PM >> To: [email protected] >> Subject: Re: [Pharo-project] FFI number of arguments >> >> On Tue, 5 Oct 2010, Schwab,Wilhelm K wrote: >> >>> Hello all, >>> >>> I have been bumping into some functions with large numbers of arguments. >>> One in particular would be best handled in the image if at all possible. >>> The following might be the answer: >>> >>> >>> http://thread.gmane.org/gmane.comp.lang.smalltalk.squeak.general/98538/focus=98543 >>> >>> Have any of you done this with >15 (or whatever the cutoff is) arguments? >> >> You can create your own function object and invoke it with an array. >> Here's an fprintf example on windows: >> >> fprintf := ExternalLibraryFunction >> name: 'fprintf' >> module: 'msvcrt.dll' >> callType: ExternalFunction callTypeCDecl >> returnType: ExternalType signedLong >> argumentTypes: { >> (ExternalType structTypeNamed: #FILE) asPointerType. >> ExternalType string. >> ExternalType signedLong }. >> file := Stdio default fopenWith: 'test.txt' with: 'w'. >> fprintf invokeWithArguments: { file. 'Your number is %d.'. 42 }. >> Stdio default fcloseWith: file. >> >> >> Levente >> >> P.S.: Note that you need the FILE and Stdio classes to run this example. >> >>> >>> Bill >>> >>> >>> _______________________________________________ >>> Pharo-project mailing list >>> [email protected] >>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >>> >> >> _______________________________________________ >> Pharo-project mailing list >> [email protected] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> >> _______________________________________________ >> Pharo-project mailing list >> [email protected] >> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project >> > > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project > _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
