]> git.lizzy.rs Git - uwu-nolambda.git/blobdiff - flow.c
Implement nolambda:flow
[uwu-nolambda.git] / flow.c
diff --git a/flow.c b/flow.c
new file mode 100644 (file)
index 0000000..ecf380c
--- /dev/null
+++ b/flow.c
@@ -0,0 +1,33 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "common/err.h"
+#include "api/vm.h"
+#include "api/nil.h"
+#include "api/str.h"
+
+UwUVMValue uwu_linear(UwUVMArgs *args)
+{
+       if (args->num < 1)
+               error("error: nolambda:flow:linear requires at least one argument");
+
+       size_t return_arg = args->num - 1;
+
+       for (size_t i = 0; i < return_arg; i++)
+               uwuvm_get_arg(args, i);
+
+       return uwuvm_clone_value(uwuvm_get_arg(args, return_arg));
+}
+
+UwUVMValue uwu_error(UwUVMArgs *args)
+{
+       if (args->num != 1)
+               error("error: nolambda:flow:error exactly one argument");
+
+       char *err = uwustr_get(uwuvm_get_arg(args, 0));
+       fprintf(stderr, "%s\n", err);
+       free(err);
+
+       exit(1);
+
+       return uwunil_create();
+}