aboutsummaryrefslogtreecommitdiff
path: root/src/type.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-29 16:58:56 +0200
committerlemon <lsof@mailbox.org>2022-08-29 16:58:56 +0200
commite0385225b5a4a0d7b391d3d71c19228efe06ed04 (patch)
treeacc4ebce59ccb74212736a3ac3beee228532dbd5 /src/type.cff
parenta984cedd59c5dc290b896e4b8743f771df31e1bd (diff)
staticify
Diffstat (limited to 'src/type.cff')
-rw-r--r--src/type.cff69
1 files changed, 51 insertions, 18 deletions
diff --git a/src/type.cff b/src/type.cff
index c7e76cc..2a23717 100644
--- a/src/type.cff
+++ b/src/type.cff
@@ -172,36 +172,69 @@ extern static ty_void *const Type = {},
ty_c_valist *const Type = {};
extern fn putprimtypes(env *Env) void {
- let types []struct { name *const u8, gty **const Type, ty Type } = {
+ static types []struct { name *const u8, gty **const Type, ty Type } = {
{ "void", &ty_void, { .size: 0, .align: 1, .u: :Void }},
{ "bool", &ty_bool, { .size: 1, .align: 1, .u: :Bool }},
{ "f32", &ty_f32, { .size: 4, .u: :Flo }},
- { "f64", &ty_f64, { .size: 8, g_targ.f64align, .u: :Flo }},
+ { "f64", &ty_f64, { .size: 8, .u: :Flo }},
{ "i8", &ty_i8, { .size: 1, .u: :Int { .sgn: #t }}},
{ "u8", &ty_u8, { .size: 1, .u: :Int { .sgn: #f }}},
{ "i16", &ty_i16, { .size: 2, .u: :Int { .sgn: #t }}},
{ "u16", &ty_u16, { .size: 2, .u: :Int { .sgn: #f }}},
{ "i32", &ty_i32, { .size: 4, .u: :Int { .sgn: #t }}},
{ "u32", &ty_u32, { .size: 4, .u: :Int { .sgn: #f }}},
- { "int", &ty_int, { g_targ.intsize, .u: :Int { .sgn: #t }}},
- { "uint", &ty_uint, { g_targ.intsize, .u: :Int { .sgn: #f }}},
- { "intbool",&ty_intbool,{ .size: g_targ.intsize, .u: :Bool }},
- { "isize", &ty_isize,{ g_targ.sizesize, .u: :Int { .sgn: #t }}},
- { "usize", &ty_usize,{ g_targ.sizesize, .u: :Int { .sgn: #f }}},
- { "i64", &ty_i64, { .size: 8, g_targ.i64align, .u: :Int { .sgn: #t }}},
- { "u64", &ty_u64, { .size: 8, g_targ.i64align, .u: :Int { .sgn: #f }}},
- { "iptrint",&ty_iptrint, { g_targ.ptrsize, .u: :Int { .sgn: #t }}},
- { "uptrint",&ty_uptrint, { g_targ.ptrsize, .u: :Int { .sgn: #f }}},
- { "c_char", &ty_c_char, { .size: 1, .u: :Int { .sgn: g_targ.charsigned }}},
- { "c_long", &ty_c_long, { g_targ.longsize, g_targ.longalign, .u: :Int { .sgn : #t }}},
- { "c_ulong",&ty_c_ulong, { g_targ.longsize, g_targ.longalign, .u: :Int { .sgn : #f }}},
- { "c_llong",&ty_c_llong, { g_targ.llongsize, g_targ.llongalign, .u: :Int { .sgn : #t }}},
- { "c_ullong",&ty_c_ullong,{ g_targ.llongsize, g_targ.llongalign, .u: :Int { .sgn : #f }}},
- { "va_list",&ty_c_valist,{ g_targ.valistsize, g_targ.valistalign, .u: :VaList }},
+ { "int", &ty_int, { .u: :Int { .sgn: #t }}},
+ { "uint", &ty_uint, { .u: :Int { .sgn: #f }}},
+ { "intbool",&ty_intbool,{ .u: :Bool }},
+ { "isize", &ty_isize,{ .u: :Int { .sgn: #t }}},
+ { "usize", &ty_usize,{ .u: :Int { .sgn: #f }}},
+ { "i64", &ty_i64, { .size: 8, .u: :Int { .sgn: #t }}},
+ { "u64", &ty_u64, { .size: 8, .u: :Int { .sgn: #f }}},
+ { "iptrint",&ty_iptrint, { .u: :Int { .sgn: #t }}},
+ { "uptrint",&ty_uptrint, { .u: :Int { .sgn: #f }}},
+ { "c_char", &ty_c_char, { .size: 1 }},
+ { "c_long", &ty_c_long, { .u: :Int { .sgn : #t }}},
+ { "c_ulong",&ty_c_ulong, { .u: :Int { .sgn : #f }}},
+ { "c_llong",&ty_c_llong, { .u: :Int { .sgn : #t }}},
+ { "c_ullong",&ty_c_ullong,{.u: :Int { .sgn : #f }}},
+ { "va_list",&ty_c_valist,{ .u: :VaList }},
};
foreach(type, _, types[0::]) {
- envput(env, { type.name, .u: :Ty(*type.gty = interntype(type.ty)) }, #null);
+ let ty = &type.ty;
+ let gty = type.gty;
+ switch {
+ case gty == &ty_f64;
+ ty.align = g_targ.f64align;
+
+ case gty == &ty_int or gty == &ty_uint or gty == &ty_intbool;
+ ty.size = g_targ.intsize;
+
+ case gty == &ty_isize or gty == &ty_usize;
+ ty.size = g_targ.sizesize;
+
+ case gty == &ty_i64 or gty == &ty_u64;
+ ty.align = g_targ.i64align;
+
+ case gty == &ty_iptrint or gty == &ty_uptrint;
+ ty.size = g_targ.ptrsize;
+
+ case gty == &ty_c_char;
+ ty.u.Int.sgn = g_targ.charsigned;
+
+ case gty == &ty_c_long or gty == &ty_c_ulong;
+ ty.size = g_targ.longsize;
+ ty.align = g_targ.longalign;
+
+ case gty == &ty_c_llong or gty == &ty_c_ullong;
+ ty.size = g_targ.longsize;
+ ty.align = g_targ.longalign;
+
+ case gty == &ty_c_valist;
+ ty.size = g_targ.valistsize;
+ ty.align = g_targ.valistalign;
+ }
+ envput(env, { type.name, .u: :Ty(*gty = interntype(*ty)) }, #null);
}
ty_voidptr = interntype({ .size: g_targ.ptrsize, .u: :Ptr(ty_void) });
}