   compileNode: (o) ->
     body          = Expressions.wrap [@body]
     lastJumps     = last(body.expressions)?.jumps()
+    @returns      = no if lastJumps and lastJumps instanceof Return
     source        = if @range then @source.base else @source
     scope         = o.scope
     name          = @name  and @name.compile o, LEVEL_LIST
     index         = @index and @index.compile o, LEVEL_LIST
     scope.find(name,  immediate: yes) if name and not @pattern
     scope.find(index, immediate: yes) if index
-    rvar          = scope.freeVariable 'results' if @returns and not lastJumps
+    rvar          = scope.freeVariable 'results' if @returns
     ivar          = (if @range then name else index) or scope.freeVariable 'i'
     name          = ivar if @pattern
     varPart       = ''

    {expressions} = @body
    return no unless expressions.length
    for node in expressions
      return yes if node.jumps loop: yes
    no

  # The main difference from a JavaScript *while* is that the CoffeeScript


  jumps: (o = {block: yes}) ->
    for [conds, block] in @cases
      return block if block.jumps o
    @otherwise?.jumps o

  makeReturn: ->
