   # will convert some postfix forms into blocks for us, by adjusting the
   # token stream.
   Block: [
-    o 'INDENT Body OUTDENT', -> $2
-    o 'INDENT      OUTDENT', -> Lines()
+    o 'INDENT Body OUTDENT' ,-> $2
+    o 'INDENT      OUTDENT' ,-> Lines()
   ]
 
   # **Fun** node is the function literal, defined by an indented **Block**

  ]

  Cases: [
    o       'CASE SimpleArgs Block', -> [Case $2, $3]
    o 'Cases CASE SimpleArgs Block', -> $1.concat Case $3, $4
  ]
  # Just simple, comma-separated, required arguments (no fancy syntax).
  # We need this to be separate from the **ArgList** for use in **Cases**,
  # where having the newlines wouldn't make sense.
  SimpleArgs: [
    o 'Expression',              -> [$1]
    o 'SimpleArgs , Expression', -> $1.concat $3
  ]

  # Optional `extends` clause for class definition.
  OptExtends: [
    o '',              -> null
    o 'EXTENDS Value', -> $2
  ]

  # The **Root** is the top-level node in the syntax tree.
  # Since we parse bottom-up, all parsing must end here.
  Root: [
    o '', -> Lines()
    o 'Body'
    o 'Block TERMINATOR'
  ]

    o '...        ObjAssignable' ,-> Splat  $2
    o 'PLUS_MINUS ObjAssignable' ,-> Assign $2, Literal($1 is '+'), ':'

    o 'COMMENT' ,-> Comment $1
  ]
  # Assignment of properties within an object literal can be separated by
  # comma, as in JavaScript, or simply by newline.
  AssignList: [
    o ''                                                       ,-> []
    o 'AssignObj'                                              ,-> [$1]
    o 'AssignList , AssignObj'                                 ,-> $1.concat $3
    o 'AssignList OptComma TERMINATOR AssignObj'               ,-> $1.concat $4
    o 'AssignList OptComma INDENT AssignList OptComma OUTDENT' ,-> $1.concat $4
  ]
  # In Coco, an object literal is simply a list of assignments.
  Object: [
    o '{ AssignList OptComma }' ,-> Obj $2
  ]

  # The most basic form of *if* is a condition and an action. The following
  # if-related rules are broken up along these lines in order to avoid
  # ambiguity.
  IfBlock: [
    o 'IF Expression Block'              ,-> If $2, $3, name: $1
    o 'IfBlock ELSE IF Expression Block' ,-> $1.addElse If $4, $5, name: $3
    o 'IfBlock ELSE Block'               ,-> $1.addElse $3
  ]

  LoopHead: [
