   isUnary: ->
     not @second
 
-  isInvertable: ->
-    @operator in ['===', '!==']
+  isInvertible: ->
+    (@operator in ['===', '!==']) and
+      not (@first instanceof OpNode) and not (@second instanceof OpNode)
+
 
   isMutator: ->
-    ends(@operator, '=') and not @isInvertable()
+    ends(@operator, '=') and not (@operator in ['===', '!=='])
 
   isChainable: ->
     include(@CHAINABLE, @operator)

  constructor: (@condition, @body, @tags) ->
    @tags or= {}
    if @tags.invert
      if @condition instanceof OpNode and @condition.isInvertable()
        @condition.invert()
      else
        @condition = new OpNode '!', new ParentheticalNode @condition

    '==': '==='
    '!=': '!=='

  # The map of invertible operators.
  INVERSIONS:
    '!==': '==='
    '===': '!=='
