From e5f6b37210e3048291519415fb66c1a0548a1ced Mon Sep 17 00:00:00 2001 From: sofia Date: Tue, 22 Jul 2025 21:02:14 +0300 Subject: [PATCH 1/4] Fix std --- reid/lib/std.reid | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/reid/lib/std.reid b/reid/lib/std.reid index 1fed629..21e7158 100644 --- a/reid/lib/std.reid +++ b/reid/lib/std.reid @@ -94,5 +94,13 @@ fn str_length(string: *char, position: u32) -> u32 { pub fn add_num_to_str(string: &mut String, num: u64) { if num == 0 { add_char(string, '0'); } - else if num == 1 { add_char(string, '1'); } + else { if num == 1 { add_char(string, '1'); } + else { if num == 2 { add_char(string, '2'); } + else { if num == 3 { add_char(string, '3'); } + else { if num == 4 { add_char(string, '4'); } + else { if num == 5 { add_char(string, '5'); } + else { if num == 6 { add_char(string, '6'); } + else { if num == 7 { add_char(string, '7'); } + else { if num == 8 { add_char(string, '8'); } + else { if num == 9 { add_char(string, '9'); } } } } } } } } } } } \ No newline at end of file From 682295b04a5087b37da9cf3f3c4fdd1b7c992166 Mon Sep 17 00:00:00 2001 From: sofia Date: Tue, 22 Jul 2025 21:05:52 +0300 Subject: [PATCH 2/4] Fix casting from the same size of integer --- reid-llvm-lib/src/lib.rs | 11 +++++++---- reid/src/codegen.rs | 3 ++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/reid-llvm-lib/src/lib.rs b/reid-llvm-lib/src/lib.rs index c616225..c8eadc2 100644 --- a/reid-llvm-lib/src/lib.rs +++ b/reid-llvm-lib/src/lib.rs @@ -629,14 +629,17 @@ impl Type { } (I32 | U32, I16 | U16 | I8 | U8) => Some(Instr::Trunc(value, other.clone())), (I16 | U16, I8 | U8) => Some(Instr::Trunc(value, other.clone())), - (U8 | I8, U16 | I16 | U32 | I32 | U64 | I64 | U128 | I128) => { + (U8 | I8, U8 | I8 | U16 | I16 | U32 | I32 | U64 | I64 | U128 | I128) => { Some(Instr::ZExt(value, other.clone())) } - (U16 | I16, U32 | I32 | U64 | I64 | U128 | I128) => { + (U16 | I16, U16 | I16 | U32 | I32 | U64 | I64 | U128 | I128) => { Some(Instr::ZExt(value, other.clone())) } - (U32 | I32, U64 | I64 | U128 | I128) => Some(Instr::ZExt(value, other.clone())), - (U64 | I64, U128 | I128) => Some(Instr::ZExt(value, other.clone())), + (U32 | I32, U32 | I32 | U64 | I64 | U128 | I128) => { + Some(Instr::ZExt(value, other.clone())) + } + (U64 | I64, U64 | I64 | U128 | I128) => Some(Instr::ZExt(value, other.clone())), + (U128 | I128, U128 | I128) => Some(Instr::ZExt(value, other.clone())), (U8 | U16 | U32 | U64 | U128, F16 | F32 | F32B | F64 | F80 | F128 | F128PPC) => { Some(Instr::UIToFP(value, other.clone())) } diff --git a/reid/src/codegen.rs b/reid/src/codegen.rs index 6a7c10d..4f1f66f 100644 --- a/reid/src/codegen.rs +++ b/reid/src/codegen.rs @@ -1085,7 +1085,8 @@ impl mir::Expression { }, (TypeKind::UserPtr(_), TypeKind::UserPtr(_)) | (TypeKind::Char, TypeKind::U8) - | (TypeKind::U8, TypeKind::Char) => Some(StackValue( + | (TypeKind::U8, TypeKind::Char) + | (TypeKind::U8, TypeKind::I8) => Some(StackValue( val.0.derive( scope .block From 04ecc9440349bbe76da3573ee2bf52c4f7456766 Mon Sep 17 00:00:00 2001 From: sofia Date: Tue, 22 Jul 2025 21:32:43 +0300 Subject: [PATCH 3/4] Commit to git --- reid/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reid/Cargo.toml b/reid/Cargo.toml index f78147a..bde3ded 100644 --- a/reid/Cargo.toml +++ b/reid/Cargo.toml @@ -14,6 +14,6 @@ color = ["colored"] [dependencies] ## Make it easier to generate errors thiserror = "1.0.44" -reid-lib = { path = "../reid-llvm-lib" } +reid-lib = { path = "../reid-llvm-lib", version = "0.1.0", registry = "gitea-teascade" } colored = {version = "3.0.0", optional = true} \ No newline at end of file From 59c8b641cadc48b6e7a21e632329df295e1d13a6 Mon Sep 17 00:00:00 2001 From: sofia Date: Tue, 22 Jul 2025 21:38:24 +0300 Subject: [PATCH 4/4] Move cli to main, update version --- reid/Cargo.toml | 2 +- reid/src/main.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 reid/src/main.rs diff --git a/reid/Cargo.toml b/reid/Cargo.toml index bde3ded..5859397 100644 --- a/reid/Cargo.toml +++ b/reid/Cargo.toml @@ -14,6 +14,6 @@ color = ["colored"] [dependencies] ## Make it easier to generate errors thiserror = "1.0.44" -reid-lib = { path = "../reid-llvm-lib", version = "0.1.0", registry = "gitea-teascade" } +reid-lib = { path = "../reid-llvm-lib", version = "0.1.0"} colored = {version = "3.0.0", optional = true} \ No newline at end of file diff --git a/reid/src/main.rs b/reid/src/main.rs new file mode 100644 index 0000000..9d7a9d8 --- /dev/null +++ b/reid/src/main.rs @@ -0,0 +1,46 @@ +use std::{env, fs, path::PathBuf}; + +use reid::compile_simple; +use reid_lib::compile::CompileOutput; + +fn main() -> Result<(), std::io::Error> { + let args: Vec = env::args().collect(); + if let Some(filename) = args.get(1) { + let path = PathBuf::from(filename).canonicalize().unwrap(); + let parent = path.with_extension(""); + let llvm_ir_path = parent.with_extension("ll"); + let object_path = parent.with_extension("o"); + let asm_path = parent.with_extension("asm"); + + let before = std::time::SystemTime::now(); + + let text = fs::read_to_string(&path)?; + match compile_simple(&text, PathBuf::from(&path)) { + Ok(CompileOutput { + triple, + assembly, + obj_buffer, + llvm_ir, + }) => { + println!("{}", llvm_ir); + + let after = std::time::SystemTime::now(); + println!("Compiled with triple: {}\n", &triple); + fs::write(&llvm_ir_path, &llvm_ir).expect("Could not write LLVM IR -file!"); + println!("Output LLVM IR to {:?}", llvm_ir_path); + fs::write(&asm_path, &assembly).expect("Could not write Assembly-file!"); + println!("Output Assembly to {:?}", asm_path); + fs::write(&object_path, &obj_buffer).expect("Could not write Object-file!"); + println!("Output Object-file to {:?}\n", object_path); + println!( + "Compilation took: {:.2}ms\n", + (after.duration_since(before).unwrap().as_micros() as f32) / 1000. + ); + } + Err(e) => panic!("{}", e), + }; + } else { + println!("Please input compiled file path!") + } + Ok(()) +}