From f6905735ebf4a7ce2877fd6218477d2c793a34b4 Mon Sep 17 00:00:00 2001 From: DQ Date: Wed, 10 Feb 2021 22:23:31 +0100 Subject: [PATCH] Change `SyntaxNode`'s `Hash` and `Eq` to be based on pointer equality (#15) --- src/green/node.rs | 7 +------ src/syntax.rs | 5 ++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/green/node.rs b/src/green/node.rs index 5f6f540..13f245d 100644 --- a/src/green/node.rs +++ b/src/green/node.rs @@ -5,7 +5,7 @@ use std::{ }; use fxhash::FxHasher32; -use servo_arc::{Arc, HeaderSlice, HeaderWithLength, ThinArc}; +use servo_arc::{Arc, HeaderWithLength, ThinArc}; use crate::{ green::{GreenElement, GreenElementRef, PackedGreenElement, SyntaxKind}, @@ -122,11 +122,6 @@ impl GreenNode { inner: self.data.slice.iter(), } } - - pub(crate) fn ptr(&self) -> *const u8 { - let r: &HeaderSlice<_, _> = &self.data; - r as *const _ as _ - } } impl Hash for GreenNode { diff --git a/src/syntax.rs b/src/syntax.rs index 0e2a106..411a3e4 100644 --- a/src/syntax.rs +++ b/src/syntax.rs @@ -185,7 +185,7 @@ impl SyntaxNode { // Identity semantics for hash & eq impl PartialEq for SyntaxNode { fn eq(&self, other: &SyntaxNode) -> bool { - self.green().ptr() == other.green().ptr() && self.text_range().start() == other.text_range().start() + self.data == other.data } } @@ -193,8 +193,7 @@ impl Eq for SyntaxNode {} impl Hash for SyntaxNode { fn hash(&self, state: &mut H) { - ptr::hash(self.green().ptr(), state); - self.text_range().start().hash(state); + ptr::hash(self.data, state); } }