   # operands are only evaluated once, even though we have to reference them
   # more than once.
   compileAssignment: (o) ->
+    [left, rite] = @first.cacheReference o
+    rite = new AssignNode rite, @second
+    return new OpNode(@operator.slice(0, -1), left, rite).compile o
+    
     [first, firstVar] = @first.compileReference o, precompile: yes, assignment: yes
     second = @second.compile o
     second = "(#{second})" if @second instanceof OpNode

  # Convenience for the most common use of contains. Does the node contain
  # a pure statement?
  containsPureStatement: ->
    @isPureStatement() or @contains (n) -> n.isPureStatement and n.isPureStatement()

  # Perform an in-order traversal of the AST. Crosses scope boundaries.
  traverse: (block) -> @traverseChildren true, block

  # If it's a constructor, then things get real tricky. We have to inject an
  # inner constructor in order to be able to pass the varargs.
  compileSplat: (o) ->
    splatargs = @compileSplatArguments o
    return "#{ @superReference o }.apply(this, #{splatargs})" if @isSuper
    unless @isNew
      base = new ValueNode base unless (base = @variable) instanceof ValueNode
      if (name = base.properties.pop()) and base.isComplex()
        ref = o.scope.freeVariable 'this'
        fun = "(#{ref} = #{ base.compile o })#{ name.compile o }"
      else
        fun = ref = base.compile o
        fun += name.compile o if name
      return "#{fun}.apply(#{ref}, #{splatargs})"
    call = 'call(this)'
    argvar = (n) -> n instanceof LiteralNode and n.value is 'arguments'
    for arg in @args when arg.contains argvar
      call = 'apply(this, arguments)'
      break
    a = o.scope.freeVariable 'ctor'
    b = o.scope.freeVariable 'ref'
    c = o.scope.freeVariable 'result'
    """
    (function() {
    #{idt = @idt 1}var ctor = function() {};
    #{idt}#{utility 'extends'}(ctor, #{a} = #{ @variable.compile o });
    #{idt}return typeof (#{c} = #{a}.apply(#{b} = new ctor, #{splatargs})) === "object" ? #{c} : #{b};
    #{@tab}}).#{call}
    """

#### ExtendsNode

