From 1924035f561c6023f8711a46430d35a679b80952 Mon Sep 17 00:00:00 2001 From: nub31 Date: Mon, 2 Jun 2025 22:01:06 +0200 Subject: [PATCH] Simplify labels/vars/funcs --- .../Nub.Lang/Frontend/Generation/Generator.cs | 545 +++++++++--------- 1 file changed, 272 insertions(+), 273 deletions(-) diff --git a/src/lang/Nub.Lang/Frontend/Generation/Generator.cs b/src/lang/Nub.Lang/Frontend/Generation/Generator.cs index a70e9c0..672aef7 100644 --- a/src/lang/Nub.Lang/Frontend/Generation/Generator.cs +++ b/src/lang/Nub.Lang/Frontend/Generation/Generator.cs @@ -50,12 +50,12 @@ public class Generator switch (funcSignature) { case ExternFuncDefinitionNode externFuncDefinitionNode: - _funcNames[funcSignature] = externFuncDefinitionNode.Name; + _funcNames[funcSignature] = "$" + externFuncDefinitionNode.Name; break; case LocalFuncDefinitionNode localFuncDefinitionNode: if (localFuncDefinitionNode.Exported) { - _funcNames[funcSignature] = localFuncDefinitionNode.Name; + _funcNames[funcSignature] = "$" + localFuncDefinitionNode.Name; } else { @@ -336,7 +336,6 @@ public class Generator _builder.Append("l "); } - _builder.Append('$'); _builder.Append(_funcNames[node]); var parameterStrings = node.Parameters.Select(parameter => parameter.Variadic ? "..." : $"{QBEType(parameter.Type, TypeContext.FuncDef)} %{parameter.Name}"); @@ -352,29 +351,29 @@ public class Generator { case "sb": parameterName = GenVarName(); - _builder.AppendLine($" %{parameterName} =w extsb %{parameter.Name}"); + _builder.AppendLine($" {parameterName} =w extsb %{parameter.Name}"); break; case "ub": parameterName = GenVarName(); - _builder.AppendLine($" %{parameterName} =w extub %{parameter.Name}"); + _builder.AppendLine($" {parameterName} =w extub %{parameter.Name}"); break; case "sh": parameterName = GenVarName(); - _builder.AppendLine($" %{parameterName} =w extsh %{parameter.Name}"); + _builder.AppendLine($" {parameterName} =w extsh %{parameter.Name}"); break; case "uh": parameterName = GenVarName(); - _builder.AppendLine($" %{parameterName} =w extuh %{parameter.Name}"); + _builder.AppendLine($" {parameterName} =w extuh %{parameter.Name}"); break; } var pointerName = GenVarName(); - _builder.AppendLine($" %{pointerName} {QBEAssign(parameter.Type)} alloc8 {QbeTypeSize(parameter.Type)}"); - _builder.AppendLine($" storel %{parameterName}, %{pointerName}"); + _builder.AppendLine($" {pointerName} {QBEAssign(parameter.Type)} alloc8 {QbeTypeSize(parameter.Type)}"); + _builder.AppendLine($" storel %{parameterName}, {pointerName}"); _variables[parameter.Name] = new Variable { - Pointer = $"%{pointerName}", + Pointer = $"{pointerName}", Type = parameter.Type }; } @@ -462,21 +461,21 @@ public class Generator var value = GenerateExpression(arrayIndexAssignment.Value); var startName = GenVarName(); - _builder.AppendLine($" %{startName} =l add {array}, 8"); + _builder.AppendLine($" {startName} =l add {array}, 8"); var adjustedIndex = GenVarName(); - _builder.AppendLine($" %{adjustedIndex} =l mul {index}, {QbeTypeSize(arrayType.BaseType)}"); + _builder.AppendLine($" {adjustedIndex} =l mul {index}, {QbeTypeSize(arrayType.BaseType)}"); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add %{startName}, %{adjustedIndex}"); + _builder.AppendLine($" {offsetName} =l add {startName}, {adjustedIndex}"); if (IsLargeType(arrayType.BaseType)) { - _builder.AppendLine($" blit {value}, %{offsetName}, {QbeTypeSize(arrayType.BaseType)}"); + _builder.AppendLine($" blit {value}, {offsetName}, {QbeTypeSize(arrayType.BaseType)}"); } else { - _builder.AppendLine($" {QBEStore(arrayType.BaseType)} {value}, %{offsetName}"); + _builder.AppendLine($" {QBEStore(arrayType.BaseType)} {value}, {offsetName}"); } } @@ -492,13 +491,13 @@ public class Generator private void GenerateBreak() { - _builder.AppendLine($" jmp @{_breakLabels.Peek()}"); + _builder.AppendLine($" jmp {_breakLabels.Peek()}"); _codeIsReachable = false; } private void GenerateContinue() { - _builder.AppendLine($" jmp @{_continueLabels.Peek()}"); + _builder.AppendLine($" jmp {_continueLabels.Peek()}"); _codeIsReachable = false; } @@ -524,11 +523,11 @@ public class Generator var endLabel = GenLabelName(); var result = GenerateExpression(ifStatement.Condition); - _builder.AppendLine($" jnz {result}, @{trueLabel}, @{falseLabel}"); - _builder.AppendLine($"@{trueLabel}"); + _builder.AppendLine($" jnz {result}, {trueLabel}, {falseLabel}"); + _builder.AppendLine($"{trueLabel}"); GenerateBlock(ifStatement.Body); - _builder.AppendLine($" jmp @{endLabel}"); - _builder.AppendLine($"@{falseLabel}"); + _builder.AppendLine($" jmp {endLabel}"); + _builder.AppendLine($"{falseLabel}"); if (ifStatement.Else.HasValue) { ifStatement.Else.Value.Match @@ -538,7 +537,7 @@ public class Generator ); } - _builder.AppendLine($"@{endLabel}"); + _builder.AppendLine($"{endLabel}"); } private void GenerateMemberAssignment(MemberAssignmentNode memberAssignment) @@ -552,7 +551,7 @@ public class Generator var item = GenerateExpression(memberAssignment.MemberAccess.Expression); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add {item}, {offset}"); + _builder.AppendLine($" {offsetName} =l add {item}, {offset}"); var value = GenerateExpression(memberAssignment.Value); @@ -584,7 +583,7 @@ public class Generator var type = variableDeclaration.ExplicitType.Value ?? variableDeclaration.Value.Value?.Type!; - _builder.AppendLine($" %{pointerName} {QBEAssign(type)} alloc8 {QbeTypeSize(type)}"); + _builder.AppendLine($" {pointerName} {QBEAssign(type)} alloc8 {QbeTypeSize(type)}"); if (variableDeclaration.Value.HasValue) { @@ -592,28 +591,28 @@ public class Generator if (IsLargeType(type)) { - _builder.AppendLine($" blit {result}, %{pointerName}, {QbeTypeSize(type)}"); + _builder.AppendLine($" blit {result}, {pointerName}, {QbeTypeSize(type)}"); } else { - _builder.AppendLine($" {QBEStore(type)} {result}, %{pointerName}"); + _builder.AppendLine($" {QBEStore(type)} {result}, {pointerName}"); } } else { if (IsLargeType(type)) { - _builder.AppendLine($" blit 0, %{pointerName}, {QbeTypeSize(type)}"); + _builder.AppendLine($" blit 0, {pointerName}, {QbeTypeSize(type)}"); } else { - _builder.AppendLine($" {QBEStore(type)} 0, %{pointerName}"); + _builder.AppendLine($" {QBEStore(type)} 0, {pointerName}"); } } _variables[variableDeclaration.Name] = new Variable { - Pointer = $"%{pointerName}", + Pointer = $"{pointerName}", Type = type }; } @@ -627,13 +626,13 @@ public class Generator _breakLabels.Push(endLabel); _continueLabels.Push(conditionLabel); - _builder.AppendLine($" jmp @{conditionLabel}"); - _builder.AppendLine($"@{iterationLabel}"); + _builder.AppendLine($" jmp {conditionLabel}"); + _builder.AppendLine($"{iterationLabel}"); GenerateBlock(whileStatement.Body); - _builder.AppendLine($"@{conditionLabel}"); + _builder.AppendLine($"{conditionLabel}"); var result = GenerateExpression(whileStatement.Condition); - _builder.AppendLine($" jnz {result}, @{iterationLabel}, @{endLabel}"); - _builder.AppendLine($"@{endLabel}"); + _builder.AppendLine($" jnz {result}, {iterationLabel}, {endLabel}"); + _builder.AppendLine($"{endLabel}"); _continueLabels.Pop(); _breakLabels.Pop(); @@ -669,72 +668,72 @@ public class Generator GenerateArrayBoundsCheck(array, index); var firstItemPointerName = GenVarName(); - _builder.AppendLine($" %{firstItemPointerName} =l add {array}, 8"); + _builder.AppendLine($" {firstItemPointerName} =l add {array}, 8"); var offsetPointerName = GenVarName(); - _builder.AppendLine($" %{offsetPointerName} =l mul {index}, {QbeTypeSize(arrayType)}"); + _builder.AppendLine($" {offsetPointerName} =l mul {index}, {QbeTypeSize(arrayType)}"); var resultPointerName = GenVarName(); - _builder.AppendLine($" %{resultPointerName} =l add %{firstItemPointerName}, %{offsetPointerName}"); + _builder.AppendLine($" {resultPointerName} =l add {firstItemPointerName}, {offsetPointerName}"); if (IsLargeType(arrayType)) { - return $"%{resultPointerName}"; + return $"{resultPointerName}"; } else { var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} {QBEAssign(arrayType)} {QBELoad(arrayType)} %{resultPointerName}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} {QBEAssign(arrayType)} {QBELoad(arrayType)} {resultPointerName}"); + return $"{outputName}"; } } private void GenerateArrayBoundsCheck(string array, string index) { var countName = GenVarName(); - _builder.AppendLine($" %{countName} =l loadl {array}"); + _builder.AppendLine($" {countName} =l loadl {array}"); var isNegativeName = GenVarName(); - _builder.AppendLine($" %{isNegativeName} =w csltl {index}, 0"); + _builder.AppendLine($" {isNegativeName} =w csltl {index}, 0"); var isOobName = GenVarName(); - _builder.AppendLine($" %{isOobName} =w csgel {index}, %{countName}"); + _builder.AppendLine($" {isOobName} =w csgel {index}, {countName}"); var anyOobName = GenVarName(); - _builder.AppendLine($" %{anyOobName} =w or %{isNegativeName}, %{isOobName}"); + _builder.AppendLine($" {anyOobName} =w or {isNegativeName}, {isOobName}"); var oobLabel = GenLabelName(); var notOobLabel = GenLabelName(); - _builder.AppendLine($" jnz %{anyOobName}, @{oobLabel}, @{notOobLabel}"); + _builder.AppendLine($" jnz {anyOobName}, {oobLabel}, {notOobLabel}"); - _builder.AppendLine($"@{oobLabel}"); + _builder.AppendLine($"{oobLabel}"); _builder.AppendLine($" call $nub_panic(l $oob_message, l {OutOfBoundsMessage.Length})"); - _builder.AppendLine($"@{notOobLabel}"); + _builder.AppendLine($"{notOobLabel}"); } private string GenerateArrayInitializer(ArrayInitializerNode arrayInitializer) { var capacity = GenerateExpression(arrayInitializer.Capacity); var capacityInBytes = GenVarName(); - _builder.AppendLine($" %{capacityInBytes} =l mul {capacity}, {QbeTypeSize(arrayInitializer.ElementType)}"); + _builder.AppendLine($" {capacityInBytes} =l mul {capacity}, {QbeTypeSize(arrayInitializer.ElementType)}"); var totalArraySize = GenVarName(); - _builder.AppendLine($" %{totalArraySize} =l add %{capacityInBytes}, 8"); + _builder.AppendLine($" {totalArraySize} =l add {capacityInBytes}, 8"); var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} =l alloc8 %{totalArraySize}"); - _builder.AppendLine($" storel {capacity}, %{outputName}"); + _builder.AppendLine($" {outputName} =l alloc8 {totalArraySize}"); + _builder.AppendLine($" storel {capacity}, {outputName}"); var dataPtr = GenVarName(); - _builder.AppendLine($" %{dataPtr} =l add %{outputName}, 8"); - _builder.AppendLine($" call $nub_memset(l %{dataPtr}, w 0, l %{capacityInBytes})"); + _builder.AppendLine($" {dataPtr} =l add {outputName}, 8"); + _builder.AppendLine($" call $nub_memset(l {dataPtr}, w 0, l {capacityInBytes})"); - return $"%{outputName}"; + return $"{outputName}"; } private string GenerateDereference(DereferenceNode dereference) { var result = GenerateExpression(dereference.Expression); var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} {QBEAssign(dereference.Type)} {QBELoad(dereference.Type)} {result}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} {QBEAssign(dereference.Type)} {QBELoad(dereference.Type)} {result}"); + return $"{outputName}"; } private string GenerateAddressOf(AddressOfNode addressOf) @@ -749,9 +748,9 @@ public class Generator case NubPrimitiveType { Kind: PrimitiveTypeKind.I64 }: case NubPrimitiveType { Kind: PrimitiveTypeKind.F64 }: case NubPrimitiveType { Kind: PrimitiveTypeKind.U64 }: - _builder.AppendLine($" %{outputName} =l alloc8 8"); - _builder.AppendLine($" storel {result}, %{outputName}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l alloc8 8"); + _builder.AppendLine($" storel {result}, {outputName}"); + return $"{outputName}"; case NubPrimitiveType { Kind: PrimitiveTypeKind.I32 }: case NubPrimitiveType { Kind: PrimitiveTypeKind.U32 }: case NubPrimitiveType { Kind: PrimitiveTypeKind.I16 }: @@ -759,9 +758,9 @@ public class Generator case NubPrimitiveType { Kind: PrimitiveTypeKind.I8 }: case NubPrimitiveType { Kind: PrimitiveTypeKind.U8 }: case NubPrimitiveType { Kind: PrimitiveTypeKind.F32 }: - _builder.AppendLine($" %{outputName} =l alloc8 4"); - _builder.AppendLine($" storew {result}, %{outputName}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l alloc8 4"); + _builder.AppendLine($" storew {result}, {outputName}"); + return $"{outputName}"; default: throw new ArgumentOutOfRangeException(); } @@ -779,26 +778,26 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =w ceql {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w ceql {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w ceqw {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w ceqw {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.String)) { - _builder.AppendLine($" %{outputName} =w call $nub_strcmp(l {left}, l {right})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w call $nub_strcmp(l {left}, l {right})"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.Bool)) { - _builder.AppendLine($" %{outputName} =w ceqw {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w ceqw {left}, {right}"); + return $"{outputName}"; } break; @@ -807,27 +806,27 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =w cnel {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w cnel {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w cnew {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w cnew {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.String)) { - _builder.AppendLine($" %{outputName} =w call $nub_strcmp(l {left}, l {right})"); - _builder.AppendLine($" %{outputName} =w xor %{outputName}, 1"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w call $nub_strcmp(l {left}, l {right})"); + _builder.AppendLine($" {outputName} =w xor {outputName}, 1"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.Bool)) { - _builder.AppendLine($" %{outputName} =w cnew {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w cnew {left}, {right}"); + return $"{outputName}"; } break; @@ -836,20 +835,20 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =w csgtl {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csgtl {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w csgtw {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csgtw {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.Bool)) { - _builder.AppendLine($" %{outputName} =w csgtw {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csgtw {left}, {right}"); + return $"{outputName}"; } break; @@ -858,20 +857,20 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =w csgel {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csgel {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w csgew {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csgew {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.Bool)) { - _builder.AppendLine($" %{outputName} =w csgew {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csgew {left}, {right}"); + return $"{outputName}"; } break; @@ -880,20 +879,20 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =w csltl {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csltl {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w csltw {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csltw {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.Bool)) { - _builder.AppendLine($" %{outputName} =w csltw {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w csltw {left}, {right}"); + return $"{outputName}"; } break; @@ -902,20 +901,20 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =w cslel {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w cslel {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w cslew {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w cslew {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.Bool)) { - _builder.AppendLine($" %{outputName} =w cslew {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w cslew {left}, {right}"); + return $"{outputName}"; } break; @@ -924,14 +923,14 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =l add {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l add {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w add {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w add {left}, {right}"); + return $"{outputName}"; } break; @@ -940,14 +939,14 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =l sub {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l sub {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w sub {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w sub {left}, {right}"); + return $"{outputName}"; } break; @@ -956,14 +955,14 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =l mul {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l mul {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w mul {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w mul {left}, {right}"); + return $"{outputName}"; } break; @@ -972,14 +971,14 @@ public class Generator { if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I64)) { - _builder.AppendLine($" %{outputName} =l div {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l div {left}, {right}"); + return $"{outputName}"; } if (binaryExpression.Left.Type.Equals(NubPrimitiveType.I32)) { - _builder.AppendLine($" %{outputName} =w div {left}, {right}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w div {left}, {right}"); + return $"{outputName}"; } break; @@ -1027,14 +1026,14 @@ public class Generator case PrimitiveTypeKind.U8: return input; case PrimitiveTypeKind.F64: - _builder.AppendLine($" %{outputName} =d sltof {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =d sltof {input}"); + return $"{outputName}"; case PrimitiveTypeKind.F32: - _builder.AppendLine($" %{outputName} =s sltof {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =s sltof {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_i64_to_string(l {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_i64_to_string(l {input})"); + return $"{outputName}"; case PrimitiveTypeKind.Bool: default: throw new NotSupportedException($"Casting from {primitiveInputType.Kind} to {primitiveOutputType.Kind} is not supported"); @@ -1044,8 +1043,8 @@ public class Generator { case PrimitiveTypeKind.I64: case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l extsw {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extsw {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.U32: case PrimitiveTypeKind.I16: @@ -1055,19 +1054,19 @@ public class Generator return input; case PrimitiveTypeKind.F64: var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extsw {input}"); - _builder.AppendLine($" %{outputName} =d sltof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =l extsw {input}"); + _builder.AppendLine($" {outputName} =d sltof {extName}"); + return $"{outputName}"; case PrimitiveTypeKind.F32: - _builder.AppendLine($" %{outputName} =s swtof {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =s swtof {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_i32_to_string(w {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_i32_to_string(w {input})"); + return $"{outputName}"; case PrimitiveTypeKind.Any: var extAnyName = GenVarName(); - _builder.AppendLine($" %{extAnyName} =l extsw {input}"); - return $"%{extAnyName}"; + _builder.AppendLine($" {extAnyName} =l extsw {input}"); + return $"{extAnyName}"; case PrimitiveTypeKind.Bool: default: throw new NotSupportedException($"Casting from {primitiveInputType.Kind} to {primitiveOutputType.Kind} is not supported"); @@ -1077,12 +1076,12 @@ public class Generator { case PrimitiveTypeKind.I64: case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l extsh {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extsh {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.U32: - _builder.AppendLine($" %{outputName} =w extsh {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w extsh {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I16: case PrimitiveTypeKind.U16: case PrimitiveTypeKind.I8: @@ -1091,29 +1090,29 @@ public class Generator case PrimitiveTypeKind.F64: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extsh {input}"); - _builder.AppendLine($" %{outputName} =d sltof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =l extsh {input}"); + _builder.AppendLine($" {outputName} =d sltof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.F32: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extsh {input}"); - _builder.AppendLine($" %{outputName} =s swtof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extsh {input}"); + _builder.AppendLine($" {outputName} =s swtof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.String: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extsh {input}"); - _builder.AppendLine($" %{outputName} =l call $nub_i32_to_string(w %{extName})"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extsh {input}"); + _builder.AppendLine($" {outputName} =l call $nub_i32_to_string(w {extName})"); + return $"{outputName}"; } case PrimitiveTypeKind.Any: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extsh {input}"); - return $"%{extName}"; + _builder.AppendLine($" {extName} =l extsh {input}"); + return $"{extName}"; } case PrimitiveTypeKind.Bool: default: @@ -1124,43 +1123,43 @@ public class Generator { case PrimitiveTypeKind.I64: case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l extsb {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extsb {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.U32: case PrimitiveTypeKind.I16: case PrimitiveTypeKind.U16: - _builder.AppendLine($" %{outputName} =w extsb {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w extsb {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I8: case PrimitiveTypeKind.U8: return input; case PrimitiveTypeKind.F64: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extsb {input}"); - _builder.AppendLine($" %{outputName} =d sltof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =l extsb {input}"); + _builder.AppendLine($" {outputName} =d sltof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.F32: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extsb {input}"); - _builder.AppendLine($" %{outputName} =s swtof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extsb {input}"); + _builder.AppendLine($" {outputName} =s swtof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.String: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extsb {input}"); - _builder.AppendLine($" %{outputName} =l call $nub_i32_to_string(w %{extName})"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extsb {input}"); + _builder.AppendLine($" {outputName} =l call $nub_i32_to_string(w {extName})"); + return $"{outputName}"; } case PrimitiveTypeKind.Any: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extsb {input}"); - return $"%{extName}"; + _builder.AppendLine($" {extName} =l extsb {input}"); + return $"{extName}"; } case PrimitiveTypeKind.Bool: default: @@ -1179,14 +1178,14 @@ public class Generator case PrimitiveTypeKind.U8: return input; case PrimitiveTypeKind.F64: - _builder.AppendLine($" %{outputName} =d ultof {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =d ultof {input}"); + return $"{outputName}"; case PrimitiveTypeKind.F32: - _builder.AppendLine($" %{outputName} =s ultof {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =s ultof {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_u64_to_string(l {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_u64_to_string(l {input})"); + return $"{outputName}"; case PrimitiveTypeKind.Any: return input; case PrimitiveTypeKind.Bool: @@ -1198,8 +1197,8 @@ public class Generator { case PrimitiveTypeKind.I64: case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l extuw {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extuw {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.U32: case PrimitiveTypeKind.I16: @@ -1209,19 +1208,19 @@ public class Generator return input; case PrimitiveTypeKind.F64: var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extuw {input}"); - _builder.AppendLine($" %{outputName} =d ultof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =l extuw {input}"); + _builder.AppendLine($" {outputName} =d ultof {extName}"); + return $"{outputName}"; case PrimitiveTypeKind.F32: - _builder.AppendLine($" %{outputName} =s uwtof {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =s uwtof {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_u32_to_string(w {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_u32_to_string(w {input})"); + return $"{outputName}"; case PrimitiveTypeKind.Any: var extAnyName = GenVarName(); - _builder.AppendLine($" %{extAnyName} =l extuw {input}"); - return $"%{extAnyName}"; + _builder.AppendLine($" {extAnyName} =l extuw {input}"); + return $"{extAnyName}"; case PrimitiveTypeKind.Bool: default: throw new NotSupportedException($"Casting from {primitiveInputType.Kind} to {primitiveOutputType.Kind} is not supported"); @@ -1231,12 +1230,12 @@ public class Generator { case PrimitiveTypeKind.I64: case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l extuh {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extuh {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.U32: - _builder.AppendLine($" %{outputName} =w extuh {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w extuh {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I16: case PrimitiveTypeKind.U16: case PrimitiveTypeKind.I8: @@ -1245,29 +1244,29 @@ public class Generator case PrimitiveTypeKind.F64: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extuh {input}"); - _builder.AppendLine($" %{outputName} =d ultof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =l extuh {input}"); + _builder.AppendLine($" {outputName} =d ultof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.F32: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extuh {input}"); - _builder.AppendLine($" %{outputName} =s uwtof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extuh {input}"); + _builder.AppendLine($" {outputName} =s uwtof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.String: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extuh {input}"); - _builder.AppendLine($" %{outputName} =l call $nub_u32_to_string(w %{extName})"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extuh {input}"); + _builder.AppendLine($" {outputName} =l call $nub_u32_to_string(w {extName})"); + return $"{outputName}"; } case PrimitiveTypeKind.Any: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extuh {input}"); - return $"%{extName}"; + _builder.AppendLine($" {extName} =l extuh {input}"); + return $"{extName}"; } case PrimitiveTypeKind.Bool: default: @@ -1278,43 +1277,43 @@ public class Generator { case PrimitiveTypeKind.I64: case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l extub {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extub {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.U32: case PrimitiveTypeKind.I16: case PrimitiveTypeKind.U16: - _builder.AppendLine($" %{outputName} =w extub {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w extub {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I8: case PrimitiveTypeKind.U8: return input; case PrimitiveTypeKind.F64: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extub {input}"); - _builder.AppendLine($" %{outputName} =d ultof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =l extub {input}"); + _builder.AppendLine($" {outputName} =d ultof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.F32: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extub {input}"); - _builder.AppendLine($" %{outputName} =s uwtof %{extName}"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extub {input}"); + _builder.AppendLine($" {outputName} =s uwtof {extName}"); + return $"{outputName}"; } case PrimitiveTypeKind.String: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =w extub {input}"); - _builder.AppendLine($" %{outputName} =l call $nub_u32_to_string(w %{extName})"); - return $"%{outputName}"; + _builder.AppendLine($" {extName} =w extub {input}"); + _builder.AppendLine($" {outputName} =l call $nub_u32_to_string(w {extName})"); + return $"{outputName}"; } case PrimitiveTypeKind.Any: { var extName = GenVarName(); - _builder.AppendLine($" %{extName} =l extub {input}"); - return $"%{extName}"; + _builder.AppendLine($" {extName} =l extub {input}"); + return $"{extName}"; } case PrimitiveTypeKind.Bool: default: @@ -1327,27 +1326,27 @@ public class Generator case PrimitiveTypeKind.Any: return input; case PrimitiveTypeKind.F32: - _builder.AppendLine($" %{outputName} =s dtos {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =s dtos {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I64: - _builder.AppendLine($" %{outputName} =l dtosi {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l dtosi {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.I16: case PrimitiveTypeKind.I8: - _builder.AppendLine($" %{outputName} =w dtosi {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w dtosi {input}"); + return $"{outputName}"; case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l dtoui {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l dtoui {input}"); + return $"{outputName}"; case PrimitiveTypeKind.U32: case PrimitiveTypeKind.U16: case PrimitiveTypeKind.U8: - _builder.AppendLine($" %{outputName} =w dtoui {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w dtoui {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_f64_to_string(d {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_f64_to_string(d {input})"); + return $"{outputName}"; case PrimitiveTypeKind.Bool: default: throw new NotSupportedException($"Casting from {primitiveInputType.Kind} to {primitiveOutputType.Kind} is not supported"); @@ -1356,29 +1355,29 @@ public class Generator switch (primitiveOutputType.Kind) { case PrimitiveTypeKind.F64: - _builder.AppendLine($" %{outputName} =d stod {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =d stod {input}"); + return $"{outputName}"; case PrimitiveTypeKind.F32: return input; case PrimitiveTypeKind.I64: - _builder.AppendLine($" %{outputName} =l stosi {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l stosi {input}"); + return $"{outputName}"; case PrimitiveTypeKind.I32: case PrimitiveTypeKind.I16: case PrimitiveTypeKind.I8: - _builder.AppendLine($" %{outputName} =w stosi {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w stosi {input}"); + return $"{outputName}"; case PrimitiveTypeKind.U64: - _builder.AppendLine($" %{outputName} =l stoui {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l stoui {input}"); + return $"{outputName}"; case PrimitiveTypeKind.U32: case PrimitiveTypeKind.U16: case PrimitiveTypeKind.U8: - _builder.AppendLine($" %{outputName} =w stoui {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w stoui {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_f32_to_string(s {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_f32_to_string(s {input})"); + return $"{outputName}"; case PrimitiveTypeKind.Any: throw new NotImplementedException(); case PrimitiveTypeKind.Bool: @@ -1391,11 +1390,11 @@ public class Generator case PrimitiveTypeKind.Bool: return input; case PrimitiveTypeKind.Any: - _builder.AppendLine($" %{outputName} =l extsw {input}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l extsw {input}"); + return $"{outputName}"; case PrimitiveTypeKind.String: - _builder.AppendLine($" %{outputName} =l call $nub_bool_to_string(s {input})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l call $nub_bool_to_string(s {input})"); + return $"{outputName}"; case PrimitiveTypeKind.I64: case PrimitiveTypeKind.I32: case PrimitiveTypeKind.I16: @@ -1446,8 +1445,8 @@ public class Generator else { var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} {QBEAssign(identifier.Type)} {QBELoad(identifier.Type)} {variable.Pointer}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} {QBEAssign(identifier.Type)} {QBELoad(identifier.Type)} {variable.Pointer}"); + return $"{outputName}"; } } @@ -1485,7 +1484,7 @@ public class Generator var structVar = GenVarName(); var size = structDefinition.Fields.Sum(x => QbeTypeSize(x.Type)); - _builder.AppendLine($" %{structVar} =l alloc8 {size}"); + _builder.AppendLine($" {structVar} =l alloc8 {size}"); foreach (var field in structDefinition.Fields) { @@ -1495,30 +1494,30 @@ public class Generator { var var = GenerateExpression(fieldValue); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add %{structVar}, {offset}"); + _builder.AppendLine($" {offsetName} =l add {structVar}, {offset}"); if (IsLargeType(field.Type)) { - _builder.AppendLine($" blit {var}, %{offsetName}, {QbeTypeSize(field.Type)}"); + _builder.AppendLine($" blit {var}, {offsetName}, {QbeTypeSize(field.Type)}"); } else { - _builder.AppendLine($" {QBEStore(field.Type)} {var}, %{offsetName}"); + _builder.AppendLine($" {QBEStore(field.Type)} {var}, {offsetName}"); } } else if (field.Value.HasValue) { var var = GenerateExpression(field.Value.Value); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add %{structVar}, {offset}"); + _builder.AppendLine($" {offsetName} =l add {structVar}, {offset}"); if (IsLargeType(field.Type)) { - _builder.AppendLine($" blit {var}, %{offsetName}, {QbeTypeSize(field.Type)}"); + _builder.AppendLine($" blit {var}, {offsetName}, {QbeTypeSize(field.Type)}"); } else { - _builder.AppendLine($" {QBEStore(field.Type)} {var}, %{offsetName}"); + _builder.AppendLine($" {QBEStore(field.Type)} {var}, {offsetName}"); } } else @@ -1527,7 +1526,7 @@ public class Generator } } - return $"%{structVar}"; + return $"{structVar}"; } private string GenerateUnaryExpression(UnaryExpressionNode unaryExpression) @@ -1542,17 +1541,17 @@ public class Generator switch (unaryExpression.Operand.Type) { case NubPrimitiveType { Kind: PrimitiveTypeKind.I64 }: - _builder.AppendLine($" %{outputName} =l neg {operand}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l neg {operand}"); + return $"{outputName}"; case NubPrimitiveType { Kind: PrimitiveTypeKind.I32 or PrimitiveTypeKind.I16 or PrimitiveTypeKind.I8 }: - _builder.AppendLine($" %{outputName} =w neg {operand}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w neg {operand}"); + return $"{outputName}"; case NubPrimitiveType { Kind: PrimitiveTypeKind.F64 }: - _builder.AppendLine($" %{outputName} =d neg {operand}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =d neg {operand}"); + return $"{outputName}"; case NubPrimitiveType { Kind: PrimitiveTypeKind.F32 }: - _builder.AppendLine($" %{outputName} =s neg {operand}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =s neg {operand}"); + return $"{outputName}"; } break; @@ -1562,8 +1561,8 @@ public class Generator switch (unaryExpression.Operand.Type) { case NubPrimitiveType { Kind: PrimitiveTypeKind.Bool }: - _builder.AppendLine($" %{outputName} =w xor {operand}, 1"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =w xor {operand}, 1"); + return $"{outputName}"; } break; @@ -1588,8 +1587,8 @@ public class Generator if (memberAccess.Member == "count") { var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} =l loadl {item}"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} =l loadl {item}"); + return $"{outputName}"; } throw new ArgumentOutOfRangeException(nameof(memberAccess.Member)); @@ -1600,18 +1599,18 @@ public class Generator var offset = LookupMemberOffset(structDefinition, memberAccess.Member); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add {item}, {offset}"); + _builder.AppendLine($" {offsetName} =l add {item}, {offset}"); if (IsLargeType(memberAccess.Type)) { - return $"%{offsetName}"; + return $"{offsetName}"; } else { var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} {QBEAssign(memberAccess.Type)} {QBELoad(memberAccess.Type)} %{offsetName}"); + _builder.AppendLine($" {outputName} {QBEAssign(memberAccess.Type)} {QBELoad(memberAccess.Type)} {offsetName}"); - return $"%{outputName}"; + return $"{outputName}"; } } default: @@ -1650,29 +1649,29 @@ public class Generator if (funcDefinition.ReturnType.HasValue) { var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} {QBEAssign(funcCall.Type)} call ${funcName}({string.Join(", ", parameterStrings)})"); - return $"%{outputName}"; + _builder.AppendLine($" {outputName} {QBEAssign(funcCall.Type)} call {funcName}({string.Join(", ", parameterStrings)})"); + return $"{outputName}"; } else { - _builder.AppendLine($" call ${funcName}({string.Join(", ", parameterStrings)})"); + _builder.AppendLine($" call {funcName}({string.Join(", ", parameterStrings)})"); return "this should never show up!"; } } private string GenVarName() { - return $"v{++_variableIndex}"; + return $"%v{++_variableIndex}"; } private string GenFuncName() { - return $"f{++_funcIndex}"; + return $"$f{++_funcIndex}"; } private string GenLabelName() { - return $"l{++_labelIndex}"; + return $"@l{++_labelIndex}"; } private IFuncSignature LookupFuncSignature(string @namespace, string name, List parameters)