   # Compile a vanilla function call.
   compileNode: (o) ->
     @variable?.front = @front
-    for arg in @args when arg instanceof Splat
-      return @compileSplat o
+    if code = Splat.compileSplattedArray o, @args, true
+      return @compileSplat o, code
     args = (arg.compile o, LEVEL_LIST for arg in @args).join ', '
     if @isSuper
       @compileSuper args, o

      else
        fun = ref = base.compile o, LEVEL_ACCESS
        fun += name.compile o if name
      return "#{fun}.apply(#{ref}, #{splatargs})"
    idt = @idt 1
    """
    (function(func, args, ctor) {
    #{idt}ctor.prototype = func.prototype;
    #{idt}var child = new ctor, result = func.apply(child, args);
    #{idt}return typeof result === "object" ? result : child;
    #{@tab}})(#{ @variable.compile o, LEVEL_LIST }, #{splatargs}, function() {})
    """

#### Extends


  # If this Expressions consists of just a single node, unwrap it by pulling
  # it back out.
  unwrap: ->
    if @expressions.length is 1 then @expressions[0] else this

  # Is this an empty block of code?
  isEmpty: ->
    not @expressions.length

  # An Expressions node does not return its entire body, rather it
