[squeak-dev] Improving command line argument processing

David T. Lewis lewis at mail.msen.com
Tue Jun 9 01:31:07 UTC 2020


I put the changes in the inbox as System-dtl.1164 for review.

Dave

On Sun, Jun 07, 2020 at 06:53:17PM -0400, David T. Lewis wrote:
> Background:
> 
> Motivated by the recent "Image not startable after save" discussion, I was
> looking to see if there might be a way to inject a startup patch script,
> specified as a command line option, that would be evaluated prior to any
> of the processStartupList: processing.
> 
> That led me to notice that '--' handling in the command line is currently
> broken in trunk (see the -help message from the VM for intended behavior).
> 
> So I fixed that, but then I noticed that argument processing was generally
> all bolloxed up and worked inconsistently.
> 
> So I fixed that, thinking that I might put it in the inbox. But then I
> noticed that VM is also inconsistent with respect to passing the '--' token
> to the image in the VM parameters.
> 
> So I fixed that, thinking that I could do a pull request to opensmalltalk-vm
> to get that resolved.
> 
> Then in noticed that the readDocumentAtStartup preference serves no useful
> purpose once the argument processing is fixed, so I eliminated use of the
> preference, so it can be deprecated and removed at a later date.
> 
> But in total, this is a a lot of change to something that never working
> right in the first place, so I would like to summarize my idea of how of
> I think it *should* work for review before posting any code. If this
> seems reasonable, I'll put my changes in the inbox.
> 
> Here is how I think it should work, showing first a unix command line, and
> then the expect arguments as seen in the image:
> 
>   $ squeak squeak.image -- arg1 arg2 arg3 "do not treat arg1 as a script"
>   Smalltalk arguments ==> #('arg1' 'arg2' 'arg3')
>   (1 to: 4) collect: [:i | Smalltalk argumentAt: i ] ==> #('arg1' 'arg2' 'arg3' nil)
> 
>   $ squeak squeak.image script.st -- arg1 arg2 arg3 "script.st runs"
>   Smalltalk arguments ==> #('arg1' 'arg2' 'arg3')
>   (1 to: 4) collect: [:i | Smalltalk argumentAt: i ] ==> #('arg1' 'arg2' 'arg3' nil)
> 
>   $ squeak squeak.image -- script.st arg1 arg2 arg3 "script.st does not run"
>   Smalltalk arguments ==> #('start.st' 'arg1' 'arg2' 'arg3')
>   (1 to: 5) collect: [:i | Smalltalk argumentAt: i ] ==> #('start.st' 'arg1' 'arg2' 'arg3' nil)
> 
>   $ squeak squeak.image script.st arg1 arg2 arg3 "script.st runs"
>   Smalltalk arguments ==> #('arg1' 'arg2' 'arg3')
>   (1 to: 4) collect: [:i | Smalltalk argumentAt: i ] ==> #('arg1' 'arg2' 'arg3' nil)
> 
>   $ squeak script.st arg1 arg2 arg3 ==> error image not found
> 
>   $ squeak script.st -- arg1 arg2 arg3 ==> error image not found
> 
>   "Preferred bahaviour, but VM patch required"
>   $ squeak -- arg1 arg2 arg3 "use default image name squeak.image and no start script"
>   Smalltalk arguments ==> #('arg1' 'arg2' 'arg3')
>   (1 to: 4) collect: [:i | Smalltalk argumentAt: i ] ==> #('arg1' 'arg2' 'arg3' nil)
>  
>   "Without VM patch, this is the expected (but not desirable) behavior, because
>   the VM fails to provide '--' in vmParameters in this case only. Note that the 
>   current workaround is simply to specify the image name on the command line."
>   $ squeak -- arg1 arg2 arg3 ==> Error: no content to install
>   Smalltalk arguments ==> #('arg2' 'arg3')
>   (1 to: 4) collect: [:i | Smalltalk argumentAt: i ] #('arg2' 'arg3' nil nil)
> 
> Dave


More information about the Squeak-dev mailing list