From 7cddab87598e186527621f26374ae8f081624c57 Mon Sep 17 00:00:00 2001 From: ds5678 <49847914+ds5678@users.noreply.github.com> Date: Sun, 8 Sep 2024 09:49:21 -0700 Subject: [PATCH] Fix Invalid Generic Parameter Names --- Il2CppInterop.Generator/Contexts/MethodRewriteContext.cs | 5 +++++ Il2CppInterop.Generator/Contexts/RewriteGlobalContext.cs | 3 +++ Il2CppInterop.Generator/Passes/Pass12FillTypedefs.cs | 2 ++ 3 files changed, 10 insertions(+) diff --git a/Il2CppInterop.Generator/Contexts/MethodRewriteContext.cs b/Il2CppInterop.Generator/Contexts/MethodRewriteContext.cs index e011e807..33034ada 100644 --- a/Il2CppInterop.Generator/Contexts/MethodRewriteContext.cs +++ b/Il2CppInterop.Generator/Contexts/MethodRewriteContext.cs @@ -76,6 +76,9 @@ public MethodRewriteContext(TypeRewriteContext declaringType, MethodDefinition o var genericParameter = new GenericParameter(oldParameter.Name); genericParameter.Attributes = oldParameter.Attributes.StripValueTypeConstraint(); newMethod.GenericParameters.Add(genericParameter); + + if (genericParameter.Name.IsInvalidInSource()) + genericParameter.Name = genericParameter.Name.FilterInvalidInSourceChars(); } } @@ -135,6 +138,8 @@ public void CtorPhase2() { var oldParameter = genericParams[index]; var genericParameter = new GenericParameter(oldParameter.Name); + if (genericParameter.Name.IsInvalidInSource()) + genericParameter.Name = genericParameter.Name.FilterInvalidInSourceChars(); genericMethodInfoStoreType.GenericParameters.Add(genericParameter); selfSubstRef.TypeArguments.Add(genericParameter.ToTypeSignature()); var newParameter = NewMethod.GenericParameters[index]; diff --git a/Il2CppInterop.Generator/Contexts/RewriteGlobalContext.cs b/Il2CppInterop.Generator/Contexts/RewriteGlobalContext.cs index bbf503f7..ae3e3302 100644 --- a/Il2CppInterop.Generator/Contexts/RewriteGlobalContext.cs +++ b/Il2CppInterop.Generator/Contexts/RewriteGlobalContext.cs @@ -137,6 +137,9 @@ public AssemblyRewriteContext GetAssemblyByName(string name) { var newGenericParameter = new GenericParameter(genericParameter.Name, genericParameter.Attributes); + if (newGenericParameter.Name.IsInvalidInSource()) + newGenericParameter.Name = newGenericParameter.Name.FilterInvalidInSourceChars(); + foreach (var constraint in genericParameter.Constraints) { var newConstraintType = constraint.Constraint != null ? resolve(constraint.Constraint.ToTypeSignature())?.ToTypeDefOrRef() : null; diff --git a/Il2CppInterop.Generator/Passes/Pass12FillTypedefs.cs b/Il2CppInterop.Generator/Passes/Pass12FillTypedefs.cs index 7c5b09de..8c644a23 100644 --- a/Il2CppInterop.Generator/Passes/Pass12FillTypedefs.cs +++ b/Il2CppInterop.Generator/Passes/Pass12FillTypedefs.cs @@ -15,6 +15,8 @@ public static void DoPass(RewriteGlobalContext context) foreach (var originalParameter in typeContext.OriginalType.GenericParameters) { var newParameter = new GenericParameter(originalParameter.Name); + if (newParameter.Name.IsInvalidInSource()) + newParameter.Name = newParameter.Name.FilterInvalidInSourceChars(); typeContext.NewType.GenericParameters.Add(newParameter); newParameter.Attributes = originalParameter.Attributes.StripValueTypeConstraint(); }