From 8b1efe3562de8446b59692bde50d2d56308c890e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=8B=9C=EC=9B=90?= Date: Sun, 16 Aug 2026 21:32:34 +0900 Subject: [PATCH] complete M7 type metadata --- fec/src/types.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/fec/src/types.h b/fec/src/types.h index 5e1c984..c5ddd88 100644 --- a/fec/src/types.h +++ b/fec/src/types.h @@ -4,9 +4,10 @@ #include "ast.h" typedef enum FeTypeKind { - FE_TYPE_ERROR, FE_TYPE_ERROR_UNION, FE_TYPE_VOID, FE_TYPE_BOOL, FE_TYPE_CHAR, FE_TYPE_INT, + FE_TYPE_ERROR, FE_TYPE_ERROR_UNION, FE_TYPE_OPTIONAL, + FE_TYPE_VOID, FE_TYPE_BOOL, FE_TYPE_CHAR, FE_TYPE_INT, FE_TYPE_STRUCT, FE_TYPE_ENUM, FE_TYPE_ARRAY, FE_TYPE_SLICE, FE_TYPE_STR, - FE_TYPE_REF, FE_TYPE_OWNED, FE_TYPE_OPTIONAL, FE_TYPE_UNKNOWN + FE_TYPE_REF, FE_TYPE_OWNED, FE_TYPE_UNKNOWN } FeTypeKind; typedef struct FeFieldType FeFieldType; @@ -33,6 +34,8 @@ struct FeType { char name[64]; char *cname; char *maker; + char *none_cname; + char *unwrap_cname; char *indexer; char *slicer; char *full_slicer; @@ -48,10 +51,10 @@ struct FeType { unsigned long length; unsigned long size; unsigned align; + /* Element/payload type for refs, owners, slices and optionals. For an + error union this is the nominal error identity; NULL means core.Error. */ FeType *elem; - /* Success value for an error union; !void is represented directly. - For a nominal E!T created by M7, elem holds E. A null elem denotes - the built-in core.Error shorthand !T. */ + /* Success value for an error union. */ FeType *error_value; int ref_mut; FeFieldType *fields;