Fix UserPointer being completely monkeypatched, found the issue

This commit is contained in:
Sofia 2025-07-21 20:13:15 +03:00
parent 10d62eb1f7
commit 836a532d8d
4 changed files with 12 additions and 15 deletions

View File

@ -1075,7 +1075,7 @@ impl ConstValue {
ConstValue::U32(val) => LLVMConstInt(t, *val as u64, 1), ConstValue::U32(val) => LLVMConstInt(t, *val as u64, 1),
ConstValue::U64(val) => LLVMConstInt(t, *val as u64, 1), ConstValue::U64(val) => LLVMConstInt(t, *val as u64, 1),
ConstValue::U128(val) => LLVMConstInt(t, *val as u64, 1), ConstValue::U128(val) => LLVMConstInt(t, *val as u64, 1),
ConstValue::StringPtr(val) => LLVMBuildGlobalString( ConstValue::Str(val) => LLVMBuildGlobalString(
module.builder_ref, module.builder_ref,
into_cstring(val).as_ptr(), into_cstring(val).as_ptr(),
c"string".as_ptr(), c"string".as_ptr(),

View File

@ -439,7 +439,7 @@ pub enum ConstValue {
U64(u64), U64(u64),
U128(u128), U128(u128),
Bool(bool), Bool(bool),
StringPtr(String), Str(String),
F16(f32), F16(f32),
F32B(f32), F32B(f32),
F32(f32), F32(f32),
@ -505,12 +505,12 @@ impl InstructionValue {
ArrayAlloca(ty, _) => Ok(Type::Ptr(Box::new(ty.clone()))), ArrayAlloca(ty, _) => Ok(Type::Ptr(Box::new(ty.clone()))),
GetElemPtr(instr, _) => { GetElemPtr(instr, _) => {
let instr_ty = instr.get_type(builder)?; let instr_ty = instr.get_type(builder)?;
let Type::Ptr(inner_ty) = instr_ty else { let Type::Ptr(inner_ty) = &instr_ty else {
panic!("GetStructElemPtr on non-pointer! ({:?})", &instr_ty) panic!("GetStructElemPtr on non-pointer! ({:?})", &instr_ty)
}; };
match *inner_ty { match *inner_ty.clone() {
Type::Array(elem_ty, _) => Ok(Type::Ptr(Box::new(*elem_ty.clone()))), Type::Array(elem_ty, _) => Ok(Type::Ptr(Box::new(*elem_ty.clone()))),
_ => Ok(*inner_ty), _ => Ok(instr_ty),
} }
} }
GetStructElemPtr(instr, idx) => { GetStructElemPtr(instr, idx) => {
@ -562,7 +562,7 @@ impl ConstValue {
ConstValue::U32(_) => U32, ConstValue::U32(_) => U32,
ConstValue::U64(_) => U64, ConstValue::U64(_) => U64,
ConstValue::U128(_) => U128, ConstValue::U128(_) => U128,
ConstValue::StringPtr(_) => Ptr(Box::new(I8)), ConstValue::Str(_) => Type::Ptr(Box::new(I8)),
ConstValue::Bool(_) => Bool, ConstValue::Bool(_) => Bool,
ConstValue::F16(_) => F16, ConstValue::F16(_) => F16,
ConstValue::F32B(_) => F32B, ConstValue::F32B(_) => F32B,

View File

@ -490,7 +490,7 @@ impl mir::Statement {
.block .block
.build( .build(
name, name,
Instr::Alloca(ty.get_type(scope.type_values, scope.types)), Instr::Alloca(value.1.get_type(scope.type_values, scope.types)),
) )
.unwrap() .unwrap()
.maybe_location(&mut scope.block, location); .maybe_location(&mut scope.block, location);
@ -1167,7 +1167,7 @@ impl mir::Literal {
mir::Literal::U64(val) => ConstValue::U64(val), mir::Literal::U64(val) => ConstValue::U64(val),
mir::Literal::U128(val) => ConstValue::U128(val), mir::Literal::U128(val) => ConstValue::U128(val),
mir::Literal::Bool(val) => ConstValue::Bool(val), mir::Literal::Bool(val) => ConstValue::Bool(val),
mir::Literal::String(val) => ConstValue::StringPtr(val.clone()), mir::Literal::String(val) => ConstValue::Str(val.clone()),
mir::Literal::Vague(VagueLiteral::Number(val)) => ConstValue::I32(val as i32), mir::Literal::Vague(VagueLiteral::Number(val)) => ConstValue::I32(val as i32),
mir::Literal::Vague(VagueLiteral::Decimal(val)) => ConstValue::F32(val as f32), mir::Literal::Vague(VagueLiteral::Decimal(val)) => ConstValue::F32(val as f32),
mir::Literal::F16(val) => ConstValue::F16(val), mir::Literal::F16(val) => ConstValue::F16(val),
@ -1216,9 +1216,9 @@ impl TypeKind {
let type_val = type_vals.get(n).unwrap().clone(); let type_val = type_vals.get(n).unwrap().clone();
Type::CustomType(type_val) Type::CustomType(type_val)
} }
TypeKind::UserPtr(type_kind) => Type::Ptr(Box::new(Type::Ptr(Box::new( TypeKind::UserPtr(type_kind) => {
type_kind.get_type(type_vals, typedefs), Type::Ptr(Box::new(type_kind.get_type(type_vals, typedefs)))
)))), }
TypeKind::CodegenPtr(type_kind) => { TypeKind::CodegenPtr(type_kind) => {
Type::Ptr(Box::new(type_kind.get_type(type_vals, typedefs))) Type::Ptr(Box::new(type_kind.get_type(type_vals, typedefs)))
} }

View File

@ -1,10 +1,7 @@
import std::print; import std::print;
fn main() -> i32 { fn main() -> i32 {
let hello = "hello world"; print("hello world");
print(hello);
return 0; return 0;
} }