   constructor: (@value) ->
 
   makeReturn: ->
-    if @isStatement() then this else super()
+    if @isPureStatement() then this else new Return this
 
   # Break and continue must be treated as pure statements -- they lose their
   # meaning when wrapped in a closure.


  children: ['expressions']

  isStatement: YES

  constructor: (nodes) ->
    @expressions = compact flatten nodes or []


  # Compile the expressions body for the contents of a function, with
  # declarations of all inner variables pushed up to the top.
  compileWithDeclarations: (o) ->
    o.level = LEVEL_TOP
    code    = @compileNode o
    {scope} = o
    if scope.hasAssignments this
