From 7f347192051bd8328dcb8dc4c78bef19d8c2be48 Mon Sep 17 00:00:00 2001 From: nub31 Date: Tue, 10 Jun 2025 18:07:04 +0200 Subject: [PATCH] Call function directly when identifier is a func --- .../Frontend/Generation/QBEGenerator.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/lang/Nub.Lang/Frontend/Generation/QBEGenerator.cs b/src/lang/Nub.Lang/Frontend/Generation/QBEGenerator.cs index 87698e8..fcbbd2b 100644 --- a/src/lang/Nub.Lang/Frontend/Generation/QBEGenerator.cs +++ b/src/lang/Nub.Lang/Frontend/Generation/QBEGenerator.cs @@ -1279,20 +1279,28 @@ public class QBEGenerator parameterStrings.Add($"{qbeParameterType} {result}"); } - // var funcPointer = GenerateExpression(funcCall.Expression); - var funcPointerPointer = GenerateExpression(funcCall.Expression); - var funcPointer = GenVarName(); - _builder.AppendLine($" {funcPointer} =l loadl {funcPointerPointer}"); + string funcTarget; + if (funcCall.Expression is IdentifierNode identifier && _symbolTable.Lookup(identifier.Namespace, identifier.Name) is SymbolTable.Func func) + { + 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) { 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; } else { - _builder.AppendLine($" call {funcPointer}({string.Join(", ", parameterStrings)})"); + _builder.AppendLine($" call {funcTarget}({string.Join(", ", parameterStrings)})"); return "fuck"; } }