mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
Added assert keyword, with re-routable print and assert outputs
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user