   compile_node: (o) ->
     if @index? then @compile_param(o) else @name.compile(o)
 
+  # Compiling a parameter splat means recovering the parameters that succeed
+  # the splat in the parameter list, by slicing the arguments object.
   compile_param: (o) ->
     name: @name.compile(o)
     o.scope.find name
     "$name = Array.prototype.slice.call(arguments, $@index)"
 
+  # A compiling a splat as a destructuring assignment means slicing arguments
+  # from the right-hand-side's corresponding array.
   compile_value: (o, name, index) ->
     "Array.prototype.slice.call($name, $index)"
 
+#### WhileNode
 
 # A while loop, the only sort of low-level loop exposed by CoffeeScript. From
-# it, all other loops can be manufactured.
+# it, all other loops can be manufactured. Useful in cases where you need more
+# flexibility or more speed than a comprehension can provide.
 exports.WhileNode: class WhileNode extends BaseNode
   type: 'While'
 


statement WhileNode


# Simple Arithmetic and logical operations. Performs some conversion from
# CoffeeScript operations into their JavaScript equivalents.
exports.OpNode: class OpNode extends BaseNode
  type: 'Op'

  CONVERSIONS: {
    '==':   '==='
    '!=':   '!=='

#### SplatNode

# A splat, either as a parameter to a function, an argument to a call,
# or as part of a destructuring assignment.
exports.SplatNode: class SplatNode extends BaseNode
  type: 'Splat'

