 
   constructor: (condition, @body, @tags) ->
     @tags or= {}
-    if @tags.invert
-      op = condition instanceof Op
-      if op and condition.isInvertible()
-        condition.invert()
-      else
-        condition = new Parens condition if op and not condition.isUnary()
-        condition = new Op '!', condition
-    @condition = condition
+    @condition = if @tags.invert then condition.invert() else condition
     @elseBody  = null
     @isChain   = false
 


  constructor: (condition, opts) ->
    super()
    if opts?.invert
      condition = new Parens condition if condition instanceof Op
      condition = new Op('!', condition)
    @condition  = condition
    @guard = opts?.guard

  addBody: (body) ->

  traverseChildren: (crossScope, func) ->
    @eachChild (child) ->
      return false if func(child) is false
      if crossScope or child not instanceof Code
        child.traverseChildren crossScope, func

  invert: -> new Op '!', this

  # Default implementations of the common node properties and methods. Nodes
  # will override these with custom logic, if needed.
