From 74a371066a08174b5968ea2f78299aad7f9aa836 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 6 Mar 2015 21:18:35 +0700 Subject: [PATCH] astvalidatior: small refactorisation to make it more efficient Signed-off-by: Jean Privat --- src/astvalidation.nit | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/astvalidation.nit b/src/astvalidation.nit index b568366..b34d42f 100644 --- a/src/astvalidation.nit +++ b/src/astvalidation.nit @@ -22,9 +22,7 @@ class ASTValidationVisitor super Visitor redef fun visit(node) do - path.unshift(node) node.accept_ast_validation(self) - path.shift end private var path = new List[ANode] private var seen = new HashSet[ANode] @@ -34,29 +32,33 @@ redef class ANode private fun accept_ast_validation(v: ASTValidationVisitor) do var parent = self.parent + var path = v.path - if v.path.length > 1 then - var path_parent = v.path[1] + if path.length > 0 then + var path_parent = v.path.first if parent == null then self.parent = path_parent #debug "PARENT: expected parent: {path_parent}" + v.seen.add(self) else if parent != path_parent then self.parent = path_parent - debug "PARENT: expected parent: {path_parent}, got {parent}" + if v.seen.has(self) then + debug "DUPLICATE (NOTATREE): already seen node with parent {parent} now with {path_parent}." + else + v.seen.add(self) + debug "PARENT: expected parent: {path_parent}, got {parent}" + end end end - if v.seen.has(self) then - debug "DUPLICATE: already seen node. NOTATREE" - end - v.seen.add(self) - if not isset _location then #debug "LOCATION: unlocated node {v.path.join(", ")}" _location = self.parent.location end + path.unshift(self) visit_all(v) + path.shift end end -- 1.7.9.5