Skip to content

Commit 4c8f26a

Browse files
committed
Add: support for default values ​​for parameters
1 parent 861f050 commit 4c8f26a

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

src/Lua.SourceGenerator/LuaObjectGenerator.Emit.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.CodeAnalysis;
22
using Microsoft.CodeAnalysis.CSharp;
3+
using Microsoft.CodeAnalysis.CSharp.Syntax;
34

45
namespace Lua.SourceGenerator;
56

@@ -361,13 +362,31 @@ static void EmitMethodFunction(string functionName, string chunkName, TypeMetada
361362

362363
foreach (var parameter in methodMetadata.Symbol.Parameters)
363364
{
364-
if (SymbolEqualityComparer.Default.Equals(parameter.Type, references.LuaValue))
365+
var isParameterLuaValue = SymbolEqualityComparer.Default.Equals(parameter.Type, references.LuaValue);
366+
367+
if (parameter.HasExplicitDefaultValue)
365368
{
366-
builder.AppendLine($"var arg{index} = context.GetArgument({index});");
369+
var syntax = (ParameterSyntax)parameter.DeclaringSyntaxReferences[0].GetSyntax();
370+
371+
if (isParameterLuaValue)
372+
{
373+
builder.AppendLine($"var arg{index} = context.HasArgument({index}) ? context.GetArgument({index}) : {syntax.Default!.Value.ToFullString()};");
374+
}
375+
else
376+
{
377+
builder.AppendLine($"var arg{index} = context.HasArgument({index}) ? context.GetArgument<{parameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}>({index}) : {syntax.Default!.Value.ToFullString()};");
378+
}
367379
}
368380
else
369381
{
370-
builder.AppendLine($"var arg{index} = context.GetArgument<{parameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}>({index});");
382+
if (isParameterLuaValue)
383+
{
384+
builder.AppendLine($"var arg{index} = context.GetArgument({index});");
385+
}
386+
else
387+
{
388+
builder.AppendLine($"var arg{index} = context.GetArgument<{parameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}>({index});");
389+
}
371390
}
372391
index++;
373392
}
@@ -405,7 +424,7 @@ static void EmitMethodFunction(string functionName, string chunkName, TypeMetada
405424
{
406425
builder.AppendLine("buffer.Span[0] = new global::Lua.LuaValue(result);");
407426
}
408-
427+
409428
builder.AppendLine($"return {(methodMetadata.IsAsync ? "1" : "new(1)")};");
410429
}
411430
else

0 commit comments

Comments
 (0)