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"; } }