66using AsmResolver . DotNet . Collections ;
77using AsmResolver . DotNet . Signatures ;
88using AsmResolver . PE . DotNet . Metadata . Tables ;
9+ using Il2CppInterop . Common ;
910using Il2CppInterop . Common . XrefScans ;
1011using Il2CppInterop . Generator . Extensions ;
1112using Il2CppInterop . Generator . Passes ;
1213using Il2CppInterop . Generator . Utils ;
14+ using Microsoft . Extensions . Logging ;
1315
1416namespace Il2CppInterop . Generator . Contexts ;
1517
@@ -146,11 +148,14 @@ private bool HasGenericParameter(TypeSignature typeReference, GenericParameterSi
146148
147149 public void CtorPhase2 ( )
148150 {
149- UnmangledName = UnmangleMethodName ( ) ;
150- UnmangledNameWithSignature = UnmangleMethodNameWithSignature ( ) ;
151+ // Make context manually, NewMethod.DeclaringType is null for now
152+ var genericContext = new GenericParameterContext ( DeclaringType . NewType , NewMethod ) ;
153+
154+ UnmangledName = UnmangleMethodName ( genericContext ) ;
155+ UnmangledNameWithSignature = UnmangleMethodNameWithSignature ( genericContext ) ;
151156
152157 NewMethod . Name = UnmangledName ;
153- NewMethod . Signature ! . ReturnType = DeclaringType . AssemblyContext . RewriteTypeRef ( OriginalMethod . Signature ? . ReturnType , OriginalMethod . GetGenericParameterContext ( ) , DeclaringType . isBoxedTypeVariant ) ;
158+ NewMethod . Signature ! . ReturnType = DeclaringType . AssemblyContext . RewriteTypeRef ( OriginalMethod . Signature ? . ReturnType , genericContext , DeclaringType . isBoxedTypeVariant ) ;
154159
155160 var nonGenericMethodInfoPointerField = new FieldDefinition (
156161 "NativeMethodInfoPtr_" + UnmangledNameWithSignature ,
@@ -227,7 +232,7 @@ private MethodAttributes AdjustAttributes(MethodAttributes original, bool stripV
227232 return original ;
228233 }
229234
230- private string UnmangleMethodName ( )
235+ private string UnmangleMethodName ( GenericParameterContext context )
231236 {
232237 var method = OriginalMethod ;
233238
@@ -241,12 +246,12 @@ private string UnmangleMethodName()
241246 return ".ctor" ;
242247
243248 if ( method . Name . IsObfuscated ( DeclaringType . AssemblyContext . GlobalContext . Options ) )
244- return UnmangleMethodNameWithSignature ( ) ;
249+ return UnmangleMethodNameWithSignature ( context ) ;
245250
246251 return method . Name . MakeValidInSource ( ) ;
247252 }
248253
249- private string ProduceMethodSignatureBase ( )
254+ private string ProduceMethodSignatureBase ( GenericParameterContext context )
250255 {
251256 var method = OriginalMethod ;
252257
@@ -274,12 +279,12 @@ private string ProduceMethodSignatureBase()
274279 builder . Append ( str ) ;
275280
276281 builder . Append ( '_' ) ;
277- builder . Append ( DeclaringType . AssemblyContext . RewriteTypeRef ( method . Signature ? . ReturnType , method . GetGenericParameterContext ( ) , DeclaringType . isBoxedTypeVariant ) . GetUnmangledName ( method . DeclaringType , method ) ) ;
282+ builder . Append ( DeclaringType . AssemblyContext . RewriteTypeRef ( method . Signature ? . ReturnType , context , DeclaringType . isBoxedTypeVariant ) . GetUnmangledName ( method . DeclaringType , method ) ) ;
278283
279284 foreach ( var param in method . Parameters )
280285 {
281286 builder . Append ( '_' ) ;
282- builder . Append ( DeclaringType . AssemblyContext . RewriteTypeRef ( param . ParameterType , method . GetGenericParameterContext ( ) , DeclaringType . isBoxedTypeVariant ) . GetUnmangledName ( method . DeclaringType , method ) ) ;
287+ builder . Append ( DeclaringType . AssemblyContext . RewriteTypeRef ( param . ParameterType , context , DeclaringType . isBoxedTypeVariant ) . GetUnmangledName ( method . DeclaringType , method ) ) ;
283288 }
284289
285290 var address = Rva ;
@@ -290,9 +295,9 @@ private string ProduceMethodSignatureBase()
290295 }
291296
292297
293- private string UnmangleMethodNameWithSignature ( )
298+ private string UnmangleMethodNameWithSignature ( GenericParameterContext context )
294299 {
295- var unmangleMethodNameWithSignature = ProduceMethodSignatureBase ( ) + "_" + DeclaringType . Methods
300+ var unmangleMethodNameWithSignature = ProduceMethodSignatureBase ( context ) + "_" + DeclaringType . Methods
296301 . Where ( ParameterSignatureMatchesThis ) . TakeWhile ( it => it != this ) . Count ( ) ;
297302
298303 if ( DeclaringType . AssemblyContext . GlobalContext . Options . RenameMap . TryGetValue (
0 commit comments