Merge pull request #115741 from Joy-less/improve-source-generated-emit-signal-performance

Improve source-generated `EmitSignal{...}` performance in C#
This commit is contained in:
Thaddeus Crews
2026-03-18 11:43:34 -05:00
2 changed files with 10 additions and 5 deletions
@@ -34,7 +34,7 @@ partial class EventSignals
}
protected void EmitSignalMySignal(string @str, int @num)
{
EmitSignal(SignalName.MySignal, @str, @num);
EmitSignal(SignalName.MySignal, [@str, @num]);
}
/// <inheritdoc/>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
@@ -303,20 +303,25 @@ namespace Godot.SourceGenerators
}
source.Append(")\n");
source.Append(" {\n");
source.Append($" EmitSignal(SignalName.{signalName}");
source.Append($" EmitSignal(SignalName.{signalName}, [");
foreach (var paramSymbol in invokeMethodSymbol.Parameters)
{
if (paramSymbol.Ordinal != 0)
{
source.Append(", ");
}
// Enums must be converted to the underlying type before they can be implicitly converted to Variant
if (paramSymbol.Type.TypeKind == TypeKind.Enum)
{
var underlyingType = ((INamedTypeSymbol)paramSymbol.Type).EnumUnderlyingType!;
source.Append($", ({underlyingType.FullQualifiedNameIncludeGlobal()})@{paramSymbol.Name}");
source.Append($"({underlyingType.FullQualifiedNameIncludeGlobal()})@{paramSymbol.Name}");
continue;
}
source.Append($", @{paramSymbol.Name}");
source.Append($"@{paramSymbol.Name}");
}
source.Append(");\n");
source.Append("]);\n");
source.Append(" }\n");
}