     top       = o.level is LEVEL_TOP
     {value}   = this
     {objects} = @variable.base
-    return value.compile o unless olength = objects.length
+    return value.compile o unless olen = objects.length
     isObject = @variable.isObject()
-    if top and olength is 1 and (obj = objects[0]) not instanceof Splat
+    if top and olen is 1 and (obj = objects[0]) not instanceof Splat
       # Unroll simplest cases: `{v} = x` -> `v = x.v`
       if obj instanceof Assign
         {variable: {base: idx}, value: obj} = obj

          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
        if rest = olength - i - 1 or ''
          ivar = o.scope.freeVariable 'i'
          rest = ", #{ivar} = #{valVar}.length - #{rest}"
        val   = new Literal utility('slice') + ".call(#{valVar}, #{i}#{rest})"
        splat = "#{ivar} < #{i} ? #{ivar} = #{i} : #{ivar}++"
      else
        if obj instanceof Splat
          obj = obj.name.compile o

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

