On 1/25/12 12:39 PM, Florian Weimer wrote:
* Tim Chevalier:

To make this change possible, the typechecker now forbids local
variable names that shadow the name of a tag that's in scope.

The "." was ugly, but doesn't this make the syntatic category of the
token dependent on the contents of imported modules?  I think this is
problematic for IDEs which want to go a bit beyond lexical syntax
highlighting.

Depends on how you define syntactic categories. It just means that resolve has to disambiguate a bit.


This change also breaks exhaustiveness checks to some degree.  Here's
an example:

enum enum_type {
     a, b, c
}

fn repr(e: enum_type) ->  str {
     alt e {
       a { "a" }
       b { "b" }
       c { "c" }
     }
}

We can remove the c variant from the enum_type definition, and the
program still compiles (even though this smells like a bug).  It keeps
compiling if we add a d variant to enum_type.  Flagging unused bound
variables as error isn't a reliable countermeasure because the
variant-now-variable might actually be used.

I see, this is a potential issue. Seems like a pretty rare case though, because you'd actually have to use the same tag variant inside the body.

Again, I'd point to Standard ML here... SML has the same rule and I've never seen it result in this bug.

Patrick
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to