This commit is contained in:
nub31
2025-06-14 18:34:33 +02:00
parent 9d74a3716d
commit d57d95ec8e

View File

@@ -55,7 +55,7 @@ public static class QBEGenerator
foreach (var funcDef in _compilationUnit.Definitions.OfType<LocalFuncDefinitionNode>()) foreach (var funcDef in _compilationUnit.Definitions.OfType<LocalFuncDefinitionNode>())
{ {
GenerateFuncDefinition(FuncName(funcDef), funcDef.Parameters, funcDef.ReturnType, funcDef.Body, funcDef.Exported); GenerateFuncDefinition(FuncName(funcDef), funcDef.Parameters, funcDef.ReturnType, funcDef.Body, funcDef.Exported);
_builder.AppendLine(); _builder.AppendLine();
} }
@@ -193,26 +193,14 @@ public static class QBEGenerator
{ {
case NubPrimitiveType primitiveType: case NubPrimitiveType primitiveType:
{ {
switch (primitiveType.Kind) return primitiveType.Kind switch
{ {
case PrimitiveTypeKind.I64: PrimitiveTypeKind.I64 or PrimitiveTypeKind.U64 or PrimitiveTypeKind.F64 => 8,
case PrimitiveTypeKind.U64: PrimitiveTypeKind.I32 or PrimitiveTypeKind.U32 or PrimitiveTypeKind.F32 or PrimitiveTypeKind.Bool => 4,
case PrimitiveTypeKind.F64: PrimitiveTypeKind.I16 or PrimitiveTypeKind.U16 => 2,
return 8; PrimitiveTypeKind.I8 or PrimitiveTypeKind.U8 => 1,
case PrimitiveTypeKind.I32: _ => throw new ArgumentOutOfRangeException()
case PrimitiveTypeKind.U32: };
case PrimitiveTypeKind.F32:
return 4;
case PrimitiveTypeKind.I16:
case PrimitiveTypeKind.U16:
return 2;
case PrimitiveTypeKind.I8:
case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.Bool:
return 1;
default:
throw new ArgumentOutOfRangeException();
}
} }
case NubStructType nubStructType: case NubStructType nubStructType:
{ {
@@ -247,28 +235,16 @@ public static class QBEGenerator
{ {
case NubPrimitiveType primitiveType: case NubPrimitiveType primitiveType:
{ {
switch (primitiveType.Kind) return primitiveType.Kind switch
{ {
case PrimitiveTypeKind.I64: PrimitiveTypeKind.I64 or PrimitiveTypeKind.U64 => 8,
case PrimitiveTypeKind.U64: PrimitiveTypeKind.I32 or PrimitiveTypeKind.U32 or PrimitiveTypeKind.Bool => 4,
return 8; PrimitiveTypeKind.I16 or PrimitiveTypeKind.U16 => 2,
case PrimitiveTypeKind.I32: PrimitiveTypeKind.I8 or PrimitiveTypeKind.U8 => 1,
case PrimitiveTypeKind.U32: PrimitiveTypeKind.F64 => 8,
return 4; PrimitiveTypeKind.F32 => 4,
case PrimitiveTypeKind.I16: _ => throw new ArgumentOutOfRangeException()
case PrimitiveTypeKind.U16: };
return 2;
case PrimitiveTypeKind.I8:
case PrimitiveTypeKind.U8:
case PrimitiveTypeKind.Bool:
return 1;
case PrimitiveTypeKind.F64:
return 8;
case PrimitiveTypeKind.F32:
return 4;
default:
throw new ArgumentOutOfRangeException();
}
} }
case NubStructType nubStructType: case NubStructType nubStructType:
{ {
@@ -298,8 +274,7 @@ public static class QBEGenerator
} }
case NubFixedArrayType nubFixedArrayType: case NubFixedArrayType nubFixedArrayType:
{ {
int elementSize = SizeOf(nubFixedArrayType.ElementType); return SizeOf(nubFixedArrayType.ElementType) * nubFixedArrayType.Capacity + 8;
return elementSize * nubFixedArrayType.Capacity + 8;
} }
default: default:
{ {
@@ -493,6 +468,7 @@ public static class QBEGenerator
}; };
_builder.Append(qbeType + ", "); _builder.Append(qbeType + ", ");
} }
_builder.AppendLine("}"); _builder.AppendLine("}");
} }
@@ -875,6 +851,7 @@ public static class QBEGenerator
{ {
throw new NotSupportedException("There is nothing to address in another namespace"); throw new NotSupportedException("There is nothing to address in another namespace");
} }
return _variables.Single(x => x.Name == identifier.Name).Pointer; return _variables.Single(x => x.Name == identifier.Name).Pointer;
case MemberAccessNode memberAccess: case MemberAccessNode memberAccess:
return GenerateMemberAccessPointer(memberAccess); return GenerateMemberAccessPointer(memberAccess);