mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Remove hack in lb_addr_store
This commit is contained in:
+33
-12
@@ -429,13 +429,15 @@ void lb_addr_store(lbProcedure *p, lbAddr addr, lbValue value) {
|
|||||||
GB_ASSERT(value.value != nullptr);
|
GB_ASSERT(value.value != nullptr);
|
||||||
value = lb_emit_conv(p, value, lb_addr_type(addr));
|
value = lb_emit_conv(p, value, lb_addr_type(addr));
|
||||||
|
|
||||||
if (lb_is_const_or_global(value)) {
|
// if (lb_is_const_or_global(value)) {
|
||||||
// NOTE(bill): Just bypass the actual storage and set the initializer
|
// // NOTE(bill): Just bypass the actual storage and set the initializer
|
||||||
if (LLVMGetValueKind(addr.addr.value) == LLVMGlobalVariableValueKind) {
|
// if (LLVMGetValueKind(addr.addr.value) == LLVMGlobalVariableValueKind) {
|
||||||
LLVMSetInitializer(addr.addr.value, value.value);
|
// LLVMValueRef dst = addr.addr.value;
|
||||||
return;
|
// LLVMValueRef src = value.value;
|
||||||
}
|
// LLVMSetInitializer(dst, src);
|
||||||
}
|
// return;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
lb_emit_store(p, addr.addr, value);
|
lb_emit_store(p, addr.addr, value);
|
||||||
}
|
}
|
||||||
@@ -1148,11 +1150,19 @@ LLVMTypeRef lb_type_internal(lbModule *m, Type *type) {
|
|||||||
case Type_Pointer:
|
case Type_Pointer:
|
||||||
return LLVMPointerType(lb_type(m, type_deref(type)), 0);
|
return LLVMPointerType(lb_type(m, type_deref(type)), 0);
|
||||||
|
|
||||||
case Type_Array:
|
case Type_Array: {
|
||||||
return LLVMArrayType(lb_type(m, type->Array.elem), cast(unsigned)type->Array.count);
|
m->internal_type_level -= 1;
|
||||||
|
LLVMTypeRef t = LLVMArrayType(lb_type(m, type->Array.elem), cast(unsigned)type->Array.count);
|
||||||
|
m->internal_type_level += 1;
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
case Type_EnumeratedArray:
|
case Type_EnumeratedArray: {
|
||||||
return LLVMArrayType(lb_type(m, type->EnumeratedArray.elem), cast(unsigned)type->EnumeratedArray.count);
|
m->internal_type_level -= 1;
|
||||||
|
LLVMTypeRef t = LLVMArrayType(lb_type(m, type->EnumeratedArray.elem), cast(unsigned)type->EnumeratedArray.count);
|
||||||
|
m->internal_type_level += 1;
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
case Type_Slice:
|
case Type_Slice:
|
||||||
{
|
{
|
||||||
@@ -8519,7 +8529,18 @@ bool lb_is_const(lbValue value) {
|
|||||||
|
|
||||||
|
|
||||||
bool lb_is_const_or_global(lbValue value) {
|
bool lb_is_const_or_global(lbValue value) {
|
||||||
return (LLVMGetValueKind(value.value) == LLVMGlobalVariableValueKind) || lb_is_const(value);
|
if (lb_is_const(value)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (LLVMGetValueKind(value.value) == LLVMGlobalVariableValueKind) {
|
||||||
|
LLVMTypeRef t = LLVMGetElementType(LLVMTypeOf(value.value));
|
||||||
|
if (!lb_is_type_kind(t, LLVMPointerTypeKind)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
LLVMTypeRef elem = LLVMGetElementType(t);
|
||||||
|
return lb_is_type_kind(elem, LLVMFunctionTypeKind);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user