From 1454f04265b999d665e4820775a55107a8a29c09 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Wed, 30 Jun 2021 15:46:39 -0400 Subject: [PATCH] detect broken strings in the lexer --- source/md.h | 8 ++++---- source/md_impl.c | 15 +++------------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/source/md.h b/source/md.h index 5163586..e59f847 100644 --- a/source/md.h +++ b/source/md.h @@ -427,9 +427,9 @@ enum MD_TokenKind_Comment = (1<<5), MD_TokenKind_Whitespace = (1<<6), MD_TokenKind_Newline = (1<<7), - MD_TokenKind_BrokenComment = (1<<8), - MD_TokenKind_BrokenString = (1<<9), - MD_TokenKind_BadCharacter = (1<<10), + MD_TokenKind_BrokenComment = (1<<8), + MD_TokenKind_BrokenStringLiteral = (1<<9), + MD_TokenKind_BadCharacter = (1<<10), }; enum @@ -445,7 +445,7 @@ enum MD_TokenKind_StringLiteral| MD_TokenKind_Symbol), MD_TokenGroup_Error = (MD_TokenKind_BrokenComment| - MD_TokenKind_BrokenString| + MD_TokenKind_BrokenStringLiteral| MD_TokenKind_BadCharacter), }; diff --git a/source/md_impl.c b/source/md_impl.c index 3844abe..722e69e 100644 --- a/source/md_impl.c +++ b/source/md_impl.c @@ -1183,10 +1183,7 @@ MD_TokenFromString(MD_String8 string) case '\'': case '`': { - token.kind = MD_TokenKind_StringLiteral; - - // TODO(allen): proposal: - // go see the proposal in the block comment lexer, same idea here? + token.kind = MD_TokenKind_BrokenStringLiteral; // determine delimiter setup MD_u8 d = *at; @@ -1212,6 +1209,7 @@ MD_TokenFromString(MD_String8 string) // close condition if (consecutive_d == 3){ chop_n = 3; + token.kind = MD_TokenKind_StringLiteral; break; } } @@ -1246,6 +1244,7 @@ MD_TokenFromString(MD_String8 string) if (*at == d){ at += 1; chop_n = 1; + token.kind = MD_TokenKind_StringLiteral; break; } @@ -1775,16 +1774,8 @@ MD_ParseOneNode(MD_String8 string, MD_u64 offset) label_name.outer_string.str - string.str); parsed_node->flags |= label_name.node_flags; - //- rjf: check for string literal errors if(label_name.kind == MD_TokenKind_StringLiteral) { - if(!_MD_TokenBoundariesAreBalanced(label_name)) - { - MD_String8 capped = MD_StringPrefix(label_name.outer_string, MD_UNTERMINATED_TOKEN_LEN_CAP); - MD_Error *error = MD_MakeNodeError(parsed_node, MD_MessageKind_CatastrophicError, - MD_PushStringF("Unterminated text literal \"%.*s\"", MD_StringExpand(capped))); - MD_PushErrorToList(&result.errors, error); - } } //- rjf: check for unexpected reserved symbols