   ]
 
   ForBody: [
-    o "FOR Range",                              -> {source: new ValueNode($2), vars: []}
+    o "FOR Range",                              -> source: new ValueNode($2), vars: []
     o "ForStart ForSource",                     -> $2.raw = $1.raw; $2.vars = $1; $2
   ]
 

  # ambiguity.
  IfBlock: [
    o "IF Expression Block",                    -> new IfNode $2, $3
    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
  ]

# `$1` would be the value of the first `Expression`, `$2` would be the token
# for the `UNLESS` terminal, and `$3` would be the value of the second
# `Expression`.
grammar =

  # The **Root** is the top-level node in the syntax tree. Since we parse bottom-up,
  # all parsing must end here.
