Skip to content

Commit cd21175

Browse files
committed
~
1 parent c722a46 commit cd21175

1 file changed

Lines changed: 16 additions & 13 deletions

File tree

il2cpp/TypeManager.cs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,13 +1053,15 @@ private void ExpandType(TypeX tyX)
10531053

10541054
private void TryAddGetHashCode(TypeX tyX)
10551055
{
1056+
const string kGetHashCode = "GetHashCode";
1057+
10561058
// 值类型补齐 GetHashCode
10571059
if (!tyX.IsValueType ||
1058-
tyX.Def.FindMethod("GetHashCode") != null &&
1059-
tyX.Def.FindMethod("GetHashCode", MethodSig.CreateInstance(CorLibTypes.Int32)) != null)
1060+
tyX.Def.FindMethod(kGetHashCode) != null &&
1061+
tyX.Def.FindMethod(kGetHashCode, MethodSig.CreateInstance(CorLibTypes.Int32)) != null)
10601062
return;
10611063

1062-
var objMet = CorLibTypes.Object.TypeRef.ResolveTypeDef().FindMethod("GetHashCode");
1064+
var objMet = CorLibTypes.Object.TypeRef.ResolveTypeDef().FindMethod(kGetHashCode);
10631065
MethodDefUser metDef = new MethodDefUser(objMet.Name, objMet.MethodSig, objMet.Attributes);
10641066
metDef.IsReuseSlot = true;
10651067
tyX.Def.Methods.Add(metDef);
@@ -1082,6 +1084,7 @@ private void TryAddGetHashCode(TypeX tyX)
10821084
insts.Add(OpCodes.Ldc_I4.ToInstruction(0x14AE055C ^ tyX.GetNameKey().GetHashCode()));
10831085

10841086
bool last = false;
1087+
TypeSig tyGenInstSig = tyX.GetGenericInstSig();
10851088
foreach (var fldDef in fldList)
10861089
{
10871090
if (!Helper.IsInstanceField(fldDef))
@@ -1099,11 +1102,8 @@ private void TryAddGetHashCode(TypeX tyX)
10991102
insts.Add(OpCodes.Ldarg_0.ToInstruction());
11001103

11011104
MemberRef fldRef = null;
1102-
TypeSig tyGenInstSig = tyX.GetGenericInstSig();
11031105
if (tyGenInstSig != null)
1104-
{
11051106
fldRef = new MemberRefUser(fldDef.Module, fldDef.Name, fldDef.FieldSig, new TypeSpecUser(tyGenInstSig));
1106-
}
11071107

11081108
if (fldDef.FieldType.IsValueType ||
11091109
fldDef.FieldType.ElementType == ElementType.Var)
@@ -1121,6 +1121,7 @@ private void TryAddGetHashCode(TypeX tyX)
11211121
else
11221122
insts.Add(OpCodes.Ldfld.ToInstruction(fldDef));
11231123
}
1124+
11241125
insts.Add(OpCodes.Callvirt.ToInstruction(objMet));
11251126
insts.Add(OpCodes.Xor.ToInstruction());
11261127
}
@@ -1131,23 +1132,25 @@ private void TryAddGetHashCode(TypeX tyX)
11311132

11321133
private void TryAddEquals(TypeX tyX)
11331134
{
1135+
const string kEquals = "Equals";
1136+
11341137
// 值类型补齐 Equals
11351138
if (!tyX.IsValueType ||
1136-
tyX.Def.FindMethod("Equals") != null &&
1137-
tyX.Def.FindMethod("Equals", MethodSig.CreateInstance(CorLibTypes.Boolean, CorLibTypes.Object)) != null)
1139+
tyX.Def.FindMethod(kEquals) != null &&
1140+
tyX.Def.FindMethod(kEquals, MethodSig.CreateInstance(CorLibTypes.Boolean, CorLibTypes.Object)) != null)
11381141
return;
11391142

11401143
var objTyDef = CorLibTypes.Object.TypeRef.ResolveTypeDef();
1141-
var objMet = objTyDef.FindMethod("Equals");
1144+
var objMet = objTyDef.FindMethod(kEquals);
11421145
MethodDefUser metDef = new MethodDefUser(objMet.Name, objMet.MethodSig, objMet.Attributes);
11431146
metDef.IsReuseSlot = true;
11441147
tyX.Def.Methods.Add(metDef);
11451148

11461149
var body = metDef.Body = new CilBody();
11471150
var insts = body.Instructions;
11481151

1149-
var metIntTyID = objTyDef.FindMethod("GetInternalTypeID");
1150-
Debug.Assert(metIntTyID != null);
1152+
var metGetTyID = objTyDef.FindMethod("GetInternalTypeID");
1153+
Debug.Assert(metGetTyID != null);
11511154
var metCanCmpBits = objTyDef.FindMethod("CanCompareBits");
11521155
Debug.Assert(metCanCmpBits != null);
11531156
var metFastEqChk = objTyDef.FindMethod("FastEqualsCheck");
@@ -1157,9 +1160,9 @@ private void TryAddEquals(TypeX tyX)
11571160
insts.Add(OpCodes.Brfalse.ToInstruction( /**/));
11581161

11591162
insts.Add(OpCodes.Ldarg_0.ToInstruction());
1160-
insts.Add(OpCodes.Call.ToInstruction(metIntTyID));
1163+
insts.Add(OpCodes.Call.ToInstruction(metGetTyID));
11611164
insts.Add(OpCodes.Ldarg_1.ToInstruction());
1162-
insts.Add(OpCodes.Call.ToInstruction(metIntTyID));
1165+
insts.Add(OpCodes.Call.ToInstruction(metGetTyID));
11631166
insts.Add(OpCodes.Bne_Un.ToInstruction(/**/));
11641167

11651168
insts.Add(OpCodes.Ldarg_0.ToInstruction());

0 commit comments

Comments
 (0)