From 3f1b34682d889ad5c47c889d4ba3004f23b07bd2 Mon Sep 17 00:00:00 2001 From: walon Date: Sun, 13 Aug 2023 13:07:37 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=E4=BF=AE=E5=A4=8D=E8=AE=A1=E7=AE=97=20?= =?UTF-8?q?AOTGenericReferences=E6=97=B6=E6=9C=AA=E8=80=83=E8=99=91?= =?UTF-8?q?=E5=88=B0=E6=B3=9B=E5=9E=8B=E4=B8=AD=E8=B0=83=E7=94=A8=E6=B3=9B?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E9=97=B4=E6=8E=A5=E8=B0=83=E7=94=A8=E7=9A=84=E6=B3=9B=E5=9E=8B?= =?UTF-8?q?=E6=9C=AA=E8=A2=AB=E7=BB=9F=E8=AE=A1=E5=9C=A8=E5=86=85=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/AOT/Analyzer.cs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Editor/AOT/Analyzer.cs b/Editor/AOT/Analyzer.cs index a30410e..5d9c475 100644 --- a/Editor/AOT/Analyzer.cs +++ b/Editor/AOT/Analyzer.cs @@ -58,15 +58,15 @@ namespace HybridCLR.Editor.AOT return; } gc = gc.ToGenericShare(); - if (_genericTypes.Add(gc) && NeedWalk(gc.Type)) + if (_genericTypes.Add(gc) && NeedWalk(null, gc.Type)) { WalkType(gc); } } - private bool NeedWalk(TypeDef type) + private bool NeedWalk(MethodDef callFrom, TypeDef type) { - return _hotUpdateAssemblyFiles.Contains(type.Module.Name); + return _hotUpdateAssemblyFiles.Contains(type.Module.Name) || callFrom == null || callFrom.HasGenericParameters; } private bool IsAotType(TypeDef type) @@ -85,7 +85,7 @@ namespace HybridCLR.Editor.AOT { return; } - if (_genericMethods.Add(method) && NeedWalk(method.Method.DeclaringType)) + if (NeedWalk(methodDef, method.Method.DeclaringType) && _genericMethods.Add(method)) { _newMethods.Add(method); } @@ -101,7 +101,7 @@ namespace HybridCLR.Editor.AOT { return; } - if (_genericMethods.Add(method) && NeedWalk(method.Method.DeclaringType)) + if (NeedWalk(null, method.Method.DeclaringType) && _genericMethods.Add(method)) { _newMethods.Add(method); } @@ -157,9 +157,9 @@ namespace HybridCLR.Editor.AOT for (uint rid = 1, n = ass.Metadata.TablesStream.TypeSpecTable.Rows; rid <= n; rid++) { var ts = ass.ResolveTypeSpec(rid); - if (!ts.ContainsGenericParameter) + var cs = GenericClass.ResolveClass(ts, null)?.ToGenericShare(); + if (cs != null) { - var cs = GenericClass.ResolveClass(ts, null)?.ToGenericShare(); TryAddAndWalkGenericType(cs); } } @@ -167,10 +167,6 @@ namespace HybridCLR.Editor.AOT for (uint rid = 1, n = ass.Metadata.TablesStream.MethodSpecTable.Rows; rid <= n; rid++) { var ms = ass.ResolveMethodSpec(rid); - if (ms.DeclaringType.ContainsGenericParameter || ms.GenericInstMethodSig.ContainsGenericParameter) - { - continue; - } var gm = GenericMethod.ResolveMethod(ms, null)?.ToGenericShare(); TryAddMethodNotWalkType(gm); }