   # some cannot.
   compileNode: (o) ->
     {scope} = o
+    {body}  = this
     name    = not @pattern and @name?.compile o
     index   = @index?.compile o
     ivar    = if not index then scope.freeVariable 'i' else index
     varPart = guardPart = defPart = retPart = ''
-    body    = Expressions.wrap [@body]
     idt     = @idt 1
     scope.find(name,  immediate: yes) if name
     scope.find(index, immediate: yes) if index

  # Convenience for the most common use of contains. Does the node contain
  # a pure statement?
  containsPureStatement: ->
    @isPureStatement() or @contains (node, func) ->
      func(node) or if node instanceof While or node instanceof For
        (node) -> node instanceof Return
      else func
    , (node) -> node.isPureStatement()

  # `toString` representation of the node, for inspecting the parse tree.
  # This is what `coffee --nodes` prints out.


  isStatement: YES

  constructor: (body, head) ->
    if head.index instanceof Value
      throw SyntaxError 'index cannot be a pattern matching expression'
    extend this, head
    @body    = Expressions.wrap [body]
    @step  or= new Literal 1 unless @object
    @pattern = @name instanceof Value
    @returns = false
