aboutsummaryrefslogtreecommitdiff
path: root/builtins
diff options
context:
space:
mode:
Diffstat (limited to 'builtins')
-rw-r--r--builtins/optionals.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/builtins/optionals.c b/builtins/optionals.c
index 27ab8ec6..f58c8134 100644
--- a/builtins/optionals.c
+++ b/builtins/optionals.c
@@ -36,6 +36,12 @@ static inline bool is_null(const void *obj, const TypeInfo *non_optional_type)
case ArrayInfo: return ((Array_t*)obj)->length < 0;
case TableInfo: return ((Table_t*)obj)->entries.length < 0;
case FunctionInfo: return *(void**)obj == NULL;
+ case CustomInfo: {
+ int64_t offset = non_optional_type->size;
+ if (offset % non_optional_type->align)
+ offset += non_optional_type->align - (offset % non_optional_type->align);
+ return *(bool*)(obj + offset);
+ }
default: {
Text_t t = generic_as_text(NULL, false, non_optional_type);
errx(1, "is_null() not implemented for: %k", &t);