mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-07 16:18:49 +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_Comment = (1<<5),
|
||||||
MD_TokenKind_Whitespace = (1<<6),
|
MD_TokenKind_Whitespace = (1<<6),
|
||||||
MD_TokenKind_Newline = (1<<7),
|
MD_TokenKind_Newline = (1<<7),
|
||||||
MD_TokenKind_BrokenComment = (1<<8),
|
MD_TokenKind_BrokenComment = (1<<8),
|
||||||
MD_TokenKind_BrokenString = (1<<9),
|
MD_TokenKind_BrokenStringLiteral = (1<<9),
|
||||||
MD_TokenKind_BadCharacter = (1<<10),
|
MD_TokenKind_BadCharacter = (1<<10),
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -445,7 +445,7 @@ enum
|
|||||||
MD_TokenKind_StringLiteral|
|
MD_TokenKind_StringLiteral|
|
||||||
MD_TokenKind_Symbol),
|
MD_TokenKind_Symbol),
|
||||||
MD_TokenGroup_Error = (MD_TokenKind_BrokenComment|
|
MD_TokenGroup_Error = (MD_TokenKind_BrokenComment|
|
||||||
MD_TokenKind_BrokenString|
|
MD_TokenKind_BrokenStringLiteral|
|
||||||
MD_TokenKind_BadCharacter),
|
MD_TokenKind_BadCharacter),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+3
-12
@@ -1183,10 +1183,7 @@ MD_TokenFromString(MD_String8 string)
|
|||||||
case '\'':
|
case '\'':
|
||||||
case '`':
|
case '`':
|
||||||
{
|
{
|
||||||
token.kind = MD_TokenKind_StringLiteral;
|
token.kind = MD_TokenKind_BrokenStringLiteral;
|
||||||
|
|
||||||
// TODO(allen): proposal:
|
|
||||||
// go see the proposal in the block comment lexer, same idea here?
|
|
||||||
|
|
||||||
// determine delimiter setup
|
// determine delimiter setup
|
||||||
MD_u8 d = *at;
|
MD_u8 d = *at;
|
||||||
@@ -1212,6 +1209,7 @@ MD_TokenFromString(MD_String8 string)
|
|||||||
// close condition
|
// close condition
|
||||||
if (consecutive_d == 3){
|
if (consecutive_d == 3){
|
||||||
chop_n = 3;
|
chop_n = 3;
|
||||||
|
token.kind = MD_TokenKind_StringLiteral;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1246,6 +1244,7 @@ MD_TokenFromString(MD_String8 string)
|
|||||||
if (*at == d){
|
if (*at == d){
|
||||||
at += 1;
|
at += 1;
|
||||||
chop_n = 1;
|
chop_n = 1;
|
||||||
|
token.kind = MD_TokenKind_StringLiteral;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1775,16 +1774,8 @@ MD_ParseOneNode(MD_String8 string, MD_u64 offset)
|
|||||||
label_name.outer_string.str - string.str);
|
label_name.outer_string.str - string.str);
|
||||||
parsed_node->flags |= label_name.node_flags;
|
parsed_node->flags |= label_name.node_flags;
|
||||||
|
|
||||||
//- rjf: check for string literal errors
|
|
||||||
if(label_name.kind == MD_TokenKind_StringLiteral)
|
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
|
//- rjf: check for unexpected reserved symbols
|
||||||
|
|||||||
Reference in New Issue
Block a user