From f25d69f2474a98009e50d465fa087a8cbfa62db1 Mon Sep 17 00:00:00 2001 From: Lion1Blue Date: Thu, 7 May 2026 13:13:21 +0200 Subject: [PATCH 1/4] simple I7 addition to integer types (without thorin lowering) --- include/artic/ast.h | 1 + src/ast.cpp | 2 ++ src/emit.cpp | 8 ++++---- src/types.cpp | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/artic/ast.h b/include/artic/ast.h index 6db1f7a0..46fae06f 100644 --- a/include/artic/ast.h +++ b/include/artic/ast.h @@ -299,6 +299,7 @@ struct AttrList : public NamedAttr { struct PrimType : public Type { enum Tag { Bool, + I7, I8, I16, I32, diff --git a/src/ast.cpp b/src/ast.cpp index 2af4e41e..d0b9cfe5 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -13,6 +13,7 @@ bool Ptrn::is_tuple() const { return isa(); } std::string PrimType::tag_to_string(Tag tag) { switch (tag) { case Bool: return "bool"; + case I7: return "i7"; case I8: return "i8"; case I16: return "i16"; case I32: return "i32"; @@ -34,6 +35,7 @@ PrimType::Tag PrimType::tag_from_token(const Token& token) { static std::unordered_map tag_map{ std::make_pair("bool", Bool), + std::make_pair("i7", I7), std::make_pair("i8", I8), std::make_pair("i16", I16), std::make_pair("i32", I32), diff --git a/src/emit.cpp b/src/emit.cpp index 86f1d66c..2852923b 100644 --- a/src/emit.cpp +++ b/src/emit.cpp @@ -2109,10 +2109,10 @@ std::tuple, bool> compile( if (!name_binder.run(*program) || !type_checker.run(*program) || !summoner.run(*program)) return std::make_tuple(std::move(program), false); - Emitter emitter(log, world, arena); - emitter.warns_as_errors = warns_as_errors; - if (!emitter.run(*program)) - return std::make_tuple(std::move(program), false); + // Emitter emitter(log, world, arena); + // emitter.warns_as_errors = warns_as_errors; + // if (!emitter.run(*program)) + // return std::make_tuple(std::move(program), false); return std::make_tuple(std::move(program), true); } diff --git a/src/types.cpp b/src/types.cpp index f7e3bf42..9c065a4e 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -593,6 +593,7 @@ bool is_int_type(const Type* type) { case ast::PrimType::U16: case ast::PrimType::U32: case ast::PrimType::U64: + case ast::PrimType::I7: case ast::PrimType::I8: case ast::PrimType::I16: case ast::PrimType::I32: From 75711d708ca82153c79c90a46bcdf867775fd6e2 Mon Sep 17 00:00:00 2001 From: Lion1Blue Date: Fri, 8 May 2026 08:35:38 +0200 Subject: [PATCH 2/4] Just added all I and U types from 1 to 128 --- include/artic/ast.h | 254 +++++++++++++++++++++ src/ast.cpp | 543 ++++++++++++++++++++++++++++++++++++++++++-- src/types.cpp | 256 ++++++++++++++++++++- 3 files changed, 1030 insertions(+), 23 deletions(-) diff --git a/include/artic/ast.h b/include/artic/ast.h index 46fae06f..0ffe33cf 100644 --- a/include/artic/ast.h +++ b/include/artic/ast.h @@ -299,18 +299,272 @@ struct AttrList : public NamedAttr { struct PrimType : public Type { enum Tag { Bool, + + // Signed integers + I1, + I2, + I3, + I4, + I5, + I6, I7, I8, + I9, + I10, + I11, + I12, + I13, + I14, + I15, I16, + I17, + I18, + I19, + I20, + I21, + I22, + I23, + I24, + I25, + I26, + I27, + I28, + I29, + I30, + I31, I32, + I33, + I34, + I35, + I36, + I37, + I38, + I39, + I40, + I41, + I42, + I43, + I44, + I45, + I46, + I47, + I48, + I49, + I50, + I51, + I52, + I53, + I54, + I55, + I56, + I57, + I58, + I59, + I60, + I61, + I62, + I63, I64, + I65, + I66, + I67, + I68, + I69, + I70, + I71, + I72, + I73, + I74, + I75, + I76, + I77, + I78, + I79, + I80, + I81, + I82, + I83, + I84, + I85, + I86, + I87, + I88, + I89, + I90, + I91, + I92, + I93, + I94, + I95, + I96, + I97, + I98, + I99, + I100, + I101, + I102, + I103, + I104, + I105, + I106, + I107, + I108, + I109, + I110, + I111, + I112, + I113, + I114, + I115, + I116, + I117, + I118, + I119, + I120, + I121, + I122, + I123, + I124, + I125, + I126, + I127, + I128, + + // Unsigned integers + U1, + U2, + U3, + U4, + U5, + U6, + U7, U8, + U9, + U10, + U11, + U12, + U13, + U14, + U15, U16, + U17, + U18, + U19, + U20, + U21, + U22, + U23, + U24, + U25, + U26, + U27, + U28, + U29, + U30, + U31, U32, + U33, + U34, + U35, + U36, + U37, + U38, + U39, + U40, + U41, + U42, + U43, + U44, + U45, + U46, + U47, + U48, + U49, + U50, + U51, + U52, + U53, + U54, + U55, + U56, + U57, + U58, + U59, + U60, + U61, + U62, + U63, U64, + U65, + U66, + U67, + U68, + U69, + U70, + U71, + U72, + U73, + U74, + U75, + U76, + U77, + U78, + U79, + U80, + U81, + U82, + U83, + U84, + U85, + U86, + U87, + U88, + U89, + U90, + U91, + U92, + U93, + U94, + U95, + U96, + U97, + U98, + U99, + U100, + U101, + U102, + U103, + U104, + U105, + U106, + U107, + U108, + U109, + U110, + U111, + U112, + U113, + U114, + U115, + U116, + U117, + U118, + U119, + U120, + U121, + U122, + U123, + U124, + U125, + U126, + U127, + U128, + + // Floating point F16, F32, F64, + Error }; diff --git a/src/ast.cpp b/src/ast.cpp index d0b9cfe5..94d9244a 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -13,21 +13,273 @@ bool Ptrn::is_tuple() const { return isa(); } std::string PrimType::tag_to_string(Tag tag) { switch (tag) { case Bool: return "bool"; - case I7: return "i7"; - case I8: return "i8"; - case I16: return "i16"; - case I32: return "i32"; - case I64: return "i64"; - case U8: return "u8"; - case U16: return "u16"; - case U32: return "u32"; - case U64: return "u64"; - case F16: return "f16"; - case F32: return "f32"; - case F64: return "f64"; - default: - assert(false); - return ""; + + // Signed integers + case I1: return "i1"; + case I2: return "i2"; + case I3: return "i3"; + case I4: return "i4"; + case I5: return "i5"; + case I6: return "i6"; + case I7: return "i7"; + case I8: return "i8"; + case I9: return "i9"; + case I10: return "i10"; + case I11: return "i11"; + case I12: return "i12"; + case I13: return "i13"; + case I14: return "i14"; + case I15: return "i15"; + case I16: return "i16"; + case I17: return "i17"; + case I18: return "i18"; + case I19: return "i19"; + case I20: return "i20"; + case I21: return "i21"; + case I22: return "i22"; + case I23: return "i23"; + case I24: return "i24"; + case I25: return "i25"; + case I26: return "i26"; + case I27: return "i27"; + case I28: return "i28"; + case I29: return "i29"; + case I30: return "i30"; + case I31: return "i31"; + case I32: return "i32"; + case I33: return "i33"; + case I34: return "i34"; + case I35: return "i35"; + case I36: return "i36"; + case I37: return "i37"; + case I38: return "i38"; + case I39: return "i39"; + case I40: return "i40"; + case I41: return "i41"; + case I42: return "i42"; + case I43: return "i43"; + case I44: return "i44"; + case I45: return "i45"; + case I46: return "i46"; + case I47: return "i47"; + case I48: return "i48"; + case I49: return "i49"; + case I50: return "i50"; + case I51: return "i51"; + case I52: return "i52"; + case I53: return "i53"; + case I54: return "i54"; + case I55: return "i55"; + case I56: return "i56"; + case I57: return "i57"; + case I58: return "i58"; + case I59: return "i59"; + case I60: return "i60"; + case I61: return "i61"; + case I62: return "i62"; + case I63: return "i63"; + case I64: return "i64"; + case I65: return "i65"; + case I66: return "i66"; + case I67: return "i67"; + case I68: return "i68"; + case I69: return "i69"; + case I70: return "i70"; + case I71: return "i71"; + case I72: return "i72"; + case I73: return "i73"; + case I74: return "i74"; + case I75: return "i75"; + case I76: return "i76"; + case I77: return "i77"; + case I78: return "i78"; + case I79: return "i79"; + case I80: return "i80"; + case I81: return "i81"; + case I82: return "i82"; + case I83: return "i83"; + case I84: return "i84"; + case I85: return "i85"; + case I86: return "i86"; + case I87: return "i87"; + case I88: return "i88"; + case I89: return "i89"; + case I90: return "i90"; + case I91: return "i91"; + case I92: return "i92"; + case I93: return "i93"; + case I94: return "i94"; + case I95: return "i95"; + case I96: return "i96"; + case I97: return "i97"; + case I98: return "i98"; + case I99: return "i99"; + case I100: return "i100"; + case I101: return "i101"; + case I102: return "i102"; + case I103: return "i103"; + case I104: return "i104"; + case I105: return "i105"; + case I106: return "i106"; + case I107: return "i107"; + case I108: return "i108"; + case I109: return "i109"; + case I110: return "i110"; + case I111: return "i111"; + case I112: return "i112"; + case I113: return "i113"; + case I114: return "i114"; + case I115: return "i115"; + case I116: return "i116"; + case I117: return "i117"; + case I118: return "i118"; + case I119: return "i119"; + case I120: return "i120"; + case I121: return "i121"; + case I122: return "i122"; + case I123: return "i123"; + case I124: return "i124"; + case I125: return "i125"; + case I126: return "i126"; + case I127: return "i127"; + case I128: return "i128"; + + // Unsigned integers + case U1: return "u1"; + case U2: return "u2"; + case U3: return "u3"; + case U4: return "u4"; + case U5: return "u5"; + case U6: return "u6"; + case U7: return "u7"; + case U8: return "u8"; + case U9: return "u9"; + case U10: return "u10"; + case U11: return "u11"; + case U12: return "u12"; + case U13: return "u13"; + case U14: return "u14"; + case U15: return "u15"; + case U16: return "u16"; + case U17: return "u17"; + case U18: return "u18"; + case U19: return "u19"; + case U20: return "u20"; + case U21: return "u21"; + case U22: return "u22"; + case U23: return "u23"; + case U24: return "u24"; + case U25: return "u25"; + case U26: return "u26"; + case U27: return "u27"; + case U28: return "u28"; + case U29: return "u29"; + case U30: return "u30"; + case U31: return "u31"; + case U32: return "u32"; + case U33: return "u33"; + case U34: return "u34"; + case U35: return "u35"; + case U36: return "u36"; + case U37: return "u37"; + case U38: return "u38"; + case U39: return "u39"; + case U40: return "u40"; + case U41: return "u41"; + case U42: return "u42"; + case U43: return "u43"; + case U44: return "u44"; + case U45: return "u45"; + case U46: return "u46"; + case U47: return "u47"; + case U48: return "u48"; + case U49: return "u49"; + case U50: return "u50"; + case U51: return "u51"; + case U52: return "u52"; + case U53: return "u53"; + case U54: return "u54"; + case U55: return "u55"; + case U56: return "u56"; + case U57: return "u57"; + case U58: return "u58"; + case U59: return "u59"; + case U60: return "u60"; + case U61: return "u61"; + case U62: return "u62"; + case U63: return "u63"; + case U64: return "u64"; + case U65: return "u65"; + case U66: return "u66"; + case U67: return "u67"; + case U68: return "u68"; + case U69: return "u69"; + case U70: return "u70"; + case U71: return "u71"; + case U72: return "u72"; + case U73: return "u73"; + case U74: return "u74"; + case U75: return "u75"; + case U76: return "u76"; + case U77: return "u77"; + case U78: return "u78"; + case U79: return "u79"; + case U80: return "u80"; + case U81: return "u81"; + case U82: return "u82"; + case U83: return "u83"; + case U84: return "u84"; + case U85: return "u85"; + case U86: return "u86"; + case U87: return "u87"; + case U88: return "u88"; + case U89: return "u89"; + case U90: return "u90"; + case U91: return "u91"; + case U92: return "u92"; + case U93: return "u93"; + case U94: return "u94"; + case U95: return "u95"; + case U96: return "u96"; + case U97: return "u97"; + case U98: return "u98"; + case U99: return "u99"; + case U100: return "u100"; + case U101: return "u101"; + case U102: return "u102"; + case U103: return "u103"; + case U104: return "u104"; + case U105: return "u105"; + case U106: return "u106"; + case U107: return "u107"; + case U108: return "u108"; + case U109: return "u109"; + case U110: return "u110"; + case U111: return "u111"; + case U112: return "u112"; + case U113: return "u113"; + case U114: return "u114"; + case U115: return "u115"; + case U116: return "u116"; + case U117: return "u117"; + case U118: return "u118"; + case U119: return "u119"; + case U120: return "u120"; + case U121: return "u121"; + case U122: return "u122"; + case U123: return "u123"; + case U124: return "u124"; + case U125: return "u125"; + case U126: return "u126"; + case U127: return "u127"; + case U128: return "u128"; + + // Floating point + case F16: return "f16"; + case F32: return "f32"; + case F64: return "f64"; + + default: assert(false); return ""; } } @@ -35,21 +287,272 @@ PrimType::Tag PrimType::tag_from_token(const Token& token) { static std::unordered_map tag_map{ std::make_pair("bool", Bool), - std::make_pair("i7", I7), - std::make_pair("i8", I8), + // Signed integers + std::make_pair("i1", I1), + std::make_pair("i2", I2), + std::make_pair("i3", I3), + std::make_pair("i4", I4), + std::make_pair("i5", I5), + std::make_pair("i6", I6), + std::make_pair("i7", I7), + std::make_pair("i8", I8), + std::make_pair("i9", I9), + std::make_pair("i10", I10), + std::make_pair("i11", I11), + std::make_pair("i12", I12), + std::make_pair("i13", I13), + std::make_pair("i14", I14), + std::make_pair("i15", I15), std::make_pair("i16", I16), + std::make_pair("i17", I17), + std::make_pair("i18", I18), + std::make_pair("i19", I19), + std::make_pair("i20", I20), + std::make_pair("i21", I21), + std::make_pair("i22", I22), + std::make_pair("i23", I23), + std::make_pair("i24", I24), + std::make_pair("i25", I25), + std::make_pair("i26", I26), + std::make_pair("i27", I27), + std::make_pair("i28", I28), + std::make_pair("i29", I29), + std::make_pair("i30", I30), + std::make_pair("i31", I31), std::make_pair("i32", I32), + std::make_pair("i33", I33), + std::make_pair("i34", I34), + std::make_pair("i35", I35), + std::make_pair("i36", I36), + std::make_pair("i37", I37), + std::make_pair("i38", I38), + std::make_pair("i39", I39), + std::make_pair("i40", I40), + std::make_pair("i41", I41), + std::make_pair("i42", I42), + std::make_pair("i43", I43), + std::make_pair("i44", I44), + std::make_pair("i45", I45), + std::make_pair("i46", I46), + std::make_pair("i47", I47), + std::make_pair("i48", I48), + std::make_pair("i49", I49), + std::make_pair("i50", I50), + std::make_pair("i51", I51), + std::make_pair("i52", I52), + std::make_pair("i53", I53), + std::make_pair("i54", I54), + std::make_pair("i55", I55), + std::make_pair("i56", I56), + std::make_pair("i57", I57), + std::make_pair("i58", I58), + std::make_pair("i59", I59), + std::make_pair("i60", I60), + std::make_pair("i61", I61), + std::make_pair("i62", I62), + std::make_pair("i63", I63), std::make_pair("i64", I64), - - std::make_pair("u8", U8), + std::make_pair("i65", I65), + std::make_pair("i66", I66), + std::make_pair("i67", I67), + std::make_pair("i68", I68), + std::make_pair("i69", I69), + std::make_pair("i70", I70), + std::make_pair("i71", I71), + std::make_pair("i72", I72), + std::make_pair("i73", I73), + std::make_pair("i74", I74), + std::make_pair("i75", I75), + std::make_pair("i76", I76), + std::make_pair("i77", I77), + std::make_pair("i78", I78), + std::make_pair("i79", I79), + std::make_pair("i80", I80), + std::make_pair("i81", I81), + std::make_pair("i82", I82), + std::make_pair("i83", I83), + std::make_pair("i84", I84), + std::make_pair("i85", I85), + std::make_pair("i86", I86), + std::make_pair("i87", I87), + std::make_pair("i88", I88), + std::make_pair("i89", I89), + std::make_pair("i90", I90), + std::make_pair("i91", I91), + std::make_pair("i92", I92), + std::make_pair("i93", I93), + std::make_pair("i94", I94), + std::make_pair("i95", I95), + std::make_pair("i96", I96), + std::make_pair("i97", I97), + std::make_pair("i98", I98), + std::make_pair("i99", I99), + std::make_pair("i100", I100), + std::make_pair("i101", I101), + std::make_pair("i102", I102), + std::make_pair("i103", I103), + std::make_pair("i104", I104), + std::make_pair("i105", I105), + std::make_pair("i106", I106), + std::make_pair("i107", I107), + std::make_pair("i108", I108), + std::make_pair("i109", I109), + std::make_pair("i110", I110), + std::make_pair("i111", I111), + std::make_pair("i112", I112), + std::make_pair("i113", I113), + std::make_pair("i114", I114), + std::make_pair("i115", I115), + std::make_pair("i116", I116), + std::make_pair("i117", I117), + std::make_pair("i118", I118), + std::make_pair("i119", I119), + std::make_pair("i120", I120), + std::make_pair("i121", I121), + std::make_pair("i122", I122), + std::make_pair("i123", I123), + std::make_pair("i124", I124), + std::make_pair("i125", I125), + std::make_pair("i126", I126), + std::make_pair("i127", I127), + std::make_pair("i128", I128), + + // Unsigned integers + std::make_pair("u1", U1), + std::make_pair("u2", U2), + std::make_pair("u3", U3), + std::make_pair("u4", U4), + std::make_pair("u5", U5), + std::make_pair("u6", U6), + std::make_pair("u7", U7), + std::make_pair("u8", U8), + std::make_pair("u9", U9), + std::make_pair("u10", U10), + std::make_pair("u11", U11), + std::make_pair("u12", U12), + std::make_pair("u13", U13), + std::make_pair("u14", U14), + std::make_pair("u15", U15), std::make_pair("u16", U16), + std::make_pair("u17", U17), + std::make_pair("u18", U18), + std::make_pair("u19", U19), + std::make_pair("u20", U20), + std::make_pair("u21", U21), + std::make_pair("u22", U22), + std::make_pair("u23", U23), + std::make_pair("u24", U24), + std::make_pair("u25", U25), + std::make_pair("u26", U26), + std::make_pair("u27", U27), + std::make_pair("u28", U28), + std::make_pair("u29", U29), + std::make_pair("u30", U30), + std::make_pair("u31", U31), std::make_pair("u32", U32), + std::make_pair("u33", U33), + std::make_pair("u34", U34), + std::make_pair("u35", U35), + std::make_pair("u36", U36), + std::make_pair("u37", U37), + std::make_pair("u38", U38), + std::make_pair("u39", U39), + std::make_pair("u40", U40), + std::make_pair("u41", U41), + std::make_pair("u42", U42), + std::make_pair("u43", U43), + std::make_pair("u44", U44), + std::make_pair("u45", U45), + std::make_pair("u46", U46), + std::make_pair("u47", U47), + std::make_pair("u48", U48), + std::make_pair("u49", U49), + std::make_pair("u50", U50), + std::make_pair("u51", U51), + std::make_pair("u52", U52), + std::make_pair("u53", U53), + std::make_pair("u54", U54), + std::make_pair("u55", U55), + std::make_pair("u56", U56), + std::make_pair("u57", U57), + std::make_pair("u58", U58), + std::make_pair("u59", U59), + std::make_pair("u60", U60), + std::make_pair("u61", U61), + std::make_pair("u62", U62), + std::make_pair("u63", U63), std::make_pair("u64", U64), - + std::make_pair("u65", U65), + std::make_pair("u66", U66), + std::make_pair("u67", U67), + std::make_pair("u68", U68), + std::make_pair("u69", U69), + std::make_pair("u70", U70), + std::make_pair("u71", U71), + std::make_pair("u72", U72), + std::make_pair("u73", U73), + std::make_pair("u74", U74), + std::make_pair("u75", U75), + std::make_pair("u76", U76), + std::make_pair("u77", U77), + std::make_pair("u78", U78), + std::make_pair("u79", U79), + std::make_pair("u80", U80), + std::make_pair("u81", U81), + std::make_pair("u82", U82), + std::make_pair("u83", U83), + std::make_pair("u84", U84), + std::make_pair("u85", U85), + std::make_pair("u86", U86), + std::make_pair("u87", U87), + std::make_pair("u88", U88), + std::make_pair("u89", U89), + std::make_pair("u90", U90), + std::make_pair("u91", U91), + std::make_pair("u92", U92), + std::make_pair("u93", U93), + std::make_pair("u94", U94), + std::make_pair("u95", U95), + std::make_pair("u96", U96), + std::make_pair("u97", U97), + std::make_pair("u98", U98), + std::make_pair("u99", U99), + std::make_pair("u100", U100), + std::make_pair("u101", U101), + std::make_pair("u102", U102), + std::make_pair("u103", U103), + std::make_pair("u104", U104), + std::make_pair("u105", U105), + std::make_pair("u106", U106), + std::make_pair("u107", U107), + std::make_pair("u108", U108), + std::make_pair("u109", U109), + std::make_pair("u110", U110), + std::make_pair("u111", U111), + std::make_pair("u112", U112), + std::make_pair("u113", U113), + std::make_pair("u114", U114), + std::make_pair("u115", U115), + std::make_pair("u116", U116), + std::make_pair("u117", U117), + std::make_pair("u118", U118), + std::make_pair("u119", U119), + std::make_pair("u120", U120), + std::make_pair("u121", U121), + std::make_pair("u122", U122), + std::make_pair("u123", U123), + std::make_pair("u124", U124), + std::make_pair("u125", U125), + std::make_pair("u126", U126), + std::make_pair("u127", U127), + std::make_pair("u128", U128), + + // Floating point std::make_pair("f16", F16), std::make_pair("f32", F32), std::make_pair("f64", F64), }; + auto it = tag_map.find(token.string()); return it != tag_map.end() ? it->second : Error; } diff --git a/src/types.cpp b/src/types.cpp index 9c065a4e..a041d549 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -589,20 +589,270 @@ std::unordered_map TypeApp::replace_map( bool is_int_type(const Type* type) { if (auto prim_type = type->isa()) { switch (prim_type->tag) { + // Unsigned integers + case ast::PrimType::U1: + case ast::PrimType::U2: + case ast::PrimType::U3: + case ast::PrimType::U4: + case ast::PrimType::U5: + case ast::PrimType::U6: + case ast::PrimType::U7: case ast::PrimType::U8: + case ast::PrimType::U9: + case ast::PrimType::U10: + case ast::PrimType::U11: + case ast::PrimType::U12: + case ast::PrimType::U13: + case ast::PrimType::U14: + case ast::PrimType::U15: case ast::PrimType::U16: + case ast::PrimType::U17: + case ast::PrimType::U18: + case ast::PrimType::U19: + case ast::PrimType::U20: + case ast::PrimType::U21: + case ast::PrimType::U22: + case ast::PrimType::U23: + case ast::PrimType::U24: + case ast::PrimType::U25: + case ast::PrimType::U26: + case ast::PrimType::U27: + case ast::PrimType::U28: + case ast::PrimType::U29: + case ast::PrimType::U30: + case ast::PrimType::U31: case ast::PrimType::U32: + case ast::PrimType::U33: + case ast::PrimType::U34: + case ast::PrimType::U35: + case ast::PrimType::U36: + case ast::PrimType::U37: + case ast::PrimType::U38: + case ast::PrimType::U39: + case ast::PrimType::U40: + case ast::PrimType::U41: + case ast::PrimType::U42: + case ast::PrimType::U43: + case ast::PrimType::U44: + case ast::PrimType::U45: + case ast::PrimType::U46: + case ast::PrimType::U47: + case ast::PrimType::U48: + case ast::PrimType::U49: + case ast::PrimType::U50: + case ast::PrimType::U51: + case ast::PrimType::U52: + case ast::PrimType::U53: + case ast::PrimType::U54: + case ast::PrimType::U55: + case ast::PrimType::U56: + case ast::PrimType::U57: + case ast::PrimType::U58: + case ast::PrimType::U59: + case ast::PrimType::U60: + case ast::PrimType::U61: + case ast::PrimType::U62: + case ast::PrimType::U63: case ast::PrimType::U64: + case ast::PrimType::U65: + case ast::PrimType::U66: + case ast::PrimType::U67: + case ast::PrimType::U68: + case ast::PrimType::U69: + case ast::PrimType::U70: + case ast::PrimType::U71: + case ast::PrimType::U72: + case ast::PrimType::U73: + case ast::PrimType::U74: + case ast::PrimType::U75: + case ast::PrimType::U76: + case ast::PrimType::U77: + case ast::PrimType::U78: + case ast::PrimType::U79: + case ast::PrimType::U80: + case ast::PrimType::U81: + case ast::PrimType::U82: + case ast::PrimType::U83: + case ast::PrimType::U84: + case ast::PrimType::U85: + case ast::PrimType::U86: + case ast::PrimType::U87: + case ast::PrimType::U88: + case ast::PrimType::U89: + case ast::PrimType::U90: + case ast::PrimType::U91: + case ast::PrimType::U92: + case ast::PrimType::U93: + case ast::PrimType::U94: + case ast::PrimType::U95: + case ast::PrimType::U96: + case ast::PrimType::U97: + case ast::PrimType::U98: + case ast::PrimType::U99: + case ast::PrimType::U100: + case ast::PrimType::U101: + case ast::PrimType::U102: + case ast::PrimType::U103: + case ast::PrimType::U104: + case ast::PrimType::U105: + case ast::PrimType::U106: + case ast::PrimType::U107: + case ast::PrimType::U108: + case ast::PrimType::U109: + case ast::PrimType::U110: + case ast::PrimType::U111: + case ast::PrimType::U112: + case ast::PrimType::U113: + case ast::PrimType::U114: + case ast::PrimType::U115: + case ast::PrimType::U116: + case ast::PrimType::U117: + case ast::PrimType::U118: + case ast::PrimType::U119: + case ast::PrimType::U120: + case ast::PrimType::U121: + case ast::PrimType::U122: + case ast::PrimType::U123: + case ast::PrimType::U124: + case ast::PrimType::U125: + case ast::PrimType::U126: + case ast::PrimType::U127: + case ast::PrimType::U128: + + // Signed integers + case ast::PrimType::I1: + case ast::PrimType::I2: + case ast::PrimType::I3: + case ast::PrimType::I4: + case ast::PrimType::I5: + case ast::PrimType::I6: case ast::PrimType::I7: case ast::PrimType::I8: + case ast::PrimType::I9: + case ast::PrimType::I10: + case ast::PrimType::I11: + case ast::PrimType::I12: + case ast::PrimType::I13: + case ast::PrimType::I14: + case ast::PrimType::I15: case ast::PrimType::I16: + case ast::PrimType::I17: + case ast::PrimType::I18: + case ast::PrimType::I19: + case ast::PrimType::I20: + case ast::PrimType::I21: + case ast::PrimType::I22: + case ast::PrimType::I23: + case ast::PrimType::I24: + case ast::PrimType::I25: + case ast::PrimType::I26: + case ast::PrimType::I27: + case ast::PrimType::I28: + case ast::PrimType::I29: + case ast::PrimType::I30: + case ast::PrimType::I31: case ast::PrimType::I32: + case ast::PrimType::I33: + case ast::PrimType::I34: + case ast::PrimType::I35: + case ast::PrimType::I36: + case ast::PrimType::I37: + case ast::PrimType::I38: + case ast::PrimType::I39: + case ast::PrimType::I40: + case ast::PrimType::I41: + case ast::PrimType::I42: + case ast::PrimType::I43: + case ast::PrimType::I44: + case ast::PrimType::I45: + case ast::PrimType::I46: + case ast::PrimType::I47: + case ast::PrimType::I48: + case ast::PrimType::I49: + case ast::PrimType::I50: + case ast::PrimType::I51: + case ast::PrimType::I52: + case ast::PrimType::I53: + case ast::PrimType::I54: + case ast::PrimType::I55: + case ast::PrimType::I56: + case ast::PrimType::I57: + case ast::PrimType::I58: + case ast::PrimType::I59: + case ast::PrimType::I60: + case ast::PrimType::I61: + case ast::PrimType::I62: + case ast::PrimType::I63: case ast::PrimType::I64: - return true; - default: - break; + case ast::PrimType::I65: + case ast::PrimType::I66: + case ast::PrimType::I67: + case ast::PrimType::I68: + case ast::PrimType::I69: + case ast::PrimType::I70: + case ast::PrimType::I71: + case ast::PrimType::I72: + case ast::PrimType::I73: + case ast::PrimType::I74: + case ast::PrimType::I75: + case ast::PrimType::I76: + case ast::PrimType::I77: + case ast::PrimType::I78: + case ast::PrimType::I79: + case ast::PrimType::I80: + case ast::PrimType::I81: + case ast::PrimType::I82: + case ast::PrimType::I83: + case ast::PrimType::I84: + case ast::PrimType::I85: + case ast::PrimType::I86: + case ast::PrimType::I87: + case ast::PrimType::I88: + case ast::PrimType::I89: + case ast::PrimType::I90: + case ast::PrimType::I91: + case ast::PrimType::I92: + case ast::PrimType::I93: + case ast::PrimType::I94: + case ast::PrimType::I95: + case ast::PrimType::I96: + case ast::PrimType::I97: + case ast::PrimType::I98: + case ast::PrimType::I99: + case ast::PrimType::I100: + case ast::PrimType::I101: + case ast::PrimType::I102: + case ast::PrimType::I103: + case ast::PrimType::I104: + case ast::PrimType::I105: + case ast::PrimType::I106: + case ast::PrimType::I107: + case ast::PrimType::I108: + case ast::PrimType::I109: + case ast::PrimType::I110: + case ast::PrimType::I111: + case ast::PrimType::I112: + case ast::PrimType::I113: + case ast::PrimType::I114: + case ast::PrimType::I115: + case ast::PrimType::I116: + case ast::PrimType::I117: + case ast::PrimType::I118: + case ast::PrimType::I119: + case ast::PrimType::I120: + case ast::PrimType::I121: + case ast::PrimType::I122: + case ast::PrimType::I123: + case ast::PrimType::I124: + case ast::PrimType::I125: + case ast::PrimType::I126: + case ast::PrimType::I127: + case ast::PrimType::I128: return true; + + default: break; } } + return false; } From d6137e4ec1ec4c9288f9b37d4dae4b3bf6187194 Mon Sep 17 00:00:00 2001 From: Lion1Blue Date: Fri, 8 May 2026 10:54:34 +0200 Subject: [PATCH 3/4] implementing ap precision with defines --- include/artic/ast.h | 272 +----------------- include/artic/prim_types.h | 275 +++++++++++++++++++ src/CMakeLists.txt | 1 + src/ast.cpp | 545 +------------------------------------ src/check.cpp | 1 + src/types.cpp | 266 +----------------- 6 files changed, 303 insertions(+), 1057 deletions(-) create mode 100644 include/artic/prim_types.h diff --git a/include/artic/ast.h b/include/artic/ast.h index 0ffe33cf..c7936d70 100644 --- a/include/artic/ast.h +++ b/include/artic/ast.h @@ -11,6 +11,7 @@ #include "artic/cast.h" #include "artic/token.h" #include "artic/symbol.h" +#include "artic/prim_types.h" namespace thorin { class Def; @@ -298,272 +299,11 @@ struct AttrList : public NamedAttr { /// Primitive type (integer, float, ...). struct PrimType : public Type { enum Tag { - Bool, - - // Signed integers - I1, - I2, - I3, - I4, - I5, - I6, - I7, - I8, - I9, - I10, - I11, - I12, - I13, - I14, - I15, - I16, - I17, - I18, - I19, - I20, - I21, - I22, - I23, - I24, - I25, - I26, - I27, - I28, - I29, - I30, - I31, - I32, - I33, - I34, - I35, - I36, - I37, - I38, - I39, - I40, - I41, - I42, - I43, - I44, - I45, - I46, - I47, - I48, - I49, - I50, - I51, - I52, - I53, - I54, - I55, - I56, - I57, - I58, - I59, - I60, - I61, - I62, - I63, - I64, - I65, - I66, - I67, - I68, - I69, - I70, - I71, - I72, - I73, - I74, - I75, - I76, - I77, - I78, - I79, - I80, - I81, - I82, - I83, - I84, - I85, - I86, - I87, - I88, - I89, - I90, - I91, - I92, - I93, - I94, - I95, - I96, - I97, - I98, - I99, - I100, - I101, - I102, - I103, - I104, - I105, - I106, - I107, - I108, - I109, - I110, - I111, - I112, - I113, - I114, - I115, - I116, - I117, - I118, - I119, - I120, - I121, - I122, - I123, - I124, - I125, - I126, - I127, - I128, - - // Unsigned integers - U1, - U2, - U3, - U4, - U5, - U6, - U7, - U8, - U9, - U10, - U11, - U12, - U13, - U14, - U15, - U16, - U17, - U18, - U19, - U20, - U21, - U22, - U23, - U24, - U25, - U26, - U27, - U28, - U29, - U30, - U31, - U32, - U33, - U34, - U35, - U36, - U37, - U38, - U39, - U40, - U41, - U42, - U43, - U44, - U45, - U46, - U47, - U48, - U49, - U50, - U51, - U52, - U53, - U54, - U55, - U56, - U57, - U58, - U59, - U60, - U61, - U62, - U63, - U64, - U65, - U66, - U67, - U68, - U69, - U70, - U71, - U72, - U73, - U74, - U75, - U76, - U77, - U78, - U79, - U80, - U81, - U82, - U83, - U84, - U85, - U86, - U87, - U88, - U89, - U90, - U91, - U92, - U93, - U94, - U95, - U96, - U97, - U98, - U99, - U100, - U101, - U102, - U103, - U104, - U105, - U106, - U107, - U108, - U109, - U110, - U111, - U112, - U113, - U114, - U115, - U116, - U117, - U118, - U119, - U120, - U121, - U122, - U123, - U124, - U125, - U126, - U127, - U128, - - // Floating point - F16, - F32, - F64, +#define DECL_ENUM(name, str) name, + + ALL_PRIM_TYPES(DECL_ENUM) + +#undef DECL_ENUM Error }; diff --git a/include/artic/prim_types.h b/include/artic/prim_types.h new file mode 100644 index 00000000..83509045 --- /dev/null +++ b/include/artic/prim_types.h @@ -0,0 +1,275 @@ +#ifndef ARTIC_PRIM_TYPES_H +#define ARTIC_PRIM_TYPES_H + +#define INT_SIGNED_TYPES(M) \ + M(I1, "i1") \ + M(I2, "i2") \ + M(I3, "i3") \ + M(I4, "i4") \ + M(I5, "i5") \ + M(I6, "i6") \ + M(I7, "i7") \ + M(I8, "i8") \ + M(I9, "i9") \ + M(I10, "i10") \ + M(I11, "i11") \ + M(I12, "i12") \ + M(I13, "i13") \ + M(I14, "i14") \ + M(I15, "i15") \ + M(I16, "i16") \ + M(I17, "i17") \ + M(I18, "i18") \ + M(I19, "i19") \ + M(I20, "i20") \ + M(I21, "i21") \ + M(I22, "i22") \ + M(I23, "i23") \ + M(I24, "i24") \ + M(I25, "i25") \ + M(I26, "i26") \ + M(I27, "i27") \ + M(I28, "i28") \ + M(I29, "i29") \ + M(I30, "i30") \ + M(I31, "i31") \ + M(I32, "i32") \ + M(I33, "i33") \ + M(I34, "i34") \ + M(I35, "i35") \ + M(I36, "i36") \ + M(I37, "i37") \ + M(I38, "i38") \ + M(I39, "i39") \ + M(I40, "i40") \ + M(I41, "i41") \ + M(I42, "i42") \ + M(I43, "i43") \ + M(I44, "i44") \ + M(I45, "i45") \ + M(I46, "i46") \ + M(I47, "i47") \ + M(I48, "i48") \ + M(I49, "i49") \ + M(I50, "i50") \ + M(I51, "i51") \ + M(I52, "i52") \ + M(I53, "i53") \ + M(I54, "i54") \ + M(I55, "i55") \ + M(I56, "i56") \ + M(I57, "i57") \ + M(I58, "i58") \ + M(I59, "i59") \ + M(I60, "i60") \ + M(I61, "i61") \ + M(I62, "i62") \ + M(I63, "i63") \ + M(I64, "i64") \ + M(I65, "i65") \ + M(I66, "i66") \ + M(I67, "i67") \ + M(I68, "i68") \ + M(I69, "i69") \ + M(I70, "i70") \ + M(I71, "i71") \ + M(I72, "i72") \ + M(I73, "i73") \ + M(I74, "i74") \ + M(I75, "i75") \ + M(I76, "i76") \ + M(I77, "i77") \ + M(I78, "i78") \ + M(I79, "i79") \ + M(I80, "i80") \ + M(I81, "i81") \ + M(I82, "i82") \ + M(I83, "i83") \ + M(I84, "i84") \ + M(I85, "i85") \ + M(I86, "i86") \ + M(I87, "i87") \ + M(I88, "i88") \ + M(I89, "i89") \ + M(I90, "i90") \ + M(I91, "i91") \ + M(I92, "i92") \ + M(I93, "i93") \ + M(I94, "i94") \ + M(I95, "i95") \ + M(I96, "i96") \ + M(I97, "i97") \ + M(I98, "i98") \ + M(I99, "i99") \ + M(I100, "i100") \ + M(I101, "i101") \ + M(I102, "i102") \ + M(I103, "i103") \ + M(I104, "i104") \ + M(I105, "i105") \ + M(I106, "i106") \ + M(I107, "i107") \ + M(I108, "i108") \ + M(I109, "i109") \ + M(I110, "i110") \ + M(I111, "i111") \ + M(I112, "i112") \ + M(I113, "i113") \ + M(I114, "i114") \ + M(I115, "i115") \ + M(I116, "i116") \ + M(I117, "i117") \ + M(I118, "i118") \ + M(I119, "i119") \ + M(I120, "i120") \ + M(I121, "i121") \ + M(I122, "i122") \ + M(I123, "i123") \ + M(I124, "i124") \ + M(I125, "i125") \ + M(I126, "i126") \ + M(I127, "i127") \ + M(I128, "i128") + +#define INT_UNSIGNED_TYPES(M) \ + M(U1, "u1") \ + M(U2, "u2") \ + M(U3, "u3") \ + M(U4, "u4") \ + M(U5, "u5") \ + M(U6, "u6") \ + M(U7, "u7") \ + M(U8, "u8") \ + M(U9, "u9") \ + M(U10, "u10") \ + M(U11, "u11") \ + M(U12, "u12") \ + M(U13, "u13") \ + M(U14, "u14") \ + M(U15, "u15") \ + M(U16, "u16") \ + M(U17, "u17") \ + M(U18, "u18") \ + M(U19, "u19") \ + M(U20, "u20") \ + M(U21, "u21") \ + M(U22, "u22") \ + M(U23, "u23") \ + M(U24, "u24") \ + M(U25, "u25") \ + M(U26, "u26") \ + M(U27, "u27") \ + M(U28, "u28") \ + M(U29, "u29") \ + M(U30, "u30") \ + M(U31, "u31") \ + M(U32, "u32") \ + M(U33, "u33") \ + M(U34, "u34") \ + M(U35, "u35") \ + M(U36, "u36") \ + M(U37, "u37") \ + M(U38, "u38") \ + M(U39, "u39") \ + M(U40, "u40") \ + M(U41, "u41") \ + M(U42, "u42") \ + M(U43, "u43") \ + M(U44, "u44") \ + M(U45, "u45") \ + M(U46, "u46") \ + M(U47, "u47") \ + M(U48, "u48") \ + M(U49, "u49") \ + M(U50, "u50") \ + M(U51, "u51") \ + M(U52, "u52") \ + M(U53, "u53") \ + M(U54, "u54") \ + M(U55, "u55") \ + M(U56, "u56") \ + M(U57, "u57") \ + M(U58, "u58") \ + M(U59, "u59") \ + M(U60, "u60") \ + M(U61, "u61") \ + M(U62, "u62") \ + M(U63, "u63") \ + M(U64, "u64") \ + M(U65, "u65") \ + M(U66, "u66") \ + M(U67, "u67") \ + M(U68, "u68") \ + M(U69, "u69") \ + M(U70, "u70") \ + M(U71, "u71") \ + M(U72, "u72") \ + M(U73, "u73") \ + M(U74, "u74") \ + M(U75, "u75") \ + M(U76, "u76") \ + M(U77, "u77") \ + M(U78, "u78") \ + M(U79, "u79") \ + M(U80, "u80") \ + M(U81, "u81") \ + M(U82, "u82") \ + M(U83, "u83") \ + M(U84, "u84") \ + M(U85, "u85") \ + M(U86, "u86") \ + M(U87, "u87") \ + M(U88, "u88") \ + M(U89, "u89") \ + M(U90, "u90") \ + M(U91, "u91") \ + M(U92, "u92") \ + M(U93, "u93") \ + M(U94, "u94") \ + M(U95, "u95") \ + M(U96, "u96") \ + M(U97, "u97") \ + M(U98, "u98") \ + M(U99, "u99") \ + M(U100, "u100") \ + M(U101, "u101") \ + M(U102, "u102") \ + M(U103, "u103") \ + M(U104, "u104") \ + M(U105, "u105") \ + M(U106, "u106") \ + M(U107, "u107") \ + M(U108, "u108") \ + M(U109, "u109") \ + M(U110, "u110") \ + M(U111, "u111") \ + M(U112, "u112") \ + M(U113, "u113") \ + M(U114, "u114") \ + M(U115, "u115") \ + M(U116, "u116") \ + M(U117, "u117") \ + M(U118, "u118") \ + M(U119, "u119") \ + M(U120, "u120") \ + M(U121, "u121") \ + M(U122, "u122") \ + M(U123, "u123") \ + M(U124, "u124") \ + M(U125, "u125") \ + M(U126, "u126") \ + M(U127, "u127") \ + M(U128, "u128") + +#define FLOAT_TYPES(M) \ + M(F16, "f16") \ + M(F32, "f32") \ + M(F64, "f64") + +#define ALL_PRIM_TYPES(M) \ + M(Bool, "bool") \ + INT_SIGNED_TYPES(M) \ + INT_UNSIGNED_TYPES(M) \ + FLOAT_TYPES(M) + +#endif // ARTIC_PRIM_TYPES_H \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 350fd919..ab71c8bf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,6 +14,7 @@ add_library(libartic ../include/artic/symbol.h ../include/artic/token.h ../include/artic/types.h + ../include/artic/prim_types.h arena.cpp ast.cpp bind.cpp diff --git a/src/ast.cpp b/src/ast.cpp index 94d9244a..11a92829 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -3,6 +3,7 @@ #include "artic/ast.h" #include "artic/types.h" +#include "artic/prim_types.h" namespace artic::ast { @@ -12,272 +13,12 @@ bool Ptrn::is_tuple() const { return isa(); } std::string PrimType::tag_to_string(Tag tag) { switch (tag) { - case Bool: return "bool"; - - // Signed integers - case I1: return "i1"; - case I2: return "i2"; - case I3: return "i3"; - case I4: return "i4"; - case I5: return "i5"; - case I6: return "i6"; - case I7: return "i7"; - case I8: return "i8"; - case I9: return "i9"; - case I10: return "i10"; - case I11: return "i11"; - case I12: return "i12"; - case I13: return "i13"; - case I14: return "i14"; - case I15: return "i15"; - case I16: return "i16"; - case I17: return "i17"; - case I18: return "i18"; - case I19: return "i19"; - case I20: return "i20"; - case I21: return "i21"; - case I22: return "i22"; - case I23: return "i23"; - case I24: return "i24"; - case I25: return "i25"; - case I26: return "i26"; - case I27: return "i27"; - case I28: return "i28"; - case I29: return "i29"; - case I30: return "i30"; - case I31: return "i31"; - case I32: return "i32"; - case I33: return "i33"; - case I34: return "i34"; - case I35: return "i35"; - case I36: return "i36"; - case I37: return "i37"; - case I38: return "i38"; - case I39: return "i39"; - case I40: return "i40"; - case I41: return "i41"; - case I42: return "i42"; - case I43: return "i43"; - case I44: return "i44"; - case I45: return "i45"; - case I46: return "i46"; - case I47: return "i47"; - case I48: return "i48"; - case I49: return "i49"; - case I50: return "i50"; - case I51: return "i51"; - case I52: return "i52"; - case I53: return "i53"; - case I54: return "i54"; - case I55: return "i55"; - case I56: return "i56"; - case I57: return "i57"; - case I58: return "i58"; - case I59: return "i59"; - case I60: return "i60"; - case I61: return "i61"; - case I62: return "i62"; - case I63: return "i63"; - case I64: return "i64"; - case I65: return "i65"; - case I66: return "i66"; - case I67: return "i67"; - case I68: return "i68"; - case I69: return "i69"; - case I70: return "i70"; - case I71: return "i71"; - case I72: return "i72"; - case I73: return "i73"; - case I74: return "i74"; - case I75: return "i75"; - case I76: return "i76"; - case I77: return "i77"; - case I78: return "i78"; - case I79: return "i79"; - case I80: return "i80"; - case I81: return "i81"; - case I82: return "i82"; - case I83: return "i83"; - case I84: return "i84"; - case I85: return "i85"; - case I86: return "i86"; - case I87: return "i87"; - case I88: return "i88"; - case I89: return "i89"; - case I90: return "i90"; - case I91: return "i91"; - case I92: return "i92"; - case I93: return "i93"; - case I94: return "i94"; - case I95: return "i95"; - case I96: return "i96"; - case I97: return "i97"; - case I98: return "i98"; - case I99: return "i99"; - case I100: return "i100"; - case I101: return "i101"; - case I102: return "i102"; - case I103: return "i103"; - case I104: return "i104"; - case I105: return "i105"; - case I106: return "i106"; - case I107: return "i107"; - case I108: return "i108"; - case I109: return "i109"; - case I110: return "i110"; - case I111: return "i111"; - case I112: return "i112"; - case I113: return "i113"; - case I114: return "i114"; - case I115: return "i115"; - case I116: return "i116"; - case I117: return "i117"; - case I118: return "i118"; - case I119: return "i119"; - case I120: return "i120"; - case I121: return "i121"; - case I122: return "i122"; - case I123: return "i123"; - case I124: return "i124"; - case I125: return "i125"; - case I126: return "i126"; - case I127: return "i127"; - case I128: return "i128"; - - // Unsigned integers - case U1: return "u1"; - case U2: return "u2"; - case U3: return "u3"; - case U4: return "u4"; - case U5: return "u5"; - case U6: return "u6"; - case U7: return "u7"; - case U8: return "u8"; - case U9: return "u9"; - case U10: return "u10"; - case U11: return "u11"; - case U12: return "u12"; - case U13: return "u13"; - case U14: return "u14"; - case U15: return "u15"; - case U16: return "u16"; - case U17: return "u17"; - case U18: return "u18"; - case U19: return "u19"; - case U20: return "u20"; - case U21: return "u21"; - case U22: return "u22"; - case U23: return "u23"; - case U24: return "u24"; - case U25: return "u25"; - case U26: return "u26"; - case U27: return "u27"; - case U28: return "u28"; - case U29: return "u29"; - case U30: return "u30"; - case U31: return "u31"; - case U32: return "u32"; - case U33: return "u33"; - case U34: return "u34"; - case U35: return "u35"; - case U36: return "u36"; - case U37: return "u37"; - case U38: return "u38"; - case U39: return "u39"; - case U40: return "u40"; - case U41: return "u41"; - case U42: return "u42"; - case U43: return "u43"; - case U44: return "u44"; - case U45: return "u45"; - case U46: return "u46"; - case U47: return "u47"; - case U48: return "u48"; - case U49: return "u49"; - case U50: return "u50"; - case U51: return "u51"; - case U52: return "u52"; - case U53: return "u53"; - case U54: return "u54"; - case U55: return "u55"; - case U56: return "u56"; - case U57: return "u57"; - case U58: return "u58"; - case U59: return "u59"; - case U60: return "u60"; - case U61: return "u61"; - case U62: return "u62"; - case U63: return "u63"; - case U64: return "u64"; - case U65: return "u65"; - case U66: return "u66"; - case U67: return "u67"; - case U68: return "u68"; - case U69: return "u69"; - case U70: return "u70"; - case U71: return "u71"; - case U72: return "u72"; - case U73: return "u73"; - case U74: return "u74"; - case U75: return "u75"; - case U76: return "u76"; - case U77: return "u77"; - case U78: return "u78"; - case U79: return "u79"; - case U80: return "u80"; - case U81: return "u81"; - case U82: return "u82"; - case U83: return "u83"; - case U84: return "u84"; - case U85: return "u85"; - case U86: return "u86"; - case U87: return "u87"; - case U88: return "u88"; - case U89: return "u89"; - case U90: return "u90"; - case U91: return "u91"; - case U92: return "u92"; - case U93: return "u93"; - case U94: return "u94"; - case U95: return "u95"; - case U96: return "u96"; - case U97: return "u97"; - case U98: return "u98"; - case U99: return "u99"; - case U100: return "u100"; - case U101: return "u101"; - case U102: return "u102"; - case U103: return "u103"; - case U104: return "u104"; - case U105: return "u105"; - case U106: return "u106"; - case U107: return "u107"; - case U108: return "u108"; - case U109: return "u109"; - case U110: return "u110"; - case U111: return "u111"; - case U112: return "u112"; - case U113: return "u113"; - case U114: return "u114"; - case U115: return "u115"; - case U116: return "u116"; - case U117: return "u117"; - case U118: return "u118"; - case U119: return "u119"; - case U120: return "u120"; - case U121: return "u121"; - case U122: return "u122"; - case U123: return "u123"; - case U124: return "u124"; - case U125: return "u125"; - case U126: return "u126"; - case U127: return "u127"; - case U128: return "u128"; - - // Floating point - case F16: return "f16"; - case F32: return "f32"; - case F64: return "f64"; +#define DECL_CASE(name, str) \ + case name: return str; + + ALL_PRIM_TYPES(DECL_CASE) + +#undef DECL_CASE default: assert(false); return ""; } @@ -285,272 +26,12 @@ std::string PrimType::tag_to_string(Tag tag) { PrimType::Tag PrimType::tag_from_token(const Token& token) { static std::unordered_map tag_map{ - std::make_pair("bool", Bool), - - // Signed integers - std::make_pair("i1", I1), - std::make_pair("i2", I2), - std::make_pair("i3", I3), - std::make_pair("i4", I4), - std::make_pair("i5", I5), - std::make_pair("i6", I6), - std::make_pair("i7", I7), - std::make_pair("i8", I8), - std::make_pair("i9", I9), - std::make_pair("i10", I10), - std::make_pair("i11", I11), - std::make_pair("i12", I12), - std::make_pair("i13", I13), - std::make_pair("i14", I14), - std::make_pair("i15", I15), - std::make_pair("i16", I16), - std::make_pair("i17", I17), - std::make_pair("i18", I18), - std::make_pair("i19", I19), - std::make_pair("i20", I20), - std::make_pair("i21", I21), - std::make_pair("i22", I22), - std::make_pair("i23", I23), - std::make_pair("i24", I24), - std::make_pair("i25", I25), - std::make_pair("i26", I26), - std::make_pair("i27", I27), - std::make_pair("i28", I28), - std::make_pair("i29", I29), - std::make_pair("i30", I30), - std::make_pair("i31", I31), - std::make_pair("i32", I32), - std::make_pair("i33", I33), - std::make_pair("i34", I34), - std::make_pair("i35", I35), - std::make_pair("i36", I36), - std::make_pair("i37", I37), - std::make_pair("i38", I38), - std::make_pair("i39", I39), - std::make_pair("i40", I40), - std::make_pair("i41", I41), - std::make_pair("i42", I42), - std::make_pair("i43", I43), - std::make_pair("i44", I44), - std::make_pair("i45", I45), - std::make_pair("i46", I46), - std::make_pair("i47", I47), - std::make_pair("i48", I48), - std::make_pair("i49", I49), - std::make_pair("i50", I50), - std::make_pair("i51", I51), - std::make_pair("i52", I52), - std::make_pair("i53", I53), - std::make_pair("i54", I54), - std::make_pair("i55", I55), - std::make_pair("i56", I56), - std::make_pair("i57", I57), - std::make_pair("i58", I58), - std::make_pair("i59", I59), - std::make_pair("i60", I60), - std::make_pair("i61", I61), - std::make_pair("i62", I62), - std::make_pair("i63", I63), - std::make_pair("i64", I64), - std::make_pair("i65", I65), - std::make_pair("i66", I66), - std::make_pair("i67", I67), - std::make_pair("i68", I68), - std::make_pair("i69", I69), - std::make_pair("i70", I70), - std::make_pair("i71", I71), - std::make_pair("i72", I72), - std::make_pair("i73", I73), - std::make_pair("i74", I74), - std::make_pair("i75", I75), - std::make_pair("i76", I76), - std::make_pair("i77", I77), - std::make_pair("i78", I78), - std::make_pair("i79", I79), - std::make_pair("i80", I80), - std::make_pair("i81", I81), - std::make_pair("i82", I82), - std::make_pair("i83", I83), - std::make_pair("i84", I84), - std::make_pair("i85", I85), - std::make_pair("i86", I86), - std::make_pair("i87", I87), - std::make_pair("i88", I88), - std::make_pair("i89", I89), - std::make_pair("i90", I90), - std::make_pair("i91", I91), - std::make_pair("i92", I92), - std::make_pair("i93", I93), - std::make_pair("i94", I94), - std::make_pair("i95", I95), - std::make_pair("i96", I96), - std::make_pair("i97", I97), - std::make_pair("i98", I98), - std::make_pair("i99", I99), - std::make_pair("i100", I100), - std::make_pair("i101", I101), - std::make_pair("i102", I102), - std::make_pair("i103", I103), - std::make_pair("i104", I104), - std::make_pair("i105", I105), - std::make_pair("i106", I106), - std::make_pair("i107", I107), - std::make_pair("i108", I108), - std::make_pair("i109", I109), - std::make_pair("i110", I110), - std::make_pair("i111", I111), - std::make_pair("i112", I112), - std::make_pair("i113", I113), - std::make_pair("i114", I114), - std::make_pair("i115", I115), - std::make_pair("i116", I116), - std::make_pair("i117", I117), - std::make_pair("i118", I118), - std::make_pair("i119", I119), - std::make_pair("i120", I120), - std::make_pair("i121", I121), - std::make_pair("i122", I122), - std::make_pair("i123", I123), - std::make_pair("i124", I124), - std::make_pair("i125", I125), - std::make_pair("i126", I126), - std::make_pair("i127", I127), - std::make_pair("i128", I128), - - // Unsigned integers - std::make_pair("u1", U1), - std::make_pair("u2", U2), - std::make_pair("u3", U3), - std::make_pair("u4", U4), - std::make_pair("u5", U5), - std::make_pair("u6", U6), - std::make_pair("u7", U7), - std::make_pair("u8", U8), - std::make_pair("u9", U9), - std::make_pair("u10", U10), - std::make_pair("u11", U11), - std::make_pair("u12", U12), - std::make_pair("u13", U13), - std::make_pair("u14", U14), - std::make_pair("u15", U15), - std::make_pair("u16", U16), - std::make_pair("u17", U17), - std::make_pair("u18", U18), - std::make_pair("u19", U19), - std::make_pair("u20", U20), - std::make_pair("u21", U21), - std::make_pair("u22", U22), - std::make_pair("u23", U23), - std::make_pair("u24", U24), - std::make_pair("u25", U25), - std::make_pair("u26", U26), - std::make_pair("u27", U27), - std::make_pair("u28", U28), - std::make_pair("u29", U29), - std::make_pair("u30", U30), - std::make_pair("u31", U31), - std::make_pair("u32", U32), - std::make_pair("u33", U33), - std::make_pair("u34", U34), - std::make_pair("u35", U35), - std::make_pair("u36", U36), - std::make_pair("u37", U37), - std::make_pair("u38", U38), - std::make_pair("u39", U39), - std::make_pair("u40", U40), - std::make_pair("u41", U41), - std::make_pair("u42", U42), - std::make_pair("u43", U43), - std::make_pair("u44", U44), - std::make_pair("u45", U45), - std::make_pair("u46", U46), - std::make_pair("u47", U47), - std::make_pair("u48", U48), - std::make_pair("u49", U49), - std::make_pair("u50", U50), - std::make_pair("u51", U51), - std::make_pair("u52", U52), - std::make_pair("u53", U53), - std::make_pair("u54", U54), - std::make_pair("u55", U55), - std::make_pair("u56", U56), - std::make_pair("u57", U57), - std::make_pair("u58", U58), - std::make_pair("u59", U59), - std::make_pair("u60", U60), - std::make_pair("u61", U61), - std::make_pair("u62", U62), - std::make_pair("u63", U63), - std::make_pair("u64", U64), - std::make_pair("u65", U65), - std::make_pair("u66", U66), - std::make_pair("u67", U67), - std::make_pair("u68", U68), - std::make_pair("u69", U69), - std::make_pair("u70", U70), - std::make_pair("u71", U71), - std::make_pair("u72", U72), - std::make_pair("u73", U73), - std::make_pair("u74", U74), - std::make_pair("u75", U75), - std::make_pair("u76", U76), - std::make_pair("u77", U77), - std::make_pair("u78", U78), - std::make_pair("u79", U79), - std::make_pair("u80", U80), - std::make_pair("u81", U81), - std::make_pair("u82", U82), - std::make_pair("u83", U83), - std::make_pair("u84", U84), - std::make_pair("u85", U85), - std::make_pair("u86", U86), - std::make_pair("u87", U87), - std::make_pair("u88", U88), - std::make_pair("u89", U89), - std::make_pair("u90", U90), - std::make_pair("u91", U91), - std::make_pair("u92", U92), - std::make_pair("u93", U93), - std::make_pair("u94", U94), - std::make_pair("u95", U95), - std::make_pair("u96", U96), - std::make_pair("u97", U97), - std::make_pair("u98", U98), - std::make_pair("u99", U99), - std::make_pair("u100", U100), - std::make_pair("u101", U101), - std::make_pair("u102", U102), - std::make_pair("u103", U103), - std::make_pair("u104", U104), - std::make_pair("u105", U105), - std::make_pair("u106", U106), - std::make_pair("u107", U107), - std::make_pair("u108", U108), - std::make_pair("u109", U109), - std::make_pair("u110", U110), - std::make_pair("u111", U111), - std::make_pair("u112", U112), - std::make_pair("u113", U113), - std::make_pair("u114", U114), - std::make_pair("u115", U115), - std::make_pair("u116", U116), - std::make_pair("u117", U117), - std::make_pair("u118", U118), - std::make_pair("u119", U119), - std::make_pair("u120", U120), - std::make_pair("u121", U121), - std::make_pair("u122", U122), - std::make_pair("u123", U123), - std::make_pair("u124", U124), - std::make_pair("u125", U125), - std::make_pair("u126", U126), - std::make_pair("u127", U127), - std::make_pair("u128", U128), - - // Floating point - std::make_pair("f16", F16), - std::make_pair("f32", F32), - std::make_pair("f64", F64), + +#define DECL_MAP(name, str) std::make_pair(str, name), + + ALL_PRIM_TYPES(DECL_MAP) + +#undef DECL_MAP }; auto it = tag_map.find(token.string()); diff --git a/src/check.cpp b/src/check.cpp index 95808cc3..b573007d 100644 --- a/src/check.cpp +++ b/src/check.cpp @@ -1,6 +1,7 @@ #include #include "artic/check.h" +#include "artic/prim_types.h" namespace artic { diff --git a/src/types.cpp b/src/types.cpp index a041d549..20545293 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -589,265 +589,13 @@ std::unordered_map TypeApp::replace_map( bool is_int_type(const Type* type) { if (auto prim_type = type->isa()) { switch (prim_type->tag) { - // Unsigned integers - case ast::PrimType::U1: - case ast::PrimType::U2: - case ast::PrimType::U3: - case ast::PrimType::U4: - case ast::PrimType::U5: - case ast::PrimType::U6: - case ast::PrimType::U7: - case ast::PrimType::U8: - case ast::PrimType::U9: - case ast::PrimType::U10: - case ast::PrimType::U11: - case ast::PrimType::U12: - case ast::PrimType::U13: - case ast::PrimType::U14: - case ast::PrimType::U15: - case ast::PrimType::U16: - case ast::PrimType::U17: - case ast::PrimType::U18: - case ast::PrimType::U19: - case ast::PrimType::U20: - case ast::PrimType::U21: - case ast::PrimType::U22: - case ast::PrimType::U23: - case ast::PrimType::U24: - case ast::PrimType::U25: - case ast::PrimType::U26: - case ast::PrimType::U27: - case ast::PrimType::U28: - case ast::PrimType::U29: - case ast::PrimType::U30: - case ast::PrimType::U31: - case ast::PrimType::U32: - case ast::PrimType::U33: - case ast::PrimType::U34: - case ast::PrimType::U35: - case ast::PrimType::U36: - case ast::PrimType::U37: - case ast::PrimType::U38: - case ast::PrimType::U39: - case ast::PrimType::U40: - case ast::PrimType::U41: - case ast::PrimType::U42: - case ast::PrimType::U43: - case ast::PrimType::U44: - case ast::PrimType::U45: - case ast::PrimType::U46: - case ast::PrimType::U47: - case ast::PrimType::U48: - case ast::PrimType::U49: - case ast::PrimType::U50: - case ast::PrimType::U51: - case ast::PrimType::U52: - case ast::PrimType::U53: - case ast::PrimType::U54: - case ast::PrimType::U55: - case ast::PrimType::U56: - case ast::PrimType::U57: - case ast::PrimType::U58: - case ast::PrimType::U59: - case ast::PrimType::U60: - case ast::PrimType::U61: - case ast::PrimType::U62: - case ast::PrimType::U63: - case ast::PrimType::U64: - case ast::PrimType::U65: - case ast::PrimType::U66: - case ast::PrimType::U67: - case ast::PrimType::U68: - case ast::PrimType::U69: - case ast::PrimType::U70: - case ast::PrimType::U71: - case ast::PrimType::U72: - case ast::PrimType::U73: - case ast::PrimType::U74: - case ast::PrimType::U75: - case ast::PrimType::U76: - case ast::PrimType::U77: - case ast::PrimType::U78: - case ast::PrimType::U79: - case ast::PrimType::U80: - case ast::PrimType::U81: - case ast::PrimType::U82: - case ast::PrimType::U83: - case ast::PrimType::U84: - case ast::PrimType::U85: - case ast::PrimType::U86: - case ast::PrimType::U87: - case ast::PrimType::U88: - case ast::PrimType::U89: - case ast::PrimType::U90: - case ast::PrimType::U91: - case ast::PrimType::U92: - case ast::PrimType::U93: - case ast::PrimType::U94: - case ast::PrimType::U95: - case ast::PrimType::U96: - case ast::PrimType::U97: - case ast::PrimType::U98: - case ast::PrimType::U99: - case ast::PrimType::U100: - case ast::PrimType::U101: - case ast::PrimType::U102: - case ast::PrimType::U103: - case ast::PrimType::U104: - case ast::PrimType::U105: - case ast::PrimType::U106: - case ast::PrimType::U107: - case ast::PrimType::U108: - case ast::PrimType::U109: - case ast::PrimType::U110: - case ast::PrimType::U111: - case ast::PrimType::U112: - case ast::PrimType::U113: - case ast::PrimType::U114: - case ast::PrimType::U115: - case ast::PrimType::U116: - case ast::PrimType::U117: - case ast::PrimType::U118: - case ast::PrimType::U119: - case ast::PrimType::U120: - case ast::PrimType::U121: - case ast::PrimType::U122: - case ast::PrimType::U123: - case ast::PrimType::U124: - case ast::PrimType::U125: - case ast::PrimType::U126: - case ast::PrimType::U127: - case ast::PrimType::U128: - - // Signed integers - case ast::PrimType::I1: - case ast::PrimType::I2: - case ast::PrimType::I3: - case ast::PrimType::I4: - case ast::PrimType::I5: - case ast::PrimType::I6: - case ast::PrimType::I7: - case ast::PrimType::I8: - case ast::PrimType::I9: - case ast::PrimType::I10: - case ast::PrimType::I11: - case ast::PrimType::I12: - case ast::PrimType::I13: - case ast::PrimType::I14: - case ast::PrimType::I15: - case ast::PrimType::I16: - case ast::PrimType::I17: - case ast::PrimType::I18: - case ast::PrimType::I19: - case ast::PrimType::I20: - case ast::PrimType::I21: - case ast::PrimType::I22: - case ast::PrimType::I23: - case ast::PrimType::I24: - case ast::PrimType::I25: - case ast::PrimType::I26: - case ast::PrimType::I27: - case ast::PrimType::I28: - case ast::PrimType::I29: - case ast::PrimType::I30: - case ast::PrimType::I31: - case ast::PrimType::I32: - case ast::PrimType::I33: - case ast::PrimType::I34: - case ast::PrimType::I35: - case ast::PrimType::I36: - case ast::PrimType::I37: - case ast::PrimType::I38: - case ast::PrimType::I39: - case ast::PrimType::I40: - case ast::PrimType::I41: - case ast::PrimType::I42: - case ast::PrimType::I43: - case ast::PrimType::I44: - case ast::PrimType::I45: - case ast::PrimType::I46: - case ast::PrimType::I47: - case ast::PrimType::I48: - case ast::PrimType::I49: - case ast::PrimType::I50: - case ast::PrimType::I51: - case ast::PrimType::I52: - case ast::PrimType::I53: - case ast::PrimType::I54: - case ast::PrimType::I55: - case ast::PrimType::I56: - case ast::PrimType::I57: - case ast::PrimType::I58: - case ast::PrimType::I59: - case ast::PrimType::I60: - case ast::PrimType::I61: - case ast::PrimType::I62: - case ast::PrimType::I63: - case ast::PrimType::I64: - case ast::PrimType::I65: - case ast::PrimType::I66: - case ast::PrimType::I67: - case ast::PrimType::I68: - case ast::PrimType::I69: - case ast::PrimType::I70: - case ast::PrimType::I71: - case ast::PrimType::I72: - case ast::PrimType::I73: - case ast::PrimType::I74: - case ast::PrimType::I75: - case ast::PrimType::I76: - case ast::PrimType::I77: - case ast::PrimType::I78: - case ast::PrimType::I79: - case ast::PrimType::I80: - case ast::PrimType::I81: - case ast::PrimType::I82: - case ast::PrimType::I83: - case ast::PrimType::I84: - case ast::PrimType::I85: - case ast::PrimType::I86: - case ast::PrimType::I87: - case ast::PrimType::I88: - case ast::PrimType::I89: - case ast::PrimType::I90: - case ast::PrimType::I91: - case ast::PrimType::I92: - case ast::PrimType::I93: - case ast::PrimType::I94: - case ast::PrimType::I95: - case ast::PrimType::I96: - case ast::PrimType::I97: - case ast::PrimType::I98: - case ast::PrimType::I99: - case ast::PrimType::I100: - case ast::PrimType::I101: - case ast::PrimType::I102: - case ast::PrimType::I103: - case ast::PrimType::I104: - case ast::PrimType::I105: - case ast::PrimType::I106: - case ast::PrimType::I107: - case ast::PrimType::I108: - case ast::PrimType::I109: - case ast::PrimType::I110: - case ast::PrimType::I111: - case ast::PrimType::I112: - case ast::PrimType::I113: - case ast::PrimType::I114: - case ast::PrimType::I115: - case ast::PrimType::I116: - case ast::PrimType::I117: - case ast::PrimType::I118: - case ast::PrimType::I119: - case ast::PrimType::I120: - case ast::PrimType::I121: - case ast::PrimType::I122: - case ast::PrimType::I123: - case ast::PrimType::I124: - case ast::PrimType::I125: - case ast::PrimType::I126: - case ast::PrimType::I127: - case ast::PrimType::I128: return true; +#define DECL_CASE(name, str) case ast::PrimType::name: + + INT_SIGNED_TYPES(DECL_CASE) + INT_UNSIGNED_TYPES(DECL_CASE) + return true; + +#undef DECL_CASE default: break; } From fde1aba9924f53df91661fb282903af1475b1432 Mon Sep 17 00:00:00 2001 From: Lion1Blue Date: Tue, 12 May 2026 13:12:14 +0200 Subject: [PATCH 4/4] added tests for arbitrary sized integers --- test/CMakeLists.txt | 2 ++ test/failure/arbitrary_precison_ints.art | 8 ++++++ test/simple/arbitrary_precison_ints.art | 36 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 test/failure/arbitrary_precison_ints.art create mode 100644 test/simple/arbitrary_precison_ints.art diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 57fcc34e..42246601 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -17,6 +17,7 @@ add_test(NAME simple_literals2 COMMAND artic --print-ast ${CMAKE_CURRENT_SOURC add_test(NAME simple_literal_if COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/literal_if.art) add_test(NAME simple_string COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/string.art) add_test(NAME simple_comments COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/comments.art) +add_test(NAME simple_ap_ints COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/arbitrary_precison_ints.art) add_test(NAME simple_fn COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/fn.art) add_test(NAME simple_match1 COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/match1.art) add_test(NAME simple_match2 COMMAND artic --print-ast ${CMAKE_CURRENT_SOURCE_DIR}/simple/match2.art) @@ -88,6 +89,7 @@ add_failure_test(NAME failure_comment COMMAND artic ${CMAKE_CURRENT_SOURC add_failure_test(NAME failure_utf8 COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/utf8.art) add_failure_test(NAME failure_dots COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/dots.art) add_failure_test(NAME failure_char COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/char.art) +add_failure_test(NAME failure_ap_ints COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/arbitrary_precison_ints.art) add_failure_test(NAME failure_literals COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/literals.art) add_failure_test(NAME failure_similar COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/similar.art) add_failure_test(NAME failure_string COMMAND artic ${CMAKE_CURRENT_SOURCE_DIR}/failure/string.art) diff --git a/test/failure/arbitrary_precison_ints.art b/test/failure/arbitrary_precison_ints.art new file mode 100644 index 00000000..08acaea1 --- /dev/null +++ b/test/failure/arbitrary_precison_ints.art @@ -0,0 +1,8 @@ +fn test() { + let _: i0 = 0; + let _: u0 = 0; + let _: i129 = 1; + let _: u129 = 1; + let _: i300 = 1; + let _: u300 = 1; +} \ No newline at end of file diff --git a/test/simple/arbitrary_precison_ints.art b/test/simple/arbitrary_precison_ints.art new file mode 100644 index 00000000..49e12c63 --- /dev/null +++ b/test/simple/arbitrary_precison_ints.art @@ -0,0 +1,36 @@ +fn test() { + // minimum widths + let _: i1 = 1; + let _: u1 = 1; + + // byte-aligned + let _: i8 = 1; + let _: i16 = 1; + let _: i32 = 1; + let _: i64 = 1; + + let _: u8 = 1; + let _: u16 = 1; + let _: u32 = 1; + let _: u64 = 1; + + // non-byte-aligned + let _: i3 = 1; + let _: i7 = 1; + let _: i9 = 1; + let _: i17 = 1; + + let _: u3 = 1; + let _: u7 = 1; + let _: u9 = 1; + let _: u17 = 1; + + // >64-bit + let _: i65 = 1; + let _: i127 = 1; + let _: i128 = 1; + + let _: u65 = 1; + let _: u127 = 1; + let _: u128 = 1; +} \ No newline at end of file