diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fa0aeb..012a886 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * [Changed] SyntaxTree::get_str can take &RefNode * [Added] unwrap_locate macro +* [Fixed] iterator order ## [v0.2.1](https://github.com/dalance/sv-parser/compare/v0.2.0...v0.2.1) - 2019-10-28 diff --git a/sv-parser-macros/src/lib.rs b/sv-parser-macros/src/lib.rs index 3e67bbb..fe8b8c3 100644 --- a/sv-parser-macros/src/lib.rs +++ b/sv-parser-macros/src/lib.rs @@ -104,7 +104,8 @@ fn impl_node(ast: &DeriveInput) -> TokenStream { type IntoIter = Iter<'a>; fn into_iter(self) -> Self::IntoIter { - let nodes: RefNodes = self.into(); + let mut nodes: RefNodes = self.into(); + nodes.0.reverse(); Iter { next: nodes } } } diff --git a/sv-parser-syntaxtree/src/any_node.rs b/sv-parser-syntaxtree/src/any_node.rs index 4e64968..1adaf37 100644 --- a/sv-parser-syntaxtree/src/any_node.rs +++ b/sv-parser-syntaxtree/src/any_node.rs @@ -14,6 +14,11 @@ pub struct Iter<'a> { } impl<'a> Iter<'a> { + pub fn new(mut next: RefNodes<'a>) -> Self { + next.0.reverse(); + Iter { next } + } + pub fn event(self) -> EventIter<'a> { let next: NodeEvents = self.next.into(); EventIter { next }