   makeReturn: ->
     @returns = true
     this
+
+  containsPureStatement: While::containsPureStatement
 
   compileReturnValue: (val, o) ->
     return '\n' + new Return(new Literal val).compile o if @returns


  isStatement: YES

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

  # 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 = ''
    idt     = @idt 1
    scope.find(name,  immediate: yes) if name
    scope.find(index, immediate: yes) if index
