diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-03-21 21:48:53 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-03-21 21:48:53 -0400 |
| commit | 5ee185a4896e43c67b6d299becfa616da78fb9f4 (patch) | |
| tree | 183ceef2fd21230c89334d7d039255d1c86c5dca /stdlib/types.h | |
| parent | f4aaf7b73481248f6768302be688700a364a1af8 (diff) | |
Move stdlib into src/
Diffstat (limited to 'stdlib/types.h')
| -rw-r--r-- | stdlib/types.h | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/stdlib/types.h b/stdlib/types.h deleted file mode 100644 index c7b938a0..00000000 --- a/stdlib/types.h +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -// Type information and methods for TypeInfos (i.e. runtime representations of types) - -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> - -#include "datatypes.h" - -typedef struct TypeInfo_s TypeInfo_t; - -typedef struct { - uint64_t (*hash)(const void*, const TypeInfo_t*); - int32_t (*compare)(const void*, const void*, const TypeInfo_t*); - bool (*equal)(const void*, const void*, const TypeInfo_t*); - Text_t (*as_text)(const void*, bool, const TypeInfo_t*); - bool (*is_none)(const void*, const TypeInfo_t*); - void (*serialize)(const void*, FILE*, Table_t*, const TypeInfo_t*); - void (*deserialize)(FILE*, void*, Array_t*, const TypeInfo_t*); -} metamethods_t; - -typedef struct { - const char *name; - const TypeInfo_t *type; -} NamedType_t; - -struct TypeInfo_s { - int64_t size, align; - metamethods_t metamethods; - struct { // Anonymous tagged union for convenience - enum { OpaqueInfo, StructInfo, EnumInfo, PointerInfo, TextInfo, ArrayInfo, TableInfo, FunctionInfo, - OptionalInfo, MutexedDataInfo, TypeInfoInfo } tag; - union { - struct {} OpaqueInfo; - struct { - const char *sigil; - const TypeInfo_t *pointed; - } PointerInfo; - struct { - const char *lang; - } TextInfo; - struct { - const TypeInfo_t *item; - } ArrayInfo; - struct { - const TypeInfo_t *key, *value; - } TableInfo; - struct { - const char *type_str; - } FunctionInfo; - struct { - const char *type_str; - } TypeInfoInfo; - struct { - const TypeInfo_t *type; - } OptionalInfo, MutexedDataInfo; - struct { - const char *name; - int num_tags; - NamedType_t *tags; - } EnumInfo; - struct { - const char *name; - int num_fields; - bool is_secret:1, is_opaque:1; - NamedType_t *fields; - } StructInfo; - }; - }; -}; - -extern const TypeInfo_t Void$info; -extern const TypeInfo_t Abort$info; -#define Void_t void - -Text_t Type$as_text(const void *typeinfo, bool colorize, const TypeInfo_t *type); - -#define Type$info(typestr) &((TypeInfo_t){.size=sizeof(TypeInfo_t), .align=__alignof__(TypeInfo_t), \ - .tag=TypeInfoInfo, .TypeInfoInfo.type_str=typestr, \ - .metamethods={.serialize=cannot_serialize, .deserialize=cannot_deserialize, .as_text=Type$as_text}}) - -#define DEFINE_OPTIONAL_TYPE(t, unpadded_size, name) \ - typedef struct { \ - union { \ - t value; \ - struct { \ - char _padding[unpadded_size]; \ - Bool_t is_none:1; \ - }; \ - }; \ - } name -// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0 |
