On Fri, Jan 4, 2013 at 12:37 AM, Igor Stasenko <[email protected]> wrote:
> On 4 January 2013 08:54, Torsten Bergmann <[email protected]> wrote: > > When one deploys an image one usually requires ONLY > > the image - not the source or changes file. An "image locker" > > code would look like this: > > > > SmalltalkImage checkSourcesFileAvailability: false. > > SmalltalkImage checkChangesFileAvailability: false > > > > do disable acording warnings when source/changefile is removed. > > > > If one uses NativeBoost in such a deployment scenario, for > > instance the > > > > NBWin32Shell shellBrowse: 'http://www.google.de' > > > > functionality the internal code (due to missing source) now > > looks like this > > > > shellExecute: t1 file: t2 parameters: t3 directory: t4 show: t5 > > <primitive: 'primitiveNativeCall' module: 'NativeBoostPlugin'> > > ^ self nbCall: #(#HINSTANCE #ShellExecuteA #(0 #, #LPCTSTR > #lpOperation #, #LPCTSTR #lpFile #, #LPCTSTR #lpParameters #, #LPCTSTR > #lpDirectory #, #INT #nShowCmd ) ) module: 'Shell32.dll' > > > > Hence the t1 ... t5 parameters. > > > > NativeBoost is in this situation not able to match the > > FFI parameters and throws an error "Could not find accessor for variable > ..." > > > > Try yourself without a changes and source file. This makes > > NativeBoost not very deployment friendly and unusable in > > such a "minimal deployment" scenario ... > > > > Any comments? > > > > yes it needs sources (indirectly) to bind method's argument names > during code generation. > To avoid that, i can imagine that one must modify a compiler to detect > if compiled method > primitive requires arg names, and store them in method properties. > Like that later code generator can use them without need to access the > source code. > Indeed. If a pragma were used then the whole thing could look a lot nicer, not be dependent on source, and include support for an error code. e.g. shellExecute: lpOperation file: lpFile parameters: lpParameters directory: lpDirectory show: nShowCmd <nbCall: #(#HINSTANCE #ShellExecuteA #(0 #, #LPCTSTR #lpOperation #, #LPCTSTR #lpFile #, #LPCTSTR #lpParameters #, #LPCTSTR #lpDirectory #, #INT #nShowCmd ) ) module: 'Shell32.dll' errorCode: ec> ^self nbCallFailedWith: ec It's pretty trivial to add such pragma compilers to the compiler. There is an example for the FFI. It also frees one to use a nicer syntax, e.g. shellExecute: lpOperation file: lpFile parameters: lpParameters directory: lpDirectory show: nShowCmd <nbCall: 'HINSTANCE ShellExecuteA(0, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd)' module: 'Shell32.dll' errorCode: ec> ^self nbCallFailedWith: ec > > Thanks > > T. > > > > -- > Best regards, > Igor Stasenko > > -- best, Eliot
