anchor.diff:        case 'debugger': return parseDebuggerStatement();
         case 'function': return parseFunctionDeclaration();
         default:
  -        int start = token.startOffset;
  -        Token nameTok = next();
  -        if (token.type == Token.COLON) {
  -          next();
  -          Statement body = parseStatement();
  -          return new LabeledStatement(makeName(nameTok), body)..start=start..end=endOffset..line=nameTok.line;
  -        } else {
  -          // revert lookahead and parse as expression statement
  -          pushback(nameTok);
  -          return parseExpressionStatement();
  -        }
  +        return parseExpressionOrLabeledStatement();
       }
     }
     
  
positive.code:   Token next() {
      Token t = token;
      endOffset = t.endOffset;
      if (pushbackBuffer != null) {
        token = pushbackBuffer;
        pushbackBuffer = null;
      } else {
        token = lexer.scan();
      }
      return t;
    }
    
  
negative.code:   Lexer lexer;
    Token token;
    
    /// End offset of the last consumed token (i.e. not the one in [token] but the one before that)
    int endOffset;
    
    dynamic fail({Token tok, String expected, String message}) {
      if (tok == null)
  