Skip to content

Commit

Permalink
misc: 128 bit integer support
Browse files Browse the repository at this point in the history
  • Loading branch information
baszalmstra committed Apr 17, 2020
1 parent f0397f0 commit 940c908
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 61 deletions.
3 changes: 3 additions & 0 deletions crates/mun_codegen/src/ir/body.rs
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,9 @@ impl<'a, 'b, D: IrDatabase> BodyIrGenerator<'a, 'b, D> {
hir::IntBitness::X16 => context.i16_type().const_int(v.value as u64, has_sign),
hir::IntBitness::X32 => context.i32_type().const_int(v.value as u64, has_sign),
hir::IntBitness::X64 => context.i64_type().const_int(v.value as u64, has_sign),
hir::IntBitness::X128 => {
context.i128_type().const_int(v.value as u64, has_sign)
}
_ => unreachable!("unresolved bitness in code generation"),
};

Expand Down
46 changes: 25 additions & 21 deletions crates/mun_codegen/src/snapshots/test__literal_types.snap
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
source: crates/mun_codegen/src/test.rs
expression: "pub fn main(){\n let a = 123;\n let a = 123u8;\n let a = 123u16;\n let a = 123u32;\n let a = 123u64;\n let a = 123uint;\n let a = 1_000_000_u32;\n let a = 123i8;\n let a = 123i16;\n let a = 123i32;\n let a = 123i64;\n let a = 123int;\n let a = 1_000_000_i32;\n let a = 1_000_123.0e-2;\n let a = 1_000_123.0e-2f32;\n let a = 1_000_123.0e-2f64;\n let a = 1_000_123.0e-2float;\n}\n\npub fn add(a:u32) -> u32 {\n a + 12u32\n}"
expression: "pub fn main(){\n let a = 123;\n let a = 123u8;\n let a = 123u16;\n let a = 123u32;\n let a = 123u64;\n let a = 123u128;\n let a = 123uint;\n let a = 1_000_000_u32;\n let a = 123i8;\n let a = 123i16;\n let a = 123i32;\n let a = 123i64;\n let a = 123i128;\n let a = 123int;\n let a = 1_000_000_i32;\n let a = 1_000_123.0e-2;\n let a = 1_000_123.0e-2f32;\n let a = 1_000_123.0e-2f64;\n let a = 1_000_123.0e-2float;\n}\n\npub fn add(a:u32) -> u32 {\n a + 12u32\n}"
---
; == FILE IR =====================================
; ModuleID = 'main.mun'
Expand All @@ -12,18 +12,20 @@ source_filename = "main.mun"

define void @main() {
body:
%a16 = alloca double
%a18 = alloca double
%a17 = alloca double
%a16 = alloca float
%a15 = alloca double
%a14 = alloca float
%a13 = alloca double
%a12 = alloca i32
%a14 = alloca i32
%a13 = alloca i64
%a12 = alloca i128
%a11 = alloca i64
%a10 = alloca i64
%a9 = alloca i32
%a8 = alloca i16
%a7 = alloca i8
%a6 = alloca i32
%a5 = alloca i64
%a10 = alloca i32
%a9 = alloca i16
%a8 = alloca i8
%a7 = alloca i32
%a6 = alloca i64
%a5 = alloca i128
%a4 = alloca i64
%a3 = alloca i32
%a2 = alloca i16
Expand All @@ -34,18 +36,20 @@ body:
store i16 123, i16* %a2
store i32 123, i32* %a3
store i64 123, i64* %a4
store i64 123, i64* %a5
store i32 1000000, i32* %a6
store i8 123, i8* %a7
store i16 123, i16* %a8
store i32 123, i32* %a9
store i64 123, i64* %a10
store i128 123, i128* %a5
store i64 123, i64* %a6
store i32 1000000, i32* %a7
store i8 123, i8* %a8
store i16 123, i16* %a9
store i32 123, i32* %a10
store i64 123, i64* %a11
store i32 1000000, i32* %a12
store double 0x40C3889D70A3D70A, double* %a13
store float 0x40C3889D80000000, float* %a14
store i128 123, i128* %a12
store i64 123, i64* %a13
store i32 1000000, i32* %a14
store double 0x40C3889D70A3D70A, double* %a15
store double 0x40C3889D70A3D70A, double* %a16
store float 0x40C3889D80000000, float* %a16
store double 0x40C3889D70A3D70A, double* %a17
store double 0x40C3889D70A3D70A, double* %a18
ret void
}

Expand Down
46 changes: 25 additions & 21 deletions crates/mun_codegen/src/snapshots/test__literal_types_file_ir.snap
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
---
source: crates/mun_codegen/src/test.rs
expression: "fn main(){\n let a = 123;\n let a = 123u8;\n let a = 123u16;\n let a = 123u32;\n let a = 123u64;\n let a = 123uint;\n let a = 1_000_000_u32;\n let a = 123i8;\n let a = 123i16;\n let a = 123i32;\n let a = 123i64;\n let a = 123int;\n let a = 1_000_000_i32;\n let a = 1_000_123.0e-2;\n let a = 1_000_123.0e-2f32;\n let a = 1_000_123.0e-2f64;\n let a = 1_000_123.0e-2float;\n}\n\nfn add(a:u32): u32 {\n a + 12u32\n}"
expression: "fn main(){\n let a = 123;\n let a = 123u8;\n let a = 123u16;\n let a = 123u32;\n let a = 123u64;\n let a = 123u128;\n let a = 123uint;\n let a = 1_000_000_u32;\n let a = 123i8;\n let a = 123i16;\n let a = 123i32;\n let a = 123i64;\n let a = 123i128;\n let a = 123int;\n let a = 1_000_000_i32;\n let a = 1_000_123.0e-2;\n let a = 1_000_123.0e-2f32;\n let a = 1_000_123.0e-2f64;\n let a = 1_000_123.0e-2float;\n}\n\nfn add(a:u32) -> u32 {\n a + 12u32\n}"
---
; ModuleID = 'main.mun'
source_filename = "main.mun"

define void @main() {
body:
%a16 = alloca double
%a18 = alloca double
%a17 = alloca double
%a16 = alloca float
%a15 = alloca double
%a14 = alloca float
%a13 = alloca double
%a12 = alloca i32
%a14 = alloca i32
%a13 = alloca i64
%a12 = alloca i128
%a11 = alloca i64
%a10 = alloca i64
%a9 = alloca i32
%a8 = alloca i16
%a7 = alloca i8
%a6 = alloca i32
%a5 = alloca i64
%a10 = alloca i32
%a9 = alloca i16
%a8 = alloca i8
%a7 = alloca i32
%a6 = alloca i64
%a5 = alloca i128
%a4 = alloca i64
%a3 = alloca i32
%a2 = alloca i16
Expand All @@ -29,18 +31,20 @@ body:
store i16 123, i16* %a2
store i32 123, i32* %a3
store i64 123, i64* %a4
store i64 123, i64* %a5
store i32 1000000, i32* %a6
store i8 123, i8* %a7
store i16 123, i16* %a8
store i32 123, i32* %a9
store i64 123, i64* %a10
store i128 123, i128* %a5
store i64 123, i64* %a6
store i32 1000000, i32* %a7
store i8 123, i8* %a8
store i16 123, i16* %a9
store i32 123, i32* %a10
store i64 123, i64* %a11
store i32 1000000, i32* %a12
store double 0x40C3889D70A3D70A, double* %a13
store float 0x40C3889D80000000, float* %a14
store i128 123, i128* %a12
store i64 123, i64* %a13
store i32 1000000, i32* %a14
store double 0x40C3889D70A3D70A, double* %a15
store double 0x40C3889D70A3D70A, double* %a16
store float 0x40C3889D80000000, float* %a16
store double 0x40C3889D70A3D70A, double* %a17
store double 0x40C3889D70A3D70A, double* %a18
ret void
}

Expand Down
2 changes: 2 additions & 0 deletions crates/mun_codegen/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,14 @@ fn literal_types() {
let a = 123u16;
let a = 123u32;
let a = 123u64;
let a = 123u128;
let a = 123uint;
let a = 1_000_000_u32;
let a = 123i8;
let a = 123i16;
let a = 123i32;
let a = 123i64;
let a = 123i128;
let a = 123int;
let a = 1_000_000_i32;
let a = 1_000_123.0e-2;
Expand Down
22 changes: 22 additions & 0 deletions crates/mun_hir/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1139,6 +1139,17 @@ mod test {
)
);

assert_eq!(
integer_lit("1234", Some("i128")),
(
Literal::Int(LiteralInt {
kind: LiteralIntKind::Suffixed(BuiltinInt::I128),
value: 1234
}),
vec![]
)
);

assert_eq!(
integer_lit("1234", Some("isize")),
(
Expand Down Expand Up @@ -1205,6 +1216,17 @@ mod test {
)
);

assert_eq!(
integer_lit("1234", Some("u128")),
(
Literal::Int(LiteralInt {
kind: LiteralIntKind::Suffixed(BuiltinInt::U128),
value: 1234
}),
vec![]
)
);

assert_eq!(
integer_lit("1234", Some("usize")),
(
Expand Down
40 changes: 21 additions & 19 deletions crates/mun_hir/src/ty/snapshots/tests__infer_suffix_literals.snap
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
---
source: crates/mun_hir/src/ty/tests.rs
expression: "fn main(){\n 123;\n 123u8;\n 123u16;\n 123u32;\n 123u64;\n 123uint;\n 1_000_000_u32;\n 123i8;\n 123i16;\n 123i32;\n 123i64;\n 123int;\n 1_000_000_i32;\n 1_000_123.0e-2;\n 1_000_123.0e-2f32;\n 1_000_123.0e-2f64;\n 1_000_123.0e-2float;\n}\n\nfn add(a:u32) -> u32 {\n a + 12u32\n}"
expression: "fn main(){\n 123;\n 123u8;\n 123u16;\n 123u32;\n 123u64;\n 123u128;\n 123uint;\n 1_000_000_u32;\n 123i8;\n 123i16;\n 123i32;\n 123i64;\n 123i128;\n 123int;\n 1_000_000_i32;\n 1_000_123.0e-2;\n 1_000_123.0e-2f32;\n 1_000_123.0e-2f64;\n 1_000_123.0e-2float;\n}\n\nfn add(a:u32) -> u32 {\n a + 12u32\n}"
---
[9; 269) '{ ...oat; }': nothing
[9; 295) '{ ...oat; }': nothing
[15; 18) '123': int
[24; 29) '123u8': u8
[35; 41) '123u16': u16
[47; 53) '123u32': u32
[59; 65) '123u64': u64
[71; 78) '123uint': uint
[84; 97) '1_000_000_u32': u32
[103; 108) '123i8': i8
[114; 120) '123i16': i16
[126; 132) '123i32': i32
[138; 144) '123i64': i64
[150; 156) '123int': int
[162; 175) '1_000_000_i32': i32
[181; 195) '1_000_123.0e-2': float
[201; 218) '1_000_...e-2f32': f32
[224; 241) '1_000_...e-2f64': f64
[247; 266) '1_000_...2float': float
[278; 279) 'a': u32
[292; 309) '{ ...2u32 }': u32
[298; 299) 'a': u32
[298; 307) 'a + 12u32': u32
[302; 307) '12u32': u32
[71; 78) '123u128': u128
[84; 91) '123uint': uint
[97; 110) '1_000_000_u32': u32
[116; 121) '123i8': i8
[127; 133) '123i16': i16
[139; 145) '123i32': i32
[151; 157) '123i64': i64
[163; 170) '123i128': i128
[176; 182) '123int': int
[188; 201) '1_000_000_i32': i32
[207; 221) '1_000_123.0e-2': float
[227; 244) '1_000_...e-2f32': f32
[250; 267) '1_000_...e-2f64': f64
[273; 292) '1_000_...2float': float
[304; 305) 'a': u32
[318; 335) '{ ...2u32 }': u32
[324; 325) 'a': u32
[324; 333) 'a + 12u32': u32
[328; 333) '12u32': u32
2 changes: 2 additions & 0 deletions crates/mun_hir/src/ty/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ fn infer_suffix_literals() {
123u16;
123u32;
123u64;
123u128;
123uint;
1_000_000_u32;
123i8;
123i16;
123i32;
123i64;
123i128;
123int;
1_000_000_i32;
1_000_123.0e-2;
Expand Down

0 comments on commit 940c908

Please sign in to comment.