This commit is contained in:
nub31
2025-06-15 01:17:25 +02:00
parent bff93d8963
commit bdce45e1c5
2 changed files with 12 additions and 12 deletions

View File

@@ -1,12 +1,5 @@
namespace main namespace main
struct Human {
name: string
// print_age: func() = func() {
// c::puts("test3")
// }
}
export func main(args: [][]u8): i64 { export func main(args: [][]u8): i64 {
let x: []u8 let x: []u8

View File

@@ -694,7 +694,7 @@ public static class QBEGenerator
{ {
AddressOfNode addressOf => GenerateAddressOf(addressOf), AddressOfNode addressOf => GenerateAddressOf(addressOf),
AnonymousFuncNode anonymousFunc => GenerateAnonymousFunc(anonymousFunc), AnonymousFuncNode anonymousFunc => GenerateAnonymousFunc(anonymousFunc),
ArrayIndexAccessNode arrayIndex => GenerateArrayIndexAccessNode(arrayIndex), ArrayIndexAccessNode arrayIndex => GenerateArrayIndexAccess(arrayIndex),
ArrayInitializerNode arrayInitializer => GenerateArrayInitializer(arrayInitializer), ArrayInitializerNode arrayInitializer => GenerateArrayInitializer(arrayInitializer),
BinaryExpressionNode binaryExpression => GenerateBinaryExpression(binaryExpression), BinaryExpressionNode binaryExpression => GenerateBinaryExpression(binaryExpression),
DereferenceNode dereference => GenerateDereference(dereference), DereferenceNode dereference => GenerateDereference(dereference),
@@ -738,11 +738,18 @@ public static class QBEGenerator
return resultPointerName; return resultPointerName;
} }
private static string GenerateArrayIndexAccessNode(ArrayIndexAccessNode arrayIndexAccess) private static string GenerateArrayIndexAccess(ArrayIndexAccessNode arrayIndexAccess)
{ {
var pointerName = GenerateArrayIndexPointer(arrayIndexAccess); var pointerName = GenerateArrayIndexPointer(arrayIndexAccess);
if (IsPointerType(arrayIndexAccess.Type)) var elementType = arrayIndexAccess.Array.Type switch
{
NubArrayType arrayType => arrayType.ElementType,
NubFixedArrayType fixedArrayType => fixedArrayType.ElementType,
_ => throw new ArgumentOutOfRangeException()
};
if (SizeOf(elementType) > 8)
{ {
return pointerName; return pointerName;
} }
@@ -1222,7 +1229,7 @@ public static class QBEGenerator
{ {
var pointer = GenerateMemberAccessPointer(memberAccess); var pointer = GenerateMemberAccessPointer(memberAccess);
if (IsPointerType(memberAccess.Type)) if (SizeOf(memberAccess.Type) > 8)
{ {
return pointer; return pointer;
} }
@@ -1306,7 +1313,7 @@ public static class QBEGenerator
private static void GenerateCopy(NubType type, string value, string destinationPointer) private static void GenerateCopy(NubType type, string value, string destinationPointer)
{ {
if (IsPointerType(type)) if (SizeOf(type) > 8)
{ {
_builder.AppendLine($" blit {value}, {destinationPointer}, {SizeOf(type)}"); _builder.AppendLine($" blit {value}, {destinationPointer}, {SizeOf(type)}");
} }