From acad9f35b3aef8cc0d82c6a43c662ddc0f946568 Mon Sep 17 00:00:00 2001 From: John Clements Date: Fri, 6 Sep 2013 13:34:58 -0700 Subject: [PATCH] commenting out special Eq implementation for now See the comments for details on why I'm leaving this code in, though commented out. --- src/libsyntax/ast.rs | 15 +++++++++++++-- 1 file 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