On 25.02.2014, at 03:43, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:


2014-02-25 8:17 GMT+01:00 Frank Shearar <frank.shearar@gmail.com>:
On 24 February 2014 13:41,  <commits@source.squeak.org> wrote:
> Nicolas Cellier uploaded a new version of Compiler to project The Inbox:
> http://source.squeak.org/inbox/Compiler-nice.280.mcz
>
> ==================== Summary ====================
>
> Name: Compiler-nice.280
> Author: nice
> Time: 24 February 2014, 10:41:41.999 pm
> UUID: 6e62064c-bd88-4957-98e4-c57da15738fc
> Ancestors: Compiler-nice.279
>
> Accept ^ as a binary selector
> With this change, binary selector can be arbitrarily composed of #verticalBar | #upArrow ^ or any other Character classified as #binary (See Scanner class>>initializeTypeTable)
>
> =============== Diff against Compiler-nice.279 ===============

So

foo
  | a |
  a := 1 + 3
  ^ a.

actually means

foo
  | a |
  a := 1 + 3 ^ a.
  ^ self.

Which might be surprising - currently the former will fail with a
sensible error message. (I say this while liking that I can write "2 ^
2" instead of "2 squared"...)


Yep, this is the objection that I anticipated in my first annoucement.
Note that the format is clearly expressing the intention, that makes me think that the Python's interpretation of formating is not that bad ;) but we ain't gonna change that...

If #'^' is not a Symbol, then you'll get a warning that you used a new selector.
I don't remember, are all 1 char Symbol still interned, or did we change that?
Of course, once you implement ^ as a binary message, then the code is accepted as is without any sort of warning...

It's the same for self which is interpreted as a message send in this code:
    x := 1 + self foo
    self bar: x.
It warn once, at first self send, but then, #self is interned and you're never warned again...

For this sort of error, we could have a kind of lint rule for checking indentation : a single tab after a cr should match a beginning of a new statement (same with proper indentation inside blocks)

 Nicolas

frank

This would make sense if we we switch to ↑ (U+2191) as return.

- Bert -