   # A single parameter in a function definition can be ordinary, or a splat
   # that hoovers up the remaining arguments.
   Param: [
-    o "PARAM",                                  -> new LiteralNode $1
-    o "PARAM . . .",                            -> new SplatNode $1
+    o "PARAM",                                  -> new LiteralNode yytext
+    o "Param . . .",                            -> new SplatNode $1
   ]
 
   # A splat that occurs outside of a parameter list.


  # A catch clause names its error and runs a block of code.
  Catch: [
    o "CATCH IDENTIFIER Block",                 -> [$2, $3]
  ]

  # Throw an exception object.

  # Assignment when it happens within an object literal. The difference from
  # the ordinary **Assign** is that these allow numbers and strings as keys.
  AssignObj: [
    o "Identifier ASSIGN Expression",           -> new AssignNode new ValueNode($1), $3, 'object'
    o "AlphaNumeric ASSIGN Expression",         -> new AssignNode new ValueNode($1), $3, 'object'
    o "Comment"
  ]

  # A return statement from a function body.
  Return: [
    o "RETURN Expression",                      -> new ReturnNode $2
    o "RETURN",                                 -> new ReturnNode new ValueNode new LiteralNode 'null'
  ]

  # A comment. Because CoffeeScript passes comments through to JavaScript, we
  # have to parse comments like any other construct, and identify all of the
  # positions in which they can occur in the grammar.
  Comment: [
    o "COMMENT",                                -> new CommentNode yytext
  ]

  # [The existential operator](http://jashkenas.github.com/coffee-script/#existence).
