Call function directly when identifier is a func
This commit is contained in:
@@ -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";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user