 
   is_splice: ->
     @has_properties() and @properties[@properties.length - 1] instanceof SliceNode
+
+  make_return: ->
+    if not @has_properties()
+      return @base.make_return()
+    else
+      return super()
 
   # The value can be unwrapped as its inner node, if there are no attached
   # properties.

        val: new ValueNode(literal(val_var), [new access_class(idx)])
      assigns.push(new AssignNode(obj, val).compile(o))
    code: assigns.join("\n")
    code += "\n${@tab}return ${ @variable.compile(o) };" if o.returns
    code

  # Compile the assignment from an array splice literal, using JavaScript's


  constructor: (variable, args) ->
    @children:  flatten [@variable: variable, @args: (args or [])]
    @is_new:    false

  # Tag this invocation as creating a new instance.
  new_instance: ->
    @is_new: true
    this

  prefix: ->
    if @is_new then 'new ' else ''

  # Compile a vanilla function call.
  compile_node: (o) ->
