anchor.diff:          }
           return t;
       }
  +    
  +    /** 
  +    *   Clones the token
  +    */
  +    public Token cloneToken(Token t) {
  +        CommonToken clone = new CommonToken(t.getType(),t.getText());
  +        clone.setLine(t.getLine());
  +        clone.setColumn(t.getColumn());
  +        return clone;
  +    }
   
   
       // stuff to adjust ANTLR's tracing machinery
  
positive.code:  *              John Rose               rose00@mac.com
   *              Jeremy Rayner           groovy@ross-rayner.com
   *              Alex Popescu            the.mindstorm@gmail.com
   *
   * Version 1.00 December 9, 1997 -- initial release
   * Version 1.01 December 10, 1997
  
negative.code:  *  Example:  println (x || (return));  println assert x, "won't print a false value!"
   *  If an optional expression is missing, its value is void (this coerces to null when a value is required).
   */
  branchStatement {Token first = LT(1);}
      :
      // Return an expression
          "return"!
          ( returnE:expression[0]! )?
          {#branchStatement = #(create(LITERAL_return,"return",first,LT(1)),returnE);}
          
  
      // break:  get out of a loop, or switch, or method call
      // continue:  do next iteration of a loop, or leave a closure
      |   "break"!
          ( breakI:IDENT! )?
          {#branchStatement = #(create(LITERAL_break,"break",first,LT(1)),breakI);}
      
      | "continue"!
      	( contI:IDENT! )?
      	{#branchStatement = #(create(LITERAL_continue,"continue",first,LT(1)),contI);}
  
      // throw an exception
      |   "throw"! throwE:expression[0]!
          {#branchStatement = #(create(LITERAL_throw,"throw",first,LT(1)),throwE);}
  
  
      // TODO - decide on definitive 'assert' statement in groovy (1.4 and|or groovy)
  