mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Added a nice error message
This commit is contained in:
@@ -21,8 +21,8 @@ typedef struct {
|
|||||||
|
|
||||||
TOY_API void Toy_bindLexer(Toy_Lexer* lexer, const char* source);
|
TOY_API void Toy_bindLexer(Toy_Lexer* lexer, const char* source);
|
||||||
TOY_API Toy_Token Toy_private_scanLexer(Toy_Lexer* lexer);
|
TOY_API Toy_Token Toy_private_scanLexer(Toy_Lexer* lexer);
|
||||||
TOY_API void Toy_private_printToken(Toy_Token* token); //debugging
|
|
||||||
|
|
||||||
//util
|
TOY_API const char* Toy_private_findKeywordByType(const Toy_TokenType type);
|
||||||
#define TOY_BLANK_TOKEN() ((Toy_Token){TOY_TOKEN_NULL, 0, 0, NULL})
|
TOY_API Toy_TokenType Toy_private_findTypeByKeyword(const char* keyword);
|
||||||
|
TOY_API void Toy_private_printToken(Toy_Token* token);
|
||||||
|
|
||||||
|
|||||||
@@ -570,7 +570,14 @@ static void parsePrecedence(Toy_Bucket** bucketHandle, Toy_Parser* parser, Toy_A
|
|||||||
ParsingRule prefix = getParsingRule(parser->previous.type)->prefix;
|
ParsingRule prefix = getParsingRule(parser->previous.type)->prefix;
|
||||||
|
|
||||||
if (prefix == NULL) {
|
if (prefix == NULL) {
|
||||||
|
//make a nice error message
|
||||||
|
if (Toy_private_findKeywordByType(parser->previous.type)) {
|
||||||
|
printError(parser, parser->previous, "Found reserved keyword instead");
|
||||||
|
}
|
||||||
|
else {
|
||||||
printError(parser, parser->previous, "Expected expression");
|
printError(parser, parser->previous, "Expected expression");
|
||||||
|
}
|
||||||
|
|
||||||
Toy_private_emitAstError(bucketHandle, rootHandle);
|
Toy_private_emitAstError(bucketHandle, rootHandle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -780,8 +787,8 @@ Toy_Ast* Toy_scanParser(Toy_Bucket** bucketHandle, Toy_Parser* parser) {
|
|||||||
void Toy_resetParser(Toy_Parser* parser) {
|
void Toy_resetParser(Toy_Parser* parser) {
|
||||||
parser->lexer = NULL;
|
parser->lexer = NULL;
|
||||||
|
|
||||||
parser->current = TOY_BLANK_TOKEN();
|
parser->current = ((Toy_Token){TOY_TOKEN_NULL, 0, 0, NULL});
|
||||||
parser->previous = TOY_BLANK_TOKEN();
|
parser->previous = ((Toy_Token){TOY_TOKEN_NULL, 0, 0, NULL});
|
||||||
|
|
||||||
parser->error = false;
|
parser->error = false;
|
||||||
parser->panic = false;
|
parser->panic = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user