diff options
Diffstat (limited to 'src/syntax/tree.rs')
| -rw-r--r-- | src/syntax/tree.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/syntax/tree.rs b/src/syntax/tree.rs index 73734d28..4ce39cd4 100644 --- a/src/syntax/tree.rs +++ b/src/syntax/tree.rs @@ -31,6 +31,13 @@ pub enum SyntaxNode { Dyn(Box<dyn DynamicNode>), } +impl SyntaxNode { + /// Create a `Dyn` variant from an unboxed dynamic node. + pub fn boxed<T: DynamicNode + 'static>(node: T) -> SyntaxNode { + SyntaxNode::Dyn(Box::new(node)) + } +} + impl PartialEq for SyntaxNode { fn eq(&self, other: &SyntaxNode) -> bool { use SyntaxNode::*; @@ -65,10 +72,7 @@ pub trait DynamicNode: Debug + Layout { impl dyn DynamicNode { /// Downcast this dynamic node to a concrete node. - pub fn downcast<T>(&self) -> Option<&T> - where - T: DynamicNode + 'static, - { + pub fn downcast<T: DynamicNode + 'static>(&self) -> Option<&T> { self.as_any().downcast_ref::<T>() } } |
