From e0385225b5a4a0d7b391d3d71c19228efe06ed04 Mon Sep 17 00:00:00 2001 From: lemon Date: Mon, 29 Aug 2022 16:58:56 +0200 Subject: staticify --- src/type.cff | 69 ++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 18 deletions(-) (limited to 'src') 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) }); } -- cgit v1.2.3