mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
Removed Toy_AstGroup generation, as it isn't needed
This commit is contained in:
@@ -263,7 +263,7 @@ static Toy_AstFlag atomic(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** roo
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
printError(parser, parser->previous, "Unexpected token passed to atomic precedence rule");
|
printError(parser, parser->previous, "Unexpected token passed to atomic precedence rule");
|
||||||
Toy_private_emitAstError(bucket, root); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, root);
|
||||||
return TOY_AST_FLAG_NONE;
|
return TOY_AST_FLAG_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -303,7 +303,7 @@ static Toy_AstFlag unary(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** root
|
|||||||
|
|
||||||
else {
|
else {
|
||||||
printError(parser, parser->previous, "Unexpected token passed to unary precedence rule");
|
printError(parser, parser->previous, "Unexpected token passed to unary precedence rule");
|
||||||
Toy_private_emitAstError(bucket, root); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TOY_AST_FLAG_NONE;
|
return TOY_AST_FLAG_NONE;
|
||||||
@@ -404,7 +404,7 @@ static Toy_AstFlag binary(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** roo
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
printError(parser, parser->previous, "Unexpected token passed to binary precedence rule");
|
printError(parser, parser->previous, "Unexpected token passed to binary precedence rule");
|
||||||
Toy_private_emitAstError(bucket, root); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, root);
|
||||||
return TOY_AST_FLAG_NONE;
|
return TOY_AST_FLAG_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -415,12 +415,13 @@ static Toy_AstFlag group(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** root
|
|||||||
parsePrecedence(bucket, parser, root, PREC_GROUP);
|
parsePrecedence(bucket, parser, root, PREC_GROUP);
|
||||||
consume(parser, TOY_TOKEN_OPERATOR_PAREN_RIGHT, "Expected ')' at end of group");
|
consume(parser, TOY_TOKEN_OPERATOR_PAREN_RIGHT, "Expected ')' at end of group");
|
||||||
|
|
||||||
Toy_private_emitAstGroup(bucket, root);
|
//Toy_AstGroup is omitted from generation, as an optimisation
|
||||||
|
// Toy_private_emitAstGroup(bucket, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
printError(parser, parser->previous, "Unexpected token passed to grouping precedence rule");
|
printError(parser, parser->previous, "Unexpected token passed to grouping precedence rule");
|
||||||
Toy_private_emitAstError(bucket, root); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TOY_AST_FLAG_NONE;
|
return TOY_AST_FLAG_NONE;
|
||||||
@@ -440,7 +441,7 @@ static void parsePrecedence(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** r
|
|||||||
|
|
||||||
if (prefix == NULL) {
|
if (prefix == NULL) {
|
||||||
printError(parser, parser->previous, "Expected expression");
|
printError(parser, parser->previous, "Expected expression");
|
||||||
Toy_private_emitAstError(bucket, root); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, root);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,7 +453,7 @@ static void parsePrecedence(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** r
|
|||||||
|
|
||||||
if (infix == NULL) {
|
if (infix == NULL) {
|
||||||
printError(parser, parser->previous, "Expected operator");
|
printError(parser, parser->previous, "Expected operator");
|
||||||
Toy_private_emitAstError(bucket, root); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, root);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -537,7 +538,7 @@ static void makeBlockStmt(Toy_Bucket** bucket, Toy_Parser* parser, Toy_Ast** roo
|
|||||||
synchronize(parser);
|
synchronize(parser);
|
||||||
|
|
||||||
Toy_Ast* err = NULL;
|
Toy_Ast* err = NULL;
|
||||||
Toy_private_emitAstError(bucket, &err); //TODO: better error message here?
|
Toy_private_emitAstError(bucket, &err);
|
||||||
Toy_private_appendAstBlock(bucket, root, err);
|
Toy_private_appendAstBlock(bucket, root, err);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@@ -562,8 +563,6 @@ Toy_Ast* Toy_scanParser(Toy_Bucket** bucket, Toy_Parser* parser) {
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: better errors, check for unbound parser, etc.
|
|
||||||
|
|
||||||
makeBlockStmt(bucket, parser, &root);
|
makeBlockStmt(bucket, parser, &root);
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
|
|||||||
@@ -292,13 +292,9 @@ int test_unary(Toy_Bucket* bucket) {
|
|||||||
ast == NULL ||
|
ast == NULL ||
|
||||||
ast->type != TOY_AST_BLOCK ||
|
ast->type != TOY_AST_BLOCK ||
|
||||||
ast->block.child == NULL ||
|
ast->block.child == NULL ||
|
||||||
ast->block.child->type != TOY_AST_UNARY ||
|
ast->block.child->type != TOY_AST_VALUE ||
|
||||||
ast->block.child->unary.child == NULL ||
|
TOY_VALUE_IS_INTEGER(ast->block.child->value.value) == false ||
|
||||||
ast->block.child->unary.child->type != TOY_AST_GROUP ||
|
TOY_VALUE_AS_INTEGER(ast->block.child->value.value) != -42)
|
||||||
ast->block.child->unary.child->group.child == NULL ||
|
|
||||||
ast->block.child->unary.child->group.child->type != TOY_AST_VALUE ||
|
|
||||||
TOY_VALUE_IS_INTEGER(ast->block.child->unary.child->group.child->value.value) == false ||
|
|
||||||
TOY_VALUE_AS_INTEGER(ast->block.child->unary.child->group.child->value.value) != 42)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: unexpected successful unary negation in parser with grouped value -(42)\n" TOY_CC_RESET);
|
fprintf(stderr, TOY_CC_ERROR "ERROR: unexpected successful unary negation in parser with grouped value -(42)\n" TOY_CC_RESET);
|
||||||
return -1;
|
return -1;
|
||||||
@@ -532,34 +528,28 @@ int test_precedence(Toy_Bucket* bucket) {
|
|||||||
ast->block.child->binary.flag != TOY_AST_FLAG_MULTIPLY ||
|
ast->block.child->binary.flag != TOY_AST_FLAG_MULTIPLY ||
|
||||||
|
|
||||||
ast->block.child->binary.left == NULL ||
|
ast->block.child->binary.left == NULL ||
|
||||||
ast->block.child->binary.left->type != TOY_AST_GROUP ||
|
ast->block.child->binary.left->type != TOY_AST_BINARY ||
|
||||||
ast->block.child->binary.left->group.child == NULL ||
|
ast->block.child->binary.left->binary.flag != TOY_AST_FLAG_ADD ||
|
||||||
|
ast->block.child->binary.left->binary.left == NULL ||
|
||||||
ast->block.child->binary.left->group.child->type != TOY_AST_BINARY ||
|
ast->block.child->binary.left->binary.left->type != TOY_AST_VALUE ||
|
||||||
ast->block.child->binary.left->group.child->binary.flag != TOY_AST_FLAG_ADD ||
|
TOY_VALUE_IS_INTEGER(ast->block.child->binary.left->binary.left->value.value) == false ||
|
||||||
ast->block.child->binary.left->group.child->binary.left == NULL ||
|
TOY_VALUE_AS_INTEGER(ast->block.child->binary.left->binary.left->value.value) != 1 ||
|
||||||
ast->block.child->binary.left->group.child->binary.left->type != TOY_AST_VALUE ||
|
ast->block.child->binary.left->binary.right == NULL ||
|
||||||
TOY_VALUE_IS_INTEGER(ast->block.child->binary.left->group.child->binary.left->value.value) == false ||
|
ast->block.child->binary.left->binary.right->type != TOY_AST_VALUE ||
|
||||||
TOY_VALUE_AS_INTEGER(ast->block.child->binary.left->group.child->binary.left->value.value) != 1 ||
|
TOY_VALUE_IS_INTEGER(ast->block.child->binary.left->binary.right->value.value) == false ||
|
||||||
ast->block.child->binary.left->group.child->binary.right == NULL ||
|
TOY_VALUE_AS_INTEGER(ast->block.child->binary.left->binary.right->value.value) != 2 ||
|
||||||
ast->block.child->binary.left->group.child->binary.right->type != TOY_AST_VALUE ||
|
|
||||||
TOY_VALUE_IS_INTEGER(ast->block.child->binary.left->group.child->binary.right->value.value) == false ||
|
|
||||||
TOY_VALUE_AS_INTEGER(ast->block.child->binary.left->group.child->binary.right->value.value) != 2 ||
|
|
||||||
|
|
||||||
ast->block.child->binary.right == NULL ||
|
ast->block.child->binary.right == NULL ||
|
||||||
ast->block.child->binary.right->type != TOY_AST_GROUP ||
|
ast->block.child->binary.right->type != TOY_AST_BINARY ||
|
||||||
ast->block.child->binary.right->group.child == NULL ||
|
ast->block.child->binary.right->binary.flag != TOY_AST_FLAG_ADD ||
|
||||||
|
ast->block.child->binary.right->binary.left == NULL ||
|
||||||
ast->block.child->binary.right->group.child->type != TOY_AST_BINARY ||
|
ast->block.child->binary.right->binary.left->type != TOY_AST_VALUE ||
|
||||||
ast->block.child->binary.right->group.child->binary.flag != TOY_AST_FLAG_ADD ||
|
TOY_VALUE_IS_INTEGER(ast->block.child->binary.right->binary.left->value.value) == false ||
|
||||||
ast->block.child->binary.right->group.child->binary.left == NULL ||
|
TOY_VALUE_AS_INTEGER(ast->block.child->binary.right->binary.left->value.value) != 3 ||
|
||||||
ast->block.child->binary.right->group.child->binary.left->type != TOY_AST_VALUE ||
|
ast->block.child->binary.right->binary.right == NULL ||
|
||||||
TOY_VALUE_IS_INTEGER(ast->block.child->binary.right->group.child->binary.left->value.value) == false ||
|
ast->block.child->binary.right->binary.right->type != TOY_AST_VALUE ||
|
||||||
TOY_VALUE_AS_INTEGER(ast->block.child->binary.right->group.child->binary.left->value.value) != 3 ||
|
TOY_VALUE_IS_INTEGER(ast->block.child->binary.right->binary.right->value.value) == false ||
|
||||||
ast->block.child->binary.right->group.child->binary.right == NULL ||
|
TOY_VALUE_AS_INTEGER(ast->block.child->binary.right->binary.right->value.value) != 4)
|
||||||
ast->block.child->binary.right->group.child->binary.right->type != TOY_AST_VALUE ||
|
|
||||||
TOY_VALUE_IS_INTEGER(ast->block.child->binary.right->group.child->binary.right->value.value) == false ||
|
|
||||||
TOY_VALUE_AS_INTEGER(ast->block.child->binary.right->group.child->binary.right->value.value) != 4)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, TOY_CC_ERROR "ERROR: failed to run the parser precedence '(1 + 2) * (3 + 4)' (group)\n" TOY_CC_RESET);
|
fprintf(stderr, TOY_CC_ERROR "ERROR: failed to run the parser precedence '(1 + 2) * (3 + 4)' (group)\n" TOY_CC_RESET);
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user