about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Clements <clements@racket-lang.org>2013-07-10 11:52:59 -0700
committerJohn Clements <clements@racket-lang.org>2013-09-06 13:35:11 -0700
commit9ab2cfdae610374760b86a8b6069baf365970f2f (patch)
treed52042e1e4e25af18d93c21073c7ad12f3f850f4
parentbc2a44daf1cf348da98de9553fccc23806e84f71 (diff)
downloadrust-9ab2cfdae610374760b86a8b6069baf365970f2f.tar.gz
rust-9ab2cfdae610374760b86a8b6069baf365970f2f.zip
added utility function
-rw-r--r--src/libsyntax/ast_util.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs
index 4c0ad816afb..dfac782929d 100644
--- a/src/libsyntax/ast_util.rs
+++ b/src/libsyntax/ast_util.rs
@@ -985,6 +985,32 @@ pub fn getLast(arr: &~[Mrk]) -> uint {
     *arr.last()
 }
 
+// are two paths equal when compared unhygienically?
+// since I'm using this to replace ==, it seems appropriate
+// to compare the span, global, etc. fields as well.
+pub fn path_name_eq(a : &ast::Path, b : &ast::Path) -> bool {
+    (a.span == b.span)
+    && (a.global == b.global)
+    // NOTE: ident->name in lifetimes!
+    && (a.rp == b.rp)
+    // NOTE: can a type contain an ident?
+    && (a.types == b.types)
+    && (idents_name_eq(a.idents, b.idents))
+}
+
+// are two arrays of idents equal when compared unhygienically?
+pub fn idents_name_eq(a : &[ast::ident], b : &[ast::ident]) -> bool {
+    if (a.len() != b.len()) {
+        false
+    } else {
+        for a.iter().enumerate().advance |(idx,id)|{
+            if (id.name != b[idx].name) {
+                return false;
+            }
+        }
+        true
+    }
+}
 
 #[cfg(test)]
 mod test {
@@ -992,6 +1018,17 @@ mod test {
     use super::*;
     use std::io;
 
+    #[test] fn idents_name_eq_test() {
+        assert!(idents_name_eq(~[ident{name:3,ctxt:4},
+                                 ident{name:78,ctxt:82}],
+                               ~[ident{name:3,ctxt:104},
+                                 ident{name:78,ctxt:182}]));
+        assert!(!idents_name_eq(~[ident{name:3,ctxt:4},
+                                  ident{name:78,ctxt:82}],
+                                ~[ident{name:3,ctxt:104},
+                                  ident{name:77,ctxt:182}]));
+    }
+
     #[test] fn xorpush_test () {
         let mut s = ~[];
         xorPush(&mut s,14);