static Cursor maybeLexExlaim(Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback) { if (C.peek() != '!') return None; auto Range = C; C.advance(1); if (isdigit(C.peek()) || !isIdentifierChar(C.peek())) { Token.reset(MIToken::exclaim, Range.upto(C)); return C; } while (isIdentifierChar(C.peek())) C.advance(); StringRef StrVal = Range.upto(C); Token.reset(getMetadataKeywordKind(StrVal), StrVal); if (Token.isError()) ErrorCallback(Token.location(), "use of unknown metadata keyword '" + StrVal + "'"); return C; }