     @is_pure_statement() or @contains (n) -> n.is_pure_statement()
 
   # Perform an in-order traversal of the AST. Crosses scope boundaries.
-  traverse: (block) -> @_traverse_children true, block
+  traverse: (block) -> @traverse_children true, block
 
   # `toString` representation of the node, for inspecting the parse tree.
   # This is what `coffee --nodes` prints out.

  top_sensitive: ->
    true

  # Short-circuit _traverse_children method to prevent it from crossing scope boundaries
  # unless cross_scope is true
  _traverse_children: (cross_scope, func) -> super(cross_scope, func) if cross_scope

  toString: (idt) ->
    idt: or ''

    '\n' + idt + @constructor.name + (child.toString(idt + TAB) for child in @children()).join('')

  children: ->
    nodes: []
    @each_child (node) -> nodes.push node
    nodes

  each_child: (func) ->
    for attr in @children_attributes when this[attr]
      for child in flatten [this[attr]]
        return if func(child) is false

  traverse_children: (cross_scope, func) ->
    return unless @children_attributes
    @each_child (child) ->
      func.apply(this, arguments)
      child.traverse_children(cross_scope, func) if child instanceof BaseNode

  # Default implementations of the common node identification methods. Nodes
  # will override these with custom logic, if needed.
