   # ambiguity.
   IfBlock: [
     o "IF Expression Block",                    -> new IfNode $2, $3
-    o "UNLESS Expression Block",                -> new IfNode $2, $3, {invert: true}
+    o "UNLESS Expression Block",                -> new IfNode $2, $3, invert: true
     o "IfBlock ELSE IF Expression Block",       -> $1.addElse (new IfNode($4, $5)).forceStatement()
     o "IfBlock ELSE Block",                     -> $1.addElse $3
   ]

  # *if* and *unless*.
  If: [
    o "IfBlock"
    o "Statement IF Expression",                -> new IfNode $3, Expressions.wrap([$1]), {statement: true}
    o "Expression IF Expression",               -> new IfNode $3, Expressions.wrap([$1]), {statement: true}
    o "Statement UNLESS Expression",            -> new IfNode $3, Expressions.wrap([$1]), {statement: true, invert: true}
    o "Expression UNLESS Expression",           -> new IfNode $3, Expressions.wrap([$1]), {statement: true, invert: true}
  ]

  # Arithmetic and logical operators, working on one or more operands.

  # clause. If it's an array comprehension, you can also choose to step through
  # in fixed-size increments.
  ForSource: [
    o "IN Expression",                               -> source: $2
    o "OF Expression",                               -> source: $2, object: true
    o "IN Expression WHEN Expression",               -> source: $2, guard: $4
    o "OF Expression WHEN Expression",               -> source: $2, guard: $4, object: true
    o "IN Expression BY Expression",                 -> source: $2, step:  $4
    o "IN Expression WHEN Expression BY Expression", -> source: $2, guard: $4, step:   $6
    o "IN Expression BY Expression WHEN Expression", -> source: $2, step:  $4, guard: $6
  ]

  # The CoffeeScript switch/when/else block replaces the JavaScript
