# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

""" Visitor Object for traversing AST """

#
# IDLVisitor
#
# The IDLVisitor class will traverse an AST truncating portions of the tree
# when 'VisitFilter' returns false.  After the filter returns true, for each
# node, the visitor will call the 'Arrive' member passing in the node and
# and generic data object from the parent call.  The returned value is then
# passed to all children who's results are aggregated into a list.  The child
# results along with the original Arrive result are passed to the Depart
# function which returns the final result of the Visit.  By default this is
# the exact value that was return from the original arrive.
#

class IDLVisitor(object):
  def __init__(self):
    pass

  # Return TRUE if the node should be visited
  def VisitFilter(self, node, data):
    return True

  def Visit(self, node, data):
    if not self.VisitFilter(node, data): return None

    childdata = []
    newdata = self.Arrive(node, data)
    for child in node.GetChildren():
      ret = self.Visit(child, newdata)
      if ret is not None:
        childdata.append(ret)
    return self.Depart(node, newdata, childdata)

  def Arrive(self, node, data):
    __pychecker__ = 'unusednames=node'
    return data

  def Depart(self, node, data, childdata):
    __pychecker__ = 'unusednames=node,childdata'
    return data
