diff options
| author | John Clements <clements@racket-lang.org> | 2013-09-06 13:34:58 -0700 |
|---|---|---|
| committer | John Clements <clements@racket-lang.org> | 2013-09-06 13:34:58 -0700 |
| commit | acad9f35b3aef8cc0d82c6a43c662ddc0f946568 (patch) | |
| tree | 03dec67332189719211d24fdcfe9760622c42082 | |
| parent | 77c96d754e3a5d4b8dd59269b0cb0324350ccbec (diff) | |
| download | rust-acad9f35b3aef8cc0d82c6a43c662ddc0f946568.tar.gz rust-acad9f35b3aef8cc0d82c6a43c662ddc0f946568.zip | |
commenting out special Eq implementation for now
See the comments for details on why I'm leaving this code in, though commented out.
| -rw-r--r-- | src/libsyntax/ast.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 8a9bd5192ad..c2087928e8d 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -24,7 +24,7 @@ use extra::serialize::{Encodable, Decodable, Encoder, Decoder}; // table) and a SyntaxContext to track renaming and // macro expansion per Flatt et al., "Macros // That Work Together" -#[deriving(Clone, IterBytes, ToStr)] +#[deriving(Clone, Eq, IterBytes, ToStr)] pub struct Ident { name: Name, ctxt: SyntaxContext } impl Ident { @@ -32,7 +32,17 @@ impl Ident { pub fn new(name: Name) -> Ident { Ident {name: name, ctxt: EMPTY_CTXT}} } -impl Eq for Ident { +// defining eq in this way is a way of guaranteeing that later stages of the +// compiler don't compare identifiers unhygienically. Unfortunately, some tests +// (specifically debuginfo in no-opt) want to do these comparisons, and that +// seems fine. If only I could find a nice way to statically ensure that +// the compiler "proper" never compares identifiers.... I'm leaving this +// code here (commented out) for potential use in debugging. Specifically, if +// there's a bug where "identifiers aren't matching", it may be because +// they should be compared using mtwt_resolve. In such a case, re-enabling this +// code (and disabling deriving(Eq) for Idents) could help to isolate the +// problem +/* impl Eq for Ident { fn eq(&self, other: &Ident) -> bool { if (self.ctxt == other.ctxt) { self.name == other.name @@ -44,6 +54,7 @@ impl Eq for Ident { ! self.eq(other) } } +*/ /// A SyntaxContext represents a chain of macro-expandings /// and renamings. Each macro expansion corresponds to |
