mirror of
https://github.com/Ed94/metadesk.git
synced 2026-06-13 07:52:22 -07:00
require token kind to be passed in MD_Parse_Require, to avoid detecting strings that are in string constants
This commit is contained in:
+1
-1
@@ -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_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_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_ParseResult MD_ParseOneNode (MD_String8 filename, MD_String8 contents);
|
||||
MD_FUNCTION MD_Node * MD_ParseWholeString (MD_String8 filename, MD_String8 contents);
|
||||
|
||||
+13
-13
@@ -1284,13 +1284,13 @@ MD_Parse_TokenMatch(MD_Token token, MD_String8 string, MD_StringMatchFlags flags
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
MD_Token token_any = MD_Parse_PeekSkipSome(ctx, 0);
|
||||
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;
|
||||
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);
|
||||
if(MD_StringMatch(token_regular.string, string, 0))
|
||||
if(MD_StringMatch(token_regular.string, string, 0) && token_regular.kind == kind)
|
||||
{
|
||||
result = 1;
|
||||
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);
|
||||
_MD_SetNodeFlagsByToken(result.node, token);
|
||||
// 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_ParseSetFlag_Paren |
|
||||
@@ -1486,19 +1486,19 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
|
||||
MD_b32 bracket = 0;
|
||||
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;
|
||||
brace = 1;
|
||||
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;
|
||||
paren = 1;
|
||||
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;
|
||||
bracket = 1;
|
||||
@@ -1513,7 +1513,7 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
|
||||
{
|
||||
if(brace)
|
||||
{
|
||||
if(MD_Parse_Require(ctx, MD_S8Lit("}")))
|
||||
if(MD_Parse_Require(ctx, MD_S8Lit("}"), MD_TokenKind_Symbol))
|
||||
{
|
||||
parent->flags |= MD_NodeFlag_BraceRight;
|
||||
goto end_parse;
|
||||
@@ -1521,12 +1521,12 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
|
||||
}
|
||||
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;
|
||||
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;
|
||||
goto end_parse;
|
||||
@@ -1559,19 +1559,19 @@ _MD_ParseSet(MD_ParseCtx *ctx, MD_Node *parent, _MD_ParseSetFlags flags,
|
||||
// NOTE(rjf): Separators.
|
||||
{
|
||||
MD_b32 result = 0;
|
||||
if(MD_Parse_Require(ctx, MD_S8Lit(",")))
|
||||
if(MD_Parse_Require(ctx, MD_S8Lit(","), MD_TokenKind_Symbol))
|
||||
{
|
||||
result |= 1;
|
||||
child->flags |= MD_NodeFlag_BeforeComma;
|
||||
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;
|
||||
child->flags |= MD_NodeFlag_BeforeSemicolon;
|
||||
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)
|
||||
{
|
||||
goto end_parse;
|
||||
|
||||
Reference in New Issue
Block a user