mirror of
https://github.com/Ed94/metadesk.git
synced 2026-07-25 00:47:52 +00:00
detect broken strings in the lexer
This commit is contained in:
+4
-4
@@ -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),
|
||||
};
|
||||
|
||||
|
||||
+3
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user