[Interop] Fix assignment of nulls to pointer fields
This commit is contained in:
committed by
Sergey Bogolepov
parent
07177396ac
commit
9b5513ca37
+7
-3
@@ -194,9 +194,13 @@ private fun InteropCallContext.convertCPointerToNativePtr(cPointer: IrExpression
|
||||
}
|
||||
|
||||
|
||||
private fun InteropCallContext.writePointerToMemory(nativePtr: IrExpression, value: IrExpression): IrExpression {
|
||||
private fun InteropCallContext.writePointerToMemory(
|
||||
nativePtr: IrExpression,
|
||||
value: IrExpression,
|
||||
pointerType: IrType
|
||||
): IrExpression {
|
||||
val valueToWrite = when {
|
||||
value.type.isCPointer() -> convertCPointerToNativePtr(value)
|
||||
pointerType.isCPointer() -> convertCPointerToNativePtr(value)
|
||||
else -> error("Unsupported pointer type")
|
||||
}
|
||||
return writeValueToMemory(nativePtr, valueToWrite)
|
||||
@@ -284,7 +288,7 @@ private fun InteropCallContext.generateMemberAtAccess(callSite: IrCall): IrExpre
|
||||
when {
|
||||
type.isCEnumType() -> writeEnumValueToMemory(fieldPointer, value)
|
||||
type.isStoredInMemoryDirectly() -> writeValueToMemory(fieldPointer, value)
|
||||
type.isCPointer() -> writePointerToMemory(fieldPointer, value)
|
||||
type.isCPointer() -> writePointerToMemory(fieldPointer, value, type)
|
||||
else -> error("Cannot set field of type ${type.getClass()?.name}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,9 @@ fun main() {
|
||||
assertEquals(next, null)
|
||||
next = this.ptr
|
||||
assertEquals(next, this.ptr)
|
||||
// Check null pointer because it has Nothing? type.
|
||||
next = null
|
||||
assertEquals(next, null)
|
||||
|
||||
assertEquals(vec4f, vectorOf(1.0f, 1.0f, 1.0f, 1.0f))
|
||||
vec4f = vectorOf(0.0f, 0.0f, 0.0f, 0.0f)
|
||||
|
||||
Reference in New Issue
Block a user