Added parsing of boolean not
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 14 Jul 2020 15:41:57 +0000 (10:41 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 14 Jul 2020 15:41:57 +0000 (10:41 -0500)
onyx
progs/basic.onyx
src/onyxparser.c

diff --git a/onyx b/onyx
index 5fd9c1d9896ce7f1df5d904d5112793d6b75bcfb..30458373b15b8e4ddb30ddc5489fd9034fdfc1cf 100755 (executable)
Binary files a/onyx and b/onyx differ
index 5b4ad454ea0364c29e6e8840cce56f6310ee0d10..f97d4cfd2be4d753712c638337922c62d8866031 100644 (file)
@@ -6,12 +6,14 @@ pointer_test :: proc {
 
 print :: foreign "host" "print" proc (val: i32) ---
 
-test :: proc (a: bool) -> i32 {
-    return 0;
+test :: proc (a: bool) -> bool {
+    return !a;
 }
 
 export main :: proc {
     a : i32 = 0;
 
-    print(a);
+    cond :: true;
+
+    print(test(cond) as i32);
 }
index 6744d477fa3b0a0bf9fe8949dabef36873961262..978d17b162b472b466b3add04026738481c0641d 100644 (file)
@@ -149,6 +149,21 @@ static AstTyped* parse_factor(OnyxParser* parser) {
                 break;
             }
 
+        case '!':
+            {
+                AstUnaryOp* not_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op);
+                not_node->operation = Unary_Op_Not;
+                not_node->base.token = expect(parser, '!');
+                not_node->expr = parse_factor(parser);
+
+                if ((not_node->expr->flags & Ast_Flag_Comptime) != 0) {
+                    not_node->base.flags |= Ast_Flag_Comptime;
+                }
+
+                retval = (AstTyped *) not_node;
+                break;
+            }
+
         case Token_Type_Symbol:
             {
                 OnyxToken* sym_token = expect(parser, Token_Type_Symbol);