A space used to be accepted between minus sign and number in old versions
of Squeak compiler (before 2010)
But I doubt this was decided on purpose.
IMO it was more a side effect of the implementation, which had messy corners
(the fact that the tokenizer did produce two tokens $- and positive number)

I would add that this was undocumented, dialect specific, and a false good
idea letting newbies think that they can use unary prefixed operators...
There is no such thing in the language.

Oh, and this even has changed in Squeak a few years ago:

-------------------------------------------------------

http://source.squeak.org/trunk/Compiler-nice.120.mcz

==================== Summary ====================

Name: Compiler-nice.120
Author: nice
Time: 23 February 2010, 5:14:44.049 pm
UUID: 9429cc05-281b-484e-94c2-bd0baf4f5230
Ancestors: Compiler-nice.119

Authorize - at any position in binary selectors (like VW 7.7)
See http://bugs.squeak.org/view.php?id=3616
Address the problem of compiling 1@-2 with following strategy:

If compiler is non interactive, then compile with backward compatibility 1
@ (-2).
If compiler is interactive, propose a menu to disambiguate and insert a
proper space.
1@ -2 -> MessageSend receiver: 1 selector: #'@' argument: -2
1@- 2 -> MessageSend receiver: 1 selector: #'@-' argument: 2

Warning: Squeak did understand (1@-   2) as (1 @ (-2))....
I didn't do anything to support this vicious Squeakism, and by now the
semantics are change.


2015-09-24 9:25 GMT+02:00 Clément Bera <[email protected]>:

>
>
> 2015-09-24 8:19 GMT+02:00 Peter Uhnák <[email protected]>:
>
>> >   - 250 * 1.5 returns -2.25
>>
>> why is this valid syntax?
>>
>
> It should not. RBParser bug. This is not valid Smalltalk syntax. As Ben
> showed similar cases raise an error but this one generate incorrect
> compiledMethod instead.
>
>
>>
>> On Thu, Sep 24, 2015 at 5:35 AM, Ben Coman <[email protected]> wrote:
>>
>>> RBParser parseExpression: '-250 * 1.5' => "RBMessageNode(-250 * 1.5)"
>>> RBParser parseExpression: '- 250 * 1.5'   =>   "RBMessageNode(*1.5 *
>>> 1.5)"
>>>
>>> RBParser parseExpression: '250 * -1.5'    =>   "RBMessageNode(250 *
>>> -1.5)"
>>> RBParser parseExpression: '250 * - 1.5'   =>   MNU RBToken>>realvalue.
>>>
>>> RBParser parseExpression: '-250'   =>  "RBLiteralValueNode(-250)"
>>> RBParser parseExpression: '- 250' =>   MNU RBToken>>realvalue.
>>>
>>> So how significant should be the space between the negative sign and its
>>> number?
>>>
>>> cheers -ben
>>>
>>> On Thu, Sep 24, 2015 at 6:34 AM, Clément Bera <[email protected]>
>>> wrote:
>>> > RBParser parseExpression: '- 250 * 1.5'    => Answers
>>> RBMessageNode(*1.5 *
>>> > 1.5)
>>> >
>>> > Second expression looks correct.
>>> >
>>> > Hence RBParser bug.
>>> >
>>> > 2015-09-23 23:42 GMT+02:00 [email protected] <[email protected]>:
>>> >>
>>> >> debug it on the first one gives "MNU: receiver of
>>> "doSemanticAnalyisIn:"
>>> >> is nil.
>>> >>
>>> >> Weird.
>>> >>
>>> >> On Wed, Sep 23, 2015 at 8:40 AM, stepharo <[email protected]> wrote:
>>> >>>
>>> >>> Hi guys
>>> >>>
>>> >>> I think that this is quite bad that
>>> >>>     - 250 * 1.5 returns -2.25
>>> >>>
>>> >>> while
>>> >>>
>>> >>>     -250 * 1.5 return 375
>>> >>>
>>> >>> stef
>>> >>>
>>> >>
>>> >
>>>
>>>
>>
>

Reply via email to