Added assert keyword, with re-routable print and assert outputs

This commit is contained in:
2022-08-07 12:26:04 +01:00
parent 7ff232c814
commit d7fda480fd
7 changed files with 110 additions and 19 deletions

View File

@@ -486,8 +486,6 @@ static void expression(Parser* parser, Node** nodeHandle) {
//statements
static void printStmt(Parser* parser, Node* node) {
int line = parser->previous.line;
//set the node info
node->type = NODE_UNARY;
node->unary.opcode = OP_PRINT;
@@ -496,6 +494,18 @@ static void printStmt(Parser* parser, Node* node) {
consume(parser, TOKEN_SEMICOLON, "Expected ';' at end of print statement");
}
static void assertStmt(Parser* parser, Node* node) {
//set the node info
node->type = NODE_BINARY;
node->unary.opcode = OP_ASSERT;
expression(parser, &(node->binary.left));
consume(parser, TOKEN_COMMA, "Expected ',' in assert statement");
expression(parser, &(node->binary.right));
consume(parser, TOKEN_SEMICOLON, "Expected ';' at end of assert statement");
}
//precedence functions
static void expressionStmt(Parser* parser, Node* node) {
error(parser, parser->previous, "Expression statements not yet implemented");
@@ -508,6 +518,12 @@ static void statement(Parser* parser, Node* node) {
return;
}
//assert
if (match(parser, TOKEN_ASSERT)) {
assertStmt(parser, node);
return;
}
//default
expressionStmt(parser, node);
}