require token kind to be passed in MD_Parse_Require, to avoid detecting strings that are in string constants

This commit is contained in:
ryanfleury
2021-02-06 20:26:39 -07:00
parent 9da8264116
commit fbe34cd2b8
2 changed files with 14 additions and 14 deletions
+1 -1
View File
@@ -694,7 +694,7 @@ MD_FUNCTION void MD_Parse_BumpNext(MD_ParseCtx *ctx);
MD_FUNCTION MD_Token MD_Parse_LexNext(MD_ParseCtx *ctx); MD_FUNCTION MD_Token MD_Parse_LexNext(MD_ParseCtx *ctx);
MD_FUNCTION MD_Token MD_Parse_PeekSkipSome(MD_ParseCtx *ctx, MD_TokenGroups skip_groups); MD_FUNCTION MD_Token MD_Parse_PeekSkipSome(MD_ParseCtx *ctx, MD_TokenGroups skip_groups);
MD_FUNCTION MD_b32 MD_Parse_TokenMatch(MD_Token token, MD_String8 string, MD_StringMatchFlags flags); MD_FUNCTION MD_b32 MD_Parse_TokenMatch(MD_Token token, MD_String8 string, MD_StringMatchFlags flags);
MD_FUNCTION MD_b32 MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string); MD_FUNCTION MD_b32 MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string, MD_TokenKind kind);
MD_FUNCTION MD_b32 MD_Parse_RequireKind(MD_ParseCtx *ctx, MD_TokenKind kind, MD_Token *out_token); MD_FUNCTION MD_b32 MD_Parse_RequireKind(MD_ParseCtx *ctx, MD_TokenKind kind, MD_Token *out_token);
MD_FUNCTION MD_ParseResult MD_ParseOneNode (MD_String8 filename, MD_String8 contents); MD_FUNCTION MD_ParseResult MD_ParseOneNode (MD_String8 filename, MD_String8 contents);
MD_FUNCTION MD_Node * MD_ParseWholeString (MD_String8 filename, MD_String8 contents); MD_FUNCTION MD_Node * MD_ParseWholeString (MD_String8 filename, MD_String8 contents);
+13 -13
View File
@@ -1284,13 +1284,13 @@ MD_Parse_TokenMatch(MD_Token token, MD_String8 string, MD_StringMatchFlags flags
} }
MD_FUNCTION_IMPL MD_b32 MD_FUNCTION_IMPL MD_b32
MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string) MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string, MD_TokenKind kind)
{ {
int result = 0; int result = 0;
MD_Token token_any = MD_Parse_PeekSkipSome(ctx, 0); MD_Token token_any = MD_Parse_PeekSkipSome(ctx, 0);
MD_Token token_regular; MD_Token token_regular;
if(MD_StringMatch(token_any.string, string, 0)) if(MD_StringMatch(token_any.string, string, 0) && token_any.kind == kind)
{ {
result = 1; result = 1;
MD_Parse_Bump(ctx, token_any); MD_Parse_Bump(ctx, token_any);
@@ -1298,7 +1298,7 @@ MD_Parse_Require(MD_ParseCtx *ctx, MD_String8 string)
} }
token_regular = MD_Parse_PeekSkipSome(ctx, MD_TokenGroup_Comment|MD_TokenGroup_Whitespace); token_regular = MD_Parse_PeekSkipSome(ctx, MD_TokenGroup_Comment|MD_TokenGroup_Whitespace);
if(MD_StringMatch(token_regular.string, string, 0)) if(MD_StringMatch(token_regular.string, string, 0) && token_regular.kind == kind)
{ {
result = 1; result = 1;
MD_Parse_Bump(ctx, token_regular); MD_Parse_Bump(ctx, token_regular);
@@ -1447,7 +1447,7 @@ _MD_ParseOneNode(MD_ParseCtx *ctx)
result.node = MD_MakeNodeFromToken(MD_NodeKind_Label, ctx->filename, ctx->file_contents.str, ctx->at, token); result.node = MD_MakeNodeFromToken(MD_NodeKind_Label, ctx->filename, ctx->file_contents.str, ctx->at, token);
_MD_SetNodeFlagsByToken(result.node, token); _MD_SetNodeFlagsByToken(result.node, token);
// NOTE(rjf): Children // NOTE(rjf): Children
if(MD_Parse_Require(ctx, MD_S8Lit(":"))) if(MD_Parse_Require(ctx, MD_S8Lit(":"), MD_TokenKind_Symbol))
{ {
_MD_ParseSet(ctx, result.node, _MD_ParseSet(ctx, result.node,
_MD_ParseSetFlag_Paren | _MD_ParseSetFlag_Paren |
@@ -1486,19 +1486,19 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
MD_b32 bracket = 0; MD_b32 bracket = 0;
MD_b32 terminate_with_separator = !!(flags & _MD_ParseSetFlag_Implicit); MD_b32 terminate_with_separator = !!(flags & _MD_ParseSetFlag_Implicit);
if(flags & _MD_ParseSetFlag_Brace && MD_Parse_Require(ctx, MD_S8Lit("{"))) if(flags & _MD_ParseSetFlag_Brace && MD_Parse_Require(ctx, MD_S8Lit("{"), MD_TokenKind_Symbol))
{ {
parent->flags |= MD_NodeFlag_BraceLeft; parent->flags |= MD_NodeFlag_BraceLeft;
brace = 1; brace = 1;
terminate_with_separator = 0; terminate_with_separator = 0;
} }
else if(flags & _MD_ParseSetFlag_Paren && MD_Parse_Require(ctx, MD_S8Lit("("))) else if(flags & _MD_ParseSetFlag_Paren && MD_Parse_Require(ctx, MD_S8Lit("("), MD_TokenKind_Symbol))
{ {
parent->flags |= MD_NodeFlag_ParenLeft; parent->flags |= MD_NodeFlag_ParenLeft;
paren = 1; paren = 1;
terminate_with_separator = 0; terminate_with_separator = 0;
} }
else if(flags & _MD_ParseSetFlag_Bracket && MD_Parse_Require(ctx, MD_S8Lit("["))) else if(flags & _MD_ParseSetFlag_Bracket && MD_Parse_Require(ctx, MD_S8Lit("["), MD_TokenKind_Symbol))
{ {
parent->flags |= MD_NodeFlag_BracketLeft; parent->flags |= MD_NodeFlag_BracketLeft;
bracket = 1; bracket = 1;
@@ -1513,7 +1513,7 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
{ {
if(brace) if(brace)
{ {
if(MD_Parse_Require(ctx, MD_S8Lit("}"))) if(MD_Parse_Require(ctx, MD_S8Lit("}"), MD_TokenKind_Symbol))
{ {
parent->flags |= MD_NodeFlag_BraceRight; parent->flags |= MD_NodeFlag_BraceRight;
goto end_parse; goto end_parse;
@@ -1521,12 +1521,12 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
} }
else if(paren || bracket) else if(paren || bracket)
{ {
if(flags & _MD_ParseSetFlag_Paren && MD_Parse_Require(ctx, MD_S8Lit(")"))) if(flags & _MD_ParseSetFlag_Paren && MD_Parse_Require(ctx, MD_S8Lit(")"), MD_TokenKind_Symbol))
{ {
parent->flags |= MD_NodeFlag_ParenRight; parent->flags |= MD_NodeFlag_ParenRight;
goto end_parse; goto end_parse;
} }
else if(flags & _MD_ParseSetFlag_Bracket && MD_Parse_Require(ctx, MD_S8Lit("]"))) else if(flags & _MD_ParseSetFlag_Bracket && MD_Parse_Require(ctx, MD_S8Lit("]"), MD_TokenKind_Symbol))
{ {
parent->flags |= MD_NodeFlag_BracketRight; parent->flags |= MD_NodeFlag_BracketRight;
goto end_parse; goto end_parse;
@@ -1559,19 +1559,19 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
// NOTE(rjf): Separators. // NOTE(rjf): Separators.
{ {
MD_b32 result = 0; MD_b32 result = 0;
if(MD_Parse_Require(ctx, MD_S8Lit(","))) if(MD_Parse_Require(ctx, MD_S8Lit(","), MD_TokenKind_Symbol))
{ {
result |= 1; result |= 1;
child->flags |= MD_NodeFlag_BeforeComma; child->flags |= MD_NodeFlag_BeforeComma;
next_child_flags |= MD_NodeFlag_AfterComma; next_child_flags |= MD_NodeFlag_AfterComma;
} }
else if(MD_Parse_Require(ctx, MD_S8Lit(";"))) else if(MD_Parse_Require(ctx, MD_S8Lit(";"), MD_TokenKind_Symbol))
{ {
result |= 1; result |= 1;
child->flags |= MD_NodeFlag_BeforeSemicolon; child->flags |= MD_NodeFlag_BeforeSemicolon;
next_child_flags |= MD_NodeFlag_AfterSemicolon; next_child_flags |= MD_NodeFlag_AfterSemicolon;
} }
result |= !!MD_Parse_Require(ctx, MD_S8Lit("\n")); result |= !!MD_Parse_Require(ctx, MD_S8Lit("\n"), MD_TokenKind_Newline);
if(result && terminate_with_separator) if(result && terminate_with_separator)
{ {
goto end_parse; goto end_parse;