Signed-off-by: Jean Privat <jean@pryen.org>
super Visitor
redef fun visit(node)
do
super Visitor
redef fun visit(node)
do
node.accept_ast_validation(self)
node.accept_ast_validation(self)
end
private var path = new List[ANode]
private var seen = new HashSet[ANode]
end
private var path = new List[ANode]
private var seen = new HashSet[ANode]
private fun accept_ast_validation(v: ASTValidationVisitor)
do
var parent = self.parent
private fun accept_ast_validation(v: ASTValidationVisitor)
do
var parent = self.parent
- 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}"
if parent == null then
self.parent = path_parent
#debug "PARENT: expected parent: {path_parent}"
else if parent != path_parent then
self.parent = path_parent
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
- 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
if not isset _location then
#debug "LOCATION: unlocated node {v.path.join(", ")}"
_location = self.parent.location
end