aboutsummaryrefslogtreecommitdiff
path: root/stdlib/pointers.h
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/pointers.h')
-rw-r--r--stdlib/pointers.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/stdlib/pointers.h b/stdlib/pointers.h
index 116160fd..0c9f2ade 100644
--- a/stdlib/pointers.h
+++ b/stdlib/pointers.h
@@ -11,9 +11,21 @@
Text_t Pointer$as_text(const void *x, bool colorize, const TypeInfo_t *type);
PUREFUNC int32_t Pointer$compare(const void *x, const void *y, const TypeInfo_t *type);
PUREFUNC bool Pointer$equal(const void *x, const void *y, const TypeInfo_t *type);
+PUREFUNC bool Pointer$is_none(const void *x, const TypeInfo_t*);
#define Null(t) (t*)NULL
#define POINTER_TYPE(_sigil, _pointed) (&(TypeInfo_t){\
.size=sizeof(void*), .align=alignof(void*), .tag=PointerInfo, .PointerInfo.sigil=_sigil, .PointerInfo.pointed=_pointed})
+#define Pointer$metamethods ((metamethods_t){ \
+ .as_text=Pointer$as_text, \
+ .compare=Pointer$compare, \
+ .equal=Pointer$equal, \
+ .is_none=Pointer$is_none, \
+})
+
+#define Pointer$info(sigil_expr, pointed_info) &((TypeInfo_t){.size=sizeof(void*), .align=__alignof__(void*), \
+ .tag=PointerInfo, .PointerInfo={.sigil=sigil_expr, .pointed=pointed_info}, \
+ .metamethods=Pointer$metamethods})
+
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0