[bug] Compiler bug or feature?
nicolas cellier
ncellier at ifrance.com
Mon May 8 17:57:05 UTC 2006
Le Lundi 08 Mai 2006 19:31, Andreas Raab a écrit :
> Wolfgang Helbig wrote:
> > All of them print:
> >
> > test: Name is already defined ->self
> > ^self
> >
> > when you type the above code in the system browser and try to save it.
>
> Yes, but if you execute, say:
>
> Object compile: 'testSelf: self'
> Object compile: 'testNil: nil'
> Object compile: 'testTrue: true'
> Object compile: 'testFalse: false'
>
> It compiles just nicely. So the bug seems to be the treatments of
> nil,true,false,self as variable nodes instead of literal constants.
> Variable nodes may be silently shadowed in some circumstances, literal
> constants cannot, e.g.,
>
> Object compile: 'test123: 123'
> Object compile: 'testString: ''string'''
> Object compile: 'testSymbol: #symbol'
>
> all correctly fail.
>
> Cheers,
> - Andreas
I think you forgot super, and maybe thisContext.
Compiler assume they are variables because it searches for variables, and they
are regularly constructed id made of letters...
Do you mean that true false nil should be detected as literals at Scanner
level (tokenization) ?
If literals true, false, nil or variables self, super, thisContext should
always take precedence over arguments and temporaries,
then such arguments would be inaccessible...
IMO, all these tricky constructs would better be forbidden with a hack in the
compiler...
Nicolas
More information about the Squeak-dev
mailing list
|