mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-07 16:18:49 +00:00
emit appropriate errors for BrokenComment and BrokenStringLiteral tokens
This commit is contained in:
+2
-2
@@ -5,8 +5,8 @@
|
|||||||
//
|
//
|
||||||
// [x] unify string literal token kinds
|
// [x] unify string literal token kinds
|
||||||
// [x] simplify string literal flags (triple as a single flag)
|
// [x] simplify string literal flags (triple as a single flag)
|
||||||
// [ ] lexer detects broken comments
|
// [x] lexer detects broken comments
|
||||||
// [ ] lexer detects broken strings
|
// [x] lexer detects broken strings
|
||||||
// [x] tests for legal tag syntaxes
|
// [x] tests for legal tag syntaxes
|
||||||
// [x] tests that ensure we don't accept labels when expecting symbols e.g. foo ":" b; foo: "(" )
|
// [x] tests that ensure we don't accept labels when expecting symbols e.g. foo ":" b; foo: "(" )
|
||||||
// [ ] pass all tests
|
// [ ] pass all tests
|
||||||
|
|||||||
+29
-14
@@ -1169,10 +1169,6 @@ MD_TokenFromString(MD_String8 string)
|
|||||||
token.kind = MD_TokenKind_Comment;
|
token.kind = MD_TokenKind_Comment;
|
||||||
chop_n = 2;
|
chop_n = 2;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO(allen): emit an error *from here*
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (token.kind == 0) goto symbol_lex;
|
if (token.kind == 0) goto symbol_lex;
|
||||||
@@ -1845,17 +1841,36 @@ MD_ParseOneNode(MD_String8 string, MD_u64 offset)
|
|||||||
{
|
{
|
||||||
off += bad_token.outer_string.size;
|
off += bad_token.outer_string.size;
|
||||||
|
|
||||||
// TODO(allen): tighten up with good integer <-> string helpers
|
switch (bad_token.kind){
|
||||||
MD_String8List bytes = {0};
|
case MD_TokenKind_BadCharacter:
|
||||||
for(int i_byte = 0; i_byte < bad_token.outer_string.size; ++i_byte)
|
{
|
||||||
{
|
// TODO(allen): tighten up with good integer <-> string helpers
|
||||||
MD_PushStringToList(&bytes, MD_PushStringF("0x%02X", bad_token.outer_string.str[i_byte]));
|
MD_String8List bytes = {0};
|
||||||
|
for(int i_byte = 0; i_byte < bad_token.outer_string.size; ++i_byte)
|
||||||
|
{
|
||||||
|
MD_PushStringToList(&bytes, MD_PushStringF("0x%02X", bad_token.outer_string.str[i_byte]));
|
||||||
|
}
|
||||||
|
MD_String8 byte_string = MD_JoinStringList(bytes, MD_S8Lit(" "));
|
||||||
|
|
||||||
|
MD_Error *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
||||||
|
MD_PushStringF("Non-ASCII character \"%.*s\"", MD_StringExpand(byte_string)));
|
||||||
|
MD_PushErrorToList(&result.errors, error);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case MD_TokenKind_BrokenComment:
|
||||||
|
{
|
||||||
|
MD_Error *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
||||||
|
MD_S8Lit("Unterminated comment"));
|
||||||
|
MD_PushErrorToList(&result.errors, error);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case MD_TokenKind_BrokenStringLiteral:
|
||||||
|
{
|
||||||
|
MD_Error *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
||||||
|
MD_S8Lit("Unterminated string literal"));
|
||||||
|
MD_PushErrorToList(&result.errors, error);
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
MD_String8 byte_string = MD_JoinStringList(bytes, MD_S8Lit(" "));
|
|
||||||
|
|
||||||
MD_Error *error = MD_MakeTokenError(string, bad_token, MD_MessageKind_Error,
|
|
||||||
MD_PushStringF("Non-ASCII character \"%.*s\"", MD_StringExpand(byte_string)));
|
|
||||||
MD_PushErrorToList(&result.errors, error);
|
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user