anchor.diff:  block_capture -> '&' expr eol     : #pargs{block='$2'}.
   block_capture -> eol '&' expr     : #pargs{block='$3'}.
   block_capture -> eol '&' expr eol : #pargs{block='$3'}.
  -    
  -%% Functions
  -functions -> function : ['$1'].
  -functions -> function eol : ['$1'].
  -functions -> eol functions : '$2'.
  -functions -> function eol functions : ['$1'|'$3'].
  -
  -%% Function identifiers
  -function_identifier -> identifier : '$1'.
  -function_identifier -> punctuated_identifier : '$1'.
  -function_identifier -> class : {identifier, ?line('$1'), class}.
  -function_identifier -> self  : {identifier, ?line('$1'), self}.
  -
  -%% Function definition
  -function_definition -> def function_identifier : ?identifier_name('$2').
  -function_definition -> def '[' ']' : '[]'.
  -function_definition -> def '[' ']' '=' : '[]='.
  -
  -%% Function declarations
  -function -> function_definition eol body 'end' : 
  +
  +%% Expression lists with interspersed defs (eol delimited)
  +def_exprs -> eol : [].
  +def_exprs -> def_expr : ['$1'].
  +def_exprs -> def_expr eol : ['$1'].
  +def_exprs -> eol def_exprs : '$2'.
  +def_exprs -> def_expr eol def_exprs : ['$1'|'$3'].
  +
  +%% Function definitions
  +def_expr -> def_prefix eol body 'end' : 
     #function{
       line = ?line('$2'), 
       name = '$1', 
       body = '$3'
     }.
  -function -> function_definition pargs eol body 'end' :
  +def_expr -> def_prefix pargs eol body 'end' :
     #function{
       line  = ?line('$3'), 
       name  = '$1', 
  
positive.code:   else_clause
    receive_expr
    after_clause
  	throw_expr
    try_expr
    catch_clauses
    catch_clause
    function_identifier
    function_definition
    ivar
    bound_var
    rebind_op
  
negative.code:   unary_op
    module_decl
    class_decl
    def_exprs
    def_expr
    body
    pargs
    pargs_tail
  