added alternate way to do varargs
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 2 Mar 2021 17:56:54 +0000 (11:56 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 2 Mar 2021 17:56:54 +0000 (11:56 -0600)
bin/onyx
core/builtin.onyx

index d29c406909a7d2261acdec9e0b8a4faea8c3b8a1..9cf22eb9f53586da2c1d1fa7a1ccfe4dfca8c01a 100755 (executable)
Binary files a/bin/onyx and b/bin/onyx differ
index e2ca1eb6ff3f747677f6981ec2d8a1532726636b..a0733bab005974e850f6658a7d34435c5f09b40e 100644 (file)
@@ -16,12 +16,22 @@ vararg :: #type ^struct {
     count: i32;
 }
 
-vararg_get :: (va: vararg, ret: ^$T) -> bool {
-    if va.count <= 0 do return false;
-    *ret = *cast(^T) va.data;
-    va.data = cast(rawptr) (cast(^u8) va.data + sizeof T);
-    va.count -= 1;
-    return true;
+vararg_get :: proc {
+    (va: vararg, ret: ^$T) -> bool {
+        if va.count <= 0 do return false;
+        *ret = *cast(^T) va.data;
+        va.data = cast(rawptr) (cast(^u8) va.data + sizeof T);
+        va.count -= 1;
+        return true;
+    },
+
+    (va: vararg, $T: type_expr, default: T = 0) -> T {
+        if va.count <= 0 do return false;
+        ret := *cast(^T) va.data;
+        va.data = cast(rawptR) (cast(^u8) va.data + sizeof T);
+        va.count -= 1;
+        return res;
+    }
 }
 
 // HACK: NullProcHack