aboutsummaryrefslogtreecommitdiff
path: root/nextlang.h
diff options
context:
space:
mode:
Diffstat (limited to 'nextlang.h')
-rw-r--r--nextlang.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/nextlang.h b/nextlang.h
new file mode 100644
index 00000000..2dd65704
--- /dev/null
+++ b/nextlang.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include <gc.h>
+#include <gc/cord.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+#define Int64_t int64_t
+#define Int32_t int32_t
+#define Int16_t int16_t
+#define Int8_t int8_t
+
+#define Num64_t double
+#define Num32_t float
+
+#define String_t CORD
+
+#define Char_t char
+
+#define Bool_t bool
+
+#define Void_t void
+
+#ifndef auto
+#define auto __auto_type
+#endif
+
+#define CORD_asprintf(...) ({ CORD __c; CORD_sprintf(&__c, __VA_ARGS__); __c; })
+#define __declare(var, val) __typeof(val) var = val
+#define __cord(x) _Generic(x, bool: x ? "yes" : "no", \
+ int16_t: CORD_asprintf("%d", x), int32_t: CORD_asprintf("%d", x), int64_t: CORD_asprintf("%ld", x), \
+ double: CORD_asprintf("%g", x), float: CORD_asprintf("%g", x), \
+ CORD: x, \
+ default: "???")
+#define __heap(x) (__typeof(x)*)memcpy(GC_MALLOC(sizeof(x)), (__typeof(x)[1]){x}, sizeof(x))
+#define __stack(x) (&(__typeof(x)){x})
+
+#define say(str) puts(CORD_to_const_char_star(str))