Am Donnerstag, 28. September 2006 22:53 schrieb Allison Randal:
> Leopold Toetsch wrote:
> > Am Donnerstag, 28. September 2006 21:42 schrieb Patrick R. Michaud:
> >> obj.'abc'() # call 'abc' method of obj
> >> obj.abc() # always the same as above
> >> obj.{abc}() # call method indicated by abc symbol
> >
> > This makes a lot of sense, and there are simple rules for the syntax:
> >
> > * use {symbol}, if the thing isa symbol
> > * use 'name', if the 'name' contains non-identifier characters
> > (of if unsure, of if you are a compiler ;-)
> > * else you also might use bare word syntax
>
> The latter two are the same rules as the rules for declaring
> methods/subs, which makes for nice consistency.
Yep.
> > That should be it to deal with all that:
> >
> > obj.S0() # emit warning but call 'S0' method
> >
> > Rational: if bare <abc> isa identifier here, then C<S0> too.
>
> I can see the value of this warning for the transition, but long-term we
> really don't want the code to be littered with warnings for deprecated
> features. It'd be pretty simple to write a script that combs the .pir
> files in the repository for any instance of a method name that looks
> like a register name.
Indeed. I'm pretty sure that there isn't one test nor other .pir in the tree
using this syntax. The rules are clear enough: C<S0> is parsed as IDentifier
in that case, which means:
obj.S0() := obj.'S0'()
That is: no warning needed at all.
> > obj.$S0() # illegal
>
> Is '$' a valid identifier character?
No. Just a PIR temp variable signature, which makes the thingy a variable or
synmbol.
> If so, then it's legal, but just
> treated as part of the string name of the method. If not (which seems
> more likely), then it's illegal anyway, so no special case is needed.
I wanted just to stress the illegality of it as it was differently used in a
previous mail.
> Allison
leo