aboutsummaryrefslogtreecommitdiff
path: root/stdlib/types.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-09-13 20:18:08 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-09-13 20:18:08 -0400
commitc455e7b67d2e55e6ed03e3449203d4e307f5a7dd (patch)
tree27d9d4c77193f7aa1fe3a3c6fe5631d0ccfd59e2 /stdlib/types.c
parent816aa29b799132acb8c71d4968df6c4619fb2b1d (diff)
Rename builtins/ -> stdlib/
Diffstat (limited to 'stdlib/types.c')
-rw-r--r--stdlib/types.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/stdlib/types.c b/stdlib/types.c
new file mode 100644
index 00000000..c9f2578f
--- /dev/null
+++ b/stdlib/types.c
@@ -0,0 +1,38 @@
+// Type information and methods for TypeInfos (i.e. runtime representations of types)
+#include <err.h>
+#include <gc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+
+#include "util.h"
+#include "arrays.h"
+#include "pointers.h"
+#include "tables.h"
+#include "text.h"
+#include "types.h"
+
+public Text_t Type$as_text(const void *typeinfo, bool colorize, const TypeInfo *type)
+{
+ if (!typeinfo) return Text("TypeInfo");
+
+ if (colorize)
+ return Text$concat(
+ Text("\x1b[36;1m"),
+ Text$from_str(type->TypeInfoInfo.type_str),
+ Text("\x1b[m"));
+ else
+ return Text$from_str(type->TypeInfoInfo.type_str);
+}
+
+public const TypeInfo TypeInfo$info = {
+ .size=sizeof(TypeInfo),
+ .align=__alignof__(TypeInfo),
+ .tag=CustomInfo,
+ .TypeInfoInfo.type_str="TypeInfo",
+};
+
+public const TypeInfo Void$info = {.size=0, .align=0, .tag=EmptyStructInfo};
+public const TypeInfo Abort$info = {.size=0, .align=0, .tag=EmptyStructInfo};
+
+// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0