[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] variable scoping (was Re: compiling method attributes)
From: |
Stephen Compall |
Subject: |
[Help-smalltalk] variable scoping (was Re: compiling method attributes) |
Date: |
Sun, 31 Dec 2006 16:15:33 -0600 |
On Sun, 2006-12-31 at 18:19 +0100, Paolo Bonzini wrote:
> This one seems wrong, you need "self start + source size - 1" IMO?
Doh!
> Except #primitive:, compilation of attributes is taken care by blocks
> registered with the classes and returned by Class>>#pragmaHandlerFor:
> (if it returns nil, the attribute has no compile-time semantics). With
> the usual bugs due to lack of good unit tests...
>
> The blocks are evaluated passing the CompiledMethod and the attribute (a
> Message), and their return value is nil or an error message.
Well, this is better than ... reimplementing everything ...
> > (Wondering what's causing the "duplicate variable name" warnings. Oh
> > well, some other time, more testing)
>
> I get them too, let's see who gets it first.
http://scompall.nocandysw.com/gst/varscope-and-dupExists.diff
2006-12-31 Stephen Compall <address@hidden>
* compiler/STSymTable.st: Support nested scopes, warn on
variable shadowing, and raise compiler error if variable
duplicated at same scope level.
The spurious 'duplicate variable name' warning was due to a boolean
inversion.
While looking for that I found something else that seemed odd:
st> [UndefinedObject compile: 'scTest |a| a := 2. [:a | a] value. ^a']
on: Warning
do: [:w | w messageText printNl. w resume]!
'duplicate variable name a'
Object: STFileInParser new "<-0x4c24cba0>" error: Undefined variable 'a'
referenced.
I tested this in Squeak, which makes compilation fail for shadowing
names. While this is just a change from compileWarning: to
compileError:, I decided to add variable scope-sensitivity and shadowing
instead, which seems to be what the builtin compiler does as well.
With this patch:
st> [UndefinedObject compile: 'scTest |a| a := 2. [:a | a] value. ^a']
on: Warning
do: [:w | w messageText printNl. w resume]!
'variable ''a'' shadows another'
> The attached patch may require some work to retrofit into your (patched)
> 2.3 tree, but I will backport the entire set to my arch repository later.
I would love to be working with arch, but...see
<address@hidden>, or
'command-line-dependent compiler "error"' for more.
--
Stephen Compall
http://scompall.nocandysw.com/blog
signature.asc
Description: This is a digitally signed message part