[squeak-dev] Improving command line argument processing

Marcel Taeumel marcel.taeumel at hpi.de
Mon Jun 8 09:49:24 UTC 2020


Hi Dave!

Thanks for looking into this! :-)

> 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.

Well, it would be nice to also work with "/arg" not just "--arg" on the Windows CMD shell. ;-)

Best,
Marcel
Am 08.06.2020 00:53:26 schrieb David T. Lewis <lewis at mail.msen.com>:
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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200608/2ee0d70f/attachment-0001.html>


More information about the Squeak-dev mailing list