       value = new Value value
       value.properties.push new (if acc then Accessor else Index) idx
       return new Assign(obj, value).compile o
-    valVar  = value.compile o, LEVEL_LIST
+    vvar    = value.compile o, LEVEL_LIST
     assigns = []
     splat   = false
-    if not IDENTIFIER.test(valVar) or @variable.assigns(valVar)
-      assigns.push "#{ ref = o.scope.freeVariable 'ref' } = #{valVar}"
-      valVar = ref
+    if not IDENTIFIER.test(vvar) or @variable.assigns(vvar)
+      assigns.push "#{ ref = o.scope.freeVariable 'ref' } = #{vvar}"
+      vvar = ref
     for obj, i in objects
       # A regular array pattern-match.
       idx = i

          acc = no
        else
          acc = isObject and IDENTIFIER.test idx.unwrap().value or 0
        val = new Value new Literal(valVar), [new (if acc then Accessor else Index) idx]
      assigns.push new Assign(obj, val).compile o, LEVEL_LIST
    assigns.push valVar unless top
    code = assigns.join ', '
    if o.level < LEVEL_LIST then code else "(#{code})"


          then [obj, idx] = new Value(obj.unwrapAll()).cacheReference o
          else idx = if obj.tags.this then obj.properties[0].name else obj
      if not splat and obj instanceof Splat
        val = "#{olen} <= #{vvar}.length ? #{ utility 'slice' }.call(#{vvar}, #{i}"
        if rest = olen - i - 1
          ivar = o.scope.freeVariable 'i'
          val += ", #{ivar} = #{vvar}.length - #{rest}) : (#{ivar} = #{i}, [])"
        else
          val += ") : []"
        val   = new Literal val
        splat = "#{ivar}++"
      else
        if obj instanceof Splat
          obj = obj.name.compile o
