Arrow func

This commit is contained in:
nub31
2025-07-09 18:17:43 +02:00
parent 4fff98b010
commit d6dcbe3217
9 changed files with 41 additions and 26 deletions

View File

@@ -17,7 +17,7 @@ public partial class QBEGenerator
BoundStructInitializer structInitializer => EmitStructInitializer(structInitializer),
BoundAddressOf addressOf => EmitAddressOf(addressOf),
BoundDereference dereference => EmitDereference(dereference),
BoundAnonymousFunc anonymousFunc => EmitAnonymousFunc(anonymousFunc),
BoundArrowFunc arrowFunc => EmitArrowFunc(arrowFunc),
BoundBinaryExpression binaryExpression => EmitBinaryExpression(binaryExpression),
BoundFuncCall funcCallExpression => EmitFuncCall(funcCallExpression),
BoundExternFuncIdent externFuncIdent => EmitExternFuncIdent(externFuncIdent),
@@ -33,11 +33,11 @@ public partial class QBEGenerator
};
}
private Val EmitAnonymousFunc(BoundAnonymousFunc anonymousFunc)
private Val EmitArrowFunc(BoundArrowFunc arrowFunc)
{
var name = $"$anon_func{++_anonymousFuncIndex}";
_anonymousFunctions.Enqueue((anonymousFunc, name));
return new Val(name, anonymousFunc.Type, ValKind.Direct);
var name = $"$arrow_func{++_arrowFuncIndex}";
_arrowFunctions.Enqueue((arrowFunc, name));
return new Val(name, arrowFunc.Type, ValKind.Direct);
}
private Val EmitArrayIndexAccess(BoundArrayIndexAccess arrayIndexAccess)

View File

@@ -16,12 +16,12 @@ public partial class QBEGenerator
private readonly List<StringLiteral> _stringLiterals = [];
private readonly Stack<string> _breakLabels = [];
private readonly Stack<string> _continueLabels = [];
private readonly Queue<(BoundAnonymousFunc Func, string Name)> _anonymousFunctions = [];
private readonly Queue<(BoundArrowFunc Func, string Name)> _arrowFunctions = [];
private readonly Dictionary<BoundTraitFuncImpl, string> _implFunctions = [];
private readonly Stack<Scope> _scopes = [];
private int _tmpIndex;
private int _labelIndex;
private int _anonymousFuncIndex;
private int _arrowFuncIndex;
private int _cStringLiteralIndex;
private int _stringLiteralIndex;
private int _implFuncNameIndex;
@@ -42,12 +42,12 @@ public partial class QBEGenerator
_stringLiterals.Clear();
_breakLabels.Clear();
_continueLabels.Clear();
_anonymousFunctions.Clear();
_arrowFunctions.Clear();
_implFunctions.Clear();
_scopes.Clear();
_tmpIndex = 0;
_labelIndex = 0;
_anonymousFuncIndex = 0;
_arrowFuncIndex = 0;
_cStringLiteralIndex = 0;
_stringLiteralIndex = 0;
_implFuncNameIndex = 0;
@@ -71,9 +71,9 @@ public partial class QBEGenerator
_writer.NewLine();
}
while (_anonymousFunctions.TryDequeue(out var anon))
while (_arrowFunctions.TryDequeue(out var arrowFunc))
{
EmitFuncDefinition(anon.Name, anon.Func.Parameters, anon.Func.ReturnType, anon.Func.Body);
EmitFuncDefinition(arrowFunc.Name, arrowFunc.Func.Parameters, arrowFunc.Func.ReturnType, arrowFunc.Func.Body);
_writer.NewLine();
}