Call function directly when identifier is a func

This commit is contained in:
nub31
2025-06-10 18:07:04 +02:00
parent 79ec5f9b0f
commit 7f34719205

View File

@@ -1279,20 +1279,28 @@ public class QBEGenerator
parameterStrings.Add($"{qbeParameterType} {result}"); parameterStrings.Add($"{qbeParameterType} {result}");
} }
// var funcPointer = GenerateExpression(funcCall.Expression); string funcTarget;
var funcPointerPointer = GenerateExpression(funcCall.Expression); if (funcCall.Expression is IdentifierNode identifier && _symbolTable.Lookup(identifier.Namespace, identifier.Name) is SymbolTable.Func func)
var funcPointer = GenVarName(); {
_builder.AppendLine($" {funcPointer} =l loadl {funcPointerPointer}"); funcTarget = func.GeneratedName;
}
else
{
var funcPointerPointer = GenerateExpression(funcCall.Expression);
var funcPointer = GenVarName();
_builder.AppendLine($" {funcPointer} =l loadl {funcPointerPointer}");
funcTarget = funcPointer;
}
if (funcType.ReturnType is not NubVoidType) if (funcType.ReturnType is not NubVoidType)
{ {
var outputName = GenVarName(); var outputName = GenVarName();
_builder.AppendLine($" {outputName} {QBEAssign(funcCall.Type)} call {funcPointer}({string.Join(", ", parameterStrings)})"); _builder.AppendLine($" {outputName} {QBEAssign(funcCall.Type)} call {funcTarget}({string.Join(", ", parameterStrings)})");
return outputName; return outputName;
} }
else else
{ {
_builder.AppendLine($" call {funcPointer}({string.Join(", ", parameterStrings)})"); _builder.AppendLine($" call {funcTarget}({string.Join(", ", parameterStrings)})");
return "fuck"; return "fuck";
} }
} }