     for node in @properties.concat @base
       return no if node.soakNode or node instanceof Call
     yes
+
+  isAssignable: ->
+    @hasProperties() or @base.isAssignable()
 
   assigns: (name) ->
     not @properties.length and @base.assigns name


  matchParens: (o, obj) ->
    continue until obj is obj = obj.unwrap()
    unless obj instanceof Literal or obj instanceof Value
      throw SyntaxError 'nonreference in destructuring assignment shorthand.'
    Value.wrap(obj).cacheReference o

#### Code

      @value.klass = match[1]
    val = @value.compile o, LEVEL_LIST
    return "#{name}: #{val}" if @context is 'object'
    unless @variable.isAssignable()
      throw SyntaxError "\"#{ @variable.compile o }\" cannot be assigned."
    o.scope.find name unless isValue and (@variable.hasProperties() or @variable.namespaced)
    val = name + " #{ @context or '=' } " + val
    if o.level <= LEVEL_LIST then val else "(#{val})"
