@@ -77,21 +77,37 @@ export let bool_ = bool_t.id
7777export let string_ = typechecking::array(char_)
7878scope::create_type(builtins, parser::make_identifier("string"), parser::ShareMarker::EXPORT, typechecking::make_type_ref(string_))
7979
80- export let float_ = create_float_type("float", size_of float)
81- export let double_ = create_float_type("double", size_of double)
80+ export def get_int_of_size(size: size_t, unsig: bool) -> typechecking::TypeId {
81+ if unsig {
82+ switch size {
83+ case 1; return uint8_
84+ case 2; return uint16_
85+ case 4; return uint32_
86+ case 8; return uint64_
87+ case 16; return uint128_
88+ }
89+ } else {
90+ switch size {
91+ case 1; return int8_
92+ case 2; return int16_
93+ case 4; return int32_
94+ case 8; return int64_
95+ case 16; return int128_
96+ }
97+ }
98+ return 0
99+ }
100+
101+ def register(name: Str, tpe: typechecking::TypeId) -> typechecking::TypeId {
102+ scope::create_type(builtins, parser::make_identifier(name), parser::ShareMarker::EXPORT, typechecking::make_type_ref(tpe))
103+ return tpe
104+ }
105+
82106export let float32_ = create_float_type("float32", size_of float32)
83107export let float64_ = create_float_type("float64", size_of float64)
84108export let float80_ = create_float_type("float80", size_of float80)
85-
86- export let byte_ = create_int_type("byte", size_of byte, false)
87- export let short_ = create_int_type("short", size_of short, false)
88- export let int_ = create_int_type("int", size_of int, false)
89- export let long_ = create_int_type("long", size_of long, false)
90-
91- export let ubyte_ = create_int_type("ubyte", size_of ubyte, true)
92- export let ushort_ = create_int_type("ushort", size_of ushort, true)
93- export let uint_ = create_int_type("uint", size_of uint, true)
94- export let ulong_ = create_int_type("ulong", size_of ulong, true)
109+ export let float_ = register("float", float32_)
110+ export let double_ = register("double", float64_)
95111
96112export let int8_ = create_int_type("int8", size_of int8, false)
97113export let int16_ = create_int_type("int16", size_of int16, false)
@@ -105,7 +121,17 @@ export let uint32_ = create_int_type("uint32", size_of uint32, true)
105121export let uint64_ = create_int_type("uint64", size_of uint64, true)
106122export let uint128_ = create_int_type("uint128", 16, true)
107123
108- export let size_t_ = create_int_type("size_t", size_of size_t, true)
124+ export let byte_ = register("byte", get_int_of_size(size_of byte, false))
125+ export let short_ = register("short", get_int_of_size(size_of short, false))
126+ export let int_ = register("int", get_int_of_size(size_of int, false))
127+ export let long_ = register("long", get_int_of_size(size_of long, false))
128+
129+ export let ubyte_ = register("ubyte", get_int_of_size(size_of ubyte, true))
130+ export let ushort_ = register("ushort", get_int_of_size(size_of ushort, true))
131+ export let uint_ = register("uint", get_int_of_size(size_of uint, true))
132+ export let ulong_ = register("ulong", get_int_of_size(size_of ulong, true))
133+
134+ export let size_t_ = register("size_t", create_int_type("size_t", size_of size_t, true))
109135
110136#if not defined WIN32 {
111137 let va_list_ident = parser::make_identifier("__va_list_tag")
0 commit comments