     @soak_node: tag is 'soak'
 
   compile_node: (o) ->
-    '[' + @index.compile(o) + ']'
+    idx: @index.compile o
+    "[$idx]"
 
 
 # A range literal. Ranges can be used to extract portions (slices) of arrays,

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

  compile_splice: (o) ->

    plus:   if range.exclusive then '' else ' + 1'
    from:   range.from.compile(o)
    to:     range.to.compile(o) + ' - ' + from + plus
    val:    @value.compile(o)
    "$name.splice.apply($name, [$from, $to].concat($val))"


# A function definition. The only node that creates a new Scope.
