From 70097504f78c4c41368a0b864a94df95fb9c27f7 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 17 Aug 2018 21:10:55 +0300 Subject: hide root --- crates/libsyntax2/src/yellow/syntax.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'crates/libsyntax2/src/yellow/syntax.rs') diff --git a/crates/libsyntax2/src/yellow/syntax.rs b/crates/libsyntax2/src/yellow/syntax.rs index bb390751a..ef82ba408 100644 --- a/crates/libsyntax2/src/yellow/syntax.rs +++ b/crates/libsyntax2/src/yellow/syntax.rs @@ -3,14 +3,14 @@ use std::{fmt, sync::Arc}; use smol_str::SmolStr; use { - yellow::{RedNode, TreeRoot, SyntaxRoot, RedPtr}, + yellow::{RedNode, TreeRoot, SyntaxRoot, RedPtr, RefRoot, OwnedRoot}, SyntaxKind::{self, *}, TextRange, TextUnit, }; #[derive(Clone, Copy)] -pub struct SyntaxNode> { +pub struct SyntaxNode { pub(crate) root: R, // Guaranteed to not dangle, because `root` holds a // strong reference to red's ancestor @@ -28,7 +28,7 @@ impl PartialEq> for SyntaxNode { impl Eq for SyntaxNode {} -pub type SyntaxNodeRef<'a> = SyntaxNode<&'a SyntaxRoot>; +pub type SyntaxNodeRef<'a> = SyntaxNode>; #[test] fn syntax_node_ref_is_copy() { @@ -42,18 +42,18 @@ pub struct SyntaxError { pub offset: TextUnit, } -impl SyntaxNode> { +impl SyntaxNode { pub(crate) fn new_owned(root: SyntaxRoot) -> Self { - let root = Arc::new(root); - let red = RedPtr::new(&root.red); + let root = OwnedRoot(Arc::new(root)); + let red = RedPtr::new(&root.syntax_root().red); SyntaxNode { root, red } } } impl SyntaxNode { - pub fn as_ref<'a>(&'a self) -> SyntaxNode<&'a SyntaxRoot> { + pub fn as_ref<'a>(&'a self) -> SyntaxNode> { SyntaxNode { - root: &*self.root, + root: self.root.borrowed(), red: self.red, } } -- cgit v1.2.3