diff --git a/Cesium.CodeGen.Tests/CodeGenPointersTests.cs b/Cesium.CodeGen.Tests/CodeGenPointersTests.cs index 68248fcd..038dc067 100644 --- a/Cesium.CodeGen.Tests/CodeGenPointersTests.cs +++ b/Cesium.CodeGen.Tests/CodeGenPointersTests.cs @@ -39,6 +39,12 @@ private static Task DoTest(string source) [Fact] public Task IndexOverPointer() => DoTest("void foo (int *x) { int y = x[1]; }"); + [Fact] + public Task AssignToPointer() => DoTest(@" +void foo_int (int *x) { *x = 0; } +void foo_uint64 (unsigned long long *x) { *x = 0; } +"); + [Fact] public Task PointerToPointer() => DoTest("void foo (int **x) { int y = *x[1]; }"); diff --git a/Cesium.CodeGen.Tests/verified/CodeGenPointersTests.AssignToPointer.verified.txt b/Cesium.CodeGen.Tests/verified/CodeGenPointersTests.AssignToPointer.verified.txt new file mode 100644 index 00000000..f33817cd --- /dev/null +++ b/Cesium.CodeGen.Tests/verified/CodeGenPointersTests.AssignToPointer.verified.txt @@ -0,0 +1,11 @@ +System.Void ::foo_int(System.Int32* x) + IL_0000: ldarg.0 + IL_0001: ldc.i4.0 + IL_0002: stind.i4 + IL_0003: ret + +System.Void ::foo_uint64(System.UInt64* x) + IL_0000: ldarg.0 + IL_0001: ldc.i4.0 + IL_0002: stind.i8 + IL_0003: ret diff --git a/Cesium.CodeGen/Ir/Types/PrimitiveType.cs b/Cesium.CodeGen/Ir/Types/PrimitiveType.cs index 6521199c..54944c67 100644 --- a/Cesium.CodeGen/Ir/Types/PrimitiveType.cs +++ b/Cesium.CodeGen/Ir/Types/PrimitiveType.cs @@ -198,6 +198,8 @@ internal static class PrimitiveTypeInfo { PrimitiveTypeKind.Float, (OpCodes.Ldind_R4, OpCodes.Stind_R4) }, { PrimitiveTypeKind.Long, (OpCodes.Ldind_I8, OpCodes.Stind_I8) }, { PrimitiveTypeKind.UnsignedLong, (OpCodes.Ldind_I8, OpCodes.Stind_I8) }, + { PrimitiveTypeKind.LongLong, (OpCodes.Ldind_I8, OpCodes.Stind_I8) }, + { PrimitiveTypeKind.UnsignedLongLong, (OpCodes.Ldind_I8, OpCodes.Stind_I8) }, { PrimitiveTypeKind.Double, (OpCodes.Ldind_R8, OpCodes.Stind_R8) }, { PrimitiveTypeKind.Bool, (OpCodes.Ldind_I1, OpCodes.Stind_I1) }, };