anchor.diff:      return new ExpressionStatement(exp)..start=start..end=endOffset..line=exp.line;
     }
     
  +  Statement parseExpressionOrLabeledStatement() {
  +    int start = token.startOffset; // Note: not the same as exp.start due to removal of parentheses
  +    Expression exp = parseExpression();
  +    if (token.type == Token.COLON && exp is NameExpression && exp.start == start) {
  +      Name name = exp.name;
  +      next(); // skip the colon
  +      Statement inner = parseStatement();
  +      return new LabeledStatement(name, inner);
  +    } else {
  +      consumeSemicolon();
  +      return new ExpressionStatement(exp)..start=start..end=endOffset..line=exp.line;
  +    }
  +  }
  +  
     Statement parseIf() {
       int start = token.startOffset;
       int line = token.line;
  
positive.code:   Lexer lexer;
    Token token;
    
    Token pushbackBuffer;
    
    /// End offset of the last consumed token (i.e. not the one in [token] but the one before that)
    int endOffset;
    
    
    void pushback(Token tok) {
      pushbackBuffer = token;
      token = tok;
    }
    
    dynamic fail({Token tok, String expected, String message}) {
      if (tok == null)
  
negative.code:   Token next() {
      Token t = token;
      endOffset = t.endOffset;
      token = lexer.scan();
      return t;
    }
    
  