     klass = override or @constructor.name + if @soakNode then '?' else ''
     '\n' + idt + klass + children
 
+  # Passes each child to a function, breaking when the function returns `false`.
   eachChild: (func) ->
-    return unless @children
-    for attr in @children when this[attr]
-      for child in flatten [this[attr]]
-        return if func(child) is false
+    return this unless @children
+    for attr in @children when @[attr]
+      for child in flatten [@[attr]]
+        return this if func(child) is false
     this
 
   collectChildren: ->

  traverseChildren: (crossScope, func) ->
    @eachChild (child) ->
      return false if func(child) is false
      if crossScope or child not instanceof Code
        child.traverseChildren crossScope, func

  invert: -> new Op '!', this


  # return the result, and it's an expression, simply return it. If it's a
  # statement, ask the statement to do so.
  compileExpression: (node, o) ->
    o.top = node.tags.front = on
    @tab  = o.indent
    code  = node.compile o
    if node.isStatement o then code else @tab + code + ';'

  # Wrap up the given nodes as an **Expressions**, unless it already happens
  # to be one.
  @wrap: (nodes) ->
    return nodes[0] if nodes.length is 1 and nodes[0] instanceof Expressions
    new Expressions nodes

#### Literal

