fx: implement wchar and wstr value types

This commit is contained in:
2026-05-25 17:23:32 +01:00
parent 13332145c2
commit 0f1dfc0b07
4 changed files with 820 additions and 242 deletions
+64
View File
@@ -1,7 +1,12 @@
#include <fx/int-primitives.h>
#include <fx/value-type.h>
bool fx_type_is_value_type(fx_type_id ty)
{
if (!ty) {
return false;
}
return ty->a.p00 == __FX_VALUE_TYPE_BASEID;
}
@@ -14,6 +19,65 @@ unsigned int __fx_type_get_value_type(fx_type_id ty)
return ty->a.p01;
}
size_t __fx_value_type_get_size(unsigned int ty)
{
switch (ty) {
case __FX_VALUE_TYPE_BOOL:
return sizeof(bool);
case __FX_VALUE_TYPE_I16:
return sizeof(i16);
case __FX_VALUE_TYPE_U16:
return sizeof(u16);
case __FX_VALUE_TYPE_I32:
return sizeof(i32);
case __FX_VALUE_TYPE_U32:
return sizeof(u32);
case __FX_VALUE_TYPE_I64:
return sizeof(i64);
case __FX_VALUE_TYPE_U64:
return sizeof(u64);
case __FX_VALUE_TYPE_IPTR:
return sizeof(iptr);
case __FX_VALUE_TYPE_UPTR:
return sizeof(uptr);
case __FX_VALUE_TYPE_SBYTE:
return sizeof(sbyte);
case __FX_VALUE_TYPE_BYTE:
return sizeof(byte);
case __FX_VALUE_TYPE_SHORT:
return sizeof(short);
case __FX_VALUE_TYPE_USHORT:
return sizeof(unsigned short);
case __FX_VALUE_TYPE_INT:
return sizeof(int);
case __FX_VALUE_TYPE_UINT:
return sizeof(unsigned int);
case __FX_VALUE_TYPE_LONG:
return sizeof(long);
case __FX_VALUE_TYPE_ULONG:
return sizeof(unsigned long);
case __FX_VALUE_TYPE_LONGLONG:
return sizeof(long long);
case __FX_VALUE_TYPE_ULONGLONG:
return sizeof(unsigned long long);
case __FX_VALUE_TYPE_SIZE:
return sizeof(size_t);
case __FX_VALUE_TYPE_FLOAT:
return sizeof(float);
case __FX_VALUE_TYPE_DOUBLE:
return sizeof(double);
case __FX_VALUE_TYPE_CSTR:
return sizeof(const char *);
case __FX_VALUE_TYPE_POINTER:
return sizeof(void *);
default:
return 0;
}
}
/*** CLASS DEFINITION *********************************************************/
FX_TYPE_CLASS_BEGIN(fx_value_type)