On 8 January 2013 19:38, Eliot Miranda <
eliot.miranda@gmail.com> wrote:
>
>
>
> On Fri, Jan 4, 2013 at 12:37 AM, Igor Stasenko <
siguctua@gmail.com> wrote:
>>
>> On 4 January 2013 08:54, Torsten Bergmann <
astares@gmx.de> 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
>