private static boolean parseHas(PerlBuilder b, int l) {
    PerlBuilder.Marker m = b.mark();
    PerlParserImpl.annotations(b, l);

    if (PerlParserUtil.consumeToken(b, RESERVED_HAS) && parseHasArguments(b, l)) {
      PerlParserUtil.parseStatementModifier(b, l);
      m.done(MOOSE_STATEMENT_HAS);
      return true;
    }

    m.rollbackTo();
    return false;
  }
 private static boolean parseHasArgumentsParenthesised(PerlBuilder b, int l) {
   if (b.getTokenType() == LEFT_PAREN) {
     PerlBuilder.Marker m = b.mark();
     if (PerlParserUtil.consumeToken(b, LEFT_PAREN)
         && parseHasArgumentsBare(b, l)
         && PerlParserUtil.consumeToken(b, RIGHT_PAREN)) {
       m.done(CALL_ARGUMENTS);
       return true;
     }
     m.rollbackTo();
   }
   return false;
 }
  private static boolean parseDefault(PerlBuilder b, int l) {
    PerlBuilder.Marker m = b.mark();

    IElementType tokenType = b.getTokenType();
    if (MOOSE_TOKEN_SET.contains(tokenType)) {
      b.advanceLexer();
      if (PerlParserImpl.expr(b, l, -1)) {
        PerlParserUtil.parseStatementModifier(b, l);
        m.done(RESERVED_TO_STATEMENT_MAP.get(tokenType));
        return true;
      }
    }

    m.rollbackTo();
    return false;
  }
  private static boolean parseAnnotatedSimpleStatement(
      PerlBuilder b, int l, IElementType keywordToken, IElementType statementToken) {
    PerlBuilder.Marker m = b.mark();
    PerlParserImpl.annotations(b, l);

    if (PerlParserUtil.consumeToken(b, keywordToken)) {
      if (PerlParserImpl.expr(b, l, -1)) {
        PerlParserUtil.parseStatementModifier(b, l);
        m.done(statementToken);
        return true;
      }
    }

    m.rollbackTo();
    return false;
  }