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

Reply via email to