Skip to content

Commit de7fdbf

Browse files
committed
Replace TypeSystem-properties with own
1 parent a11928e commit de7fdbf

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

DeepCopy.Fody/Copy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ private IEnumerable<Instruction> Copy(TypeReference type, ValueSource source, Va
7676
list.Add(Instruction.Create(OpCodes.Call, extensionMethod));
7777
}
7878
}
79-
else if (typeToken == TypeSystem.StringDefinition.MetadataToken)
79+
else if (typeToken == StringDefinition.MetadataToken)
8080
{
8181
using (target.Build(list, out var next))
8282
{
@@ -99,7 +99,7 @@ private IEnumerable<Instruction> Copy(TypeReference type, ValueSource source, Va
9999
else if (type.IsImplementing(typeof(ISet<>)))
100100
list.AddRange(CopySet(type, source, target));
101101

102-
else if (typeToken == TypeSystem.ObjectDefinition.MetadataToken)
102+
else if (typeToken == ObjectDefinition.MetadataToken)
103103
throw new WeavingException(Message.NotSupported(type));
104104

105105
else

DeepCopy.Fody/CopyArray.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ private IEnumerable<Instruction> CopyArray(PropertyDefinition property)
1212
var type = ((ArrayType) property.PropertyType).GetElementType();
1313

1414
var loopStart = Instruction.Create(OpCodes.Nop);
15-
var index = NewVariable(TypeSystem.Int32Definition);
15+
var index = NewVariable(Int32Definition);
1616
var conditionStart = Instruction.Create(OpCodes.Ldloc, index);
1717

1818
var list = new List<Instruction>

DeepCopy.Fody/ModuleWeaver.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ private void ExecuteInjectDeepCopy()
8383

8484
private void AddDeepConstructor(TypeDefinition type)
8585
{
86-
var constructor = new MethodDefinition(ConstructorName, ConstructorAttributes, TypeSystem.VoidReference);
86+
var constructor = new MethodDefinition(ConstructorName, ConstructorAttributes, VoidDefinition);
8787
constructor.Parameters.Add(new ParameterDefinition(type));
8888

8989
var processor = constructor.Body.GetILProcessor();
9090

9191
Func<TypeReference, IEnumerable<Instruction>> baseCopyFunc = null;
9292

9393
var baseElementType = type.BaseType.GetElementType().Resolve();
94-
if (IsType(baseElementType, typeof(object)))
94+
if (baseElementType.MetadataToken == ObjectDefinition.MetadataToken)
9595
{
9696
processor.Emit(OpCodes.Ldarg_0);
9797
processor.Emit(OpCodes.Call, ImportDefaultConstructor(ImportType(typeof(object))));
@@ -125,9 +125,7 @@ private void AddDeepConstructor(TypeDefinition type)
125125
baseCopyFunc = reference => CopySet(reference, ValueSource.New(), ValueTarget.New());
126126
}
127127
else
128-
throw new WeavingException(Message.NoCopyConstructorFound(type.BaseType)
129-
+ Environment.NewLine
130-
+ $"AddDeepConstructor to {type} : {type.BaseType}={type.BaseType.Resolve().MetadataToken} ({TypeSystem.ObjectDefinition.MetadataToken})");
128+
throw new WeavingException(Message.NoCopyConstructorFound(type.BaseType));
131129

132130
InsertCopyInstructions(type, constructor, baseCopyFunc);
133131

DeepCopy.Fody/ModuleWeaverUtils.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,22 @@ namespace DeepCopy.Fody
1111
{
1212
public partial class ModuleWeaver
1313
{
14+
#region TypeSystem-Replacements
15+
16+
private TypeDefinition _stringDefinition;
17+
private TypeDefinition _objectDefinition;
18+
private TypeDefinition _voidDefinition;
19+
private TypeDefinition _int32Definition;
20+
private TypeDefinition StringDefinition => _stringDefinition ??= ImportType(typeof(string)).Resolve();
21+
private TypeDefinition ObjectDefinition => _objectDefinition ??= ImportType(typeof(object)).Resolve();
22+
private TypeDefinition VoidDefinition => _voidDefinition ??= ImportType(typeof(void)).Resolve();
23+
private TypeDefinition Int32Definition => _int32Definition ??= ImportType(typeof(int)).Resolve();
24+
25+
#endregion
26+
1427
private MethodReference NewConstructor(TypeReference type, TypeReference parameter = null)
1528
{
16-
var constructor = new MethodReference(ConstructorName, TypeSystem.VoidDefinition, type) { HasThis = true };
29+
var constructor = new MethodReference(ConstructorName, VoidDefinition, type) { HasThis = true };
1730
if (parameter != null)
1831
constructor.Parameters.Add(new ParameterDefinition(parameter));
1932
return constructor;
@@ -65,9 +78,9 @@ internal MethodReference ImportMethod(TypeReference type, string name, params Ty
6578
private MethodReference StringCopy()
6679
{
6780
return ModuleDefinition.ImportReference(
68-
new MethodReference(nameof(string.Copy), TypeSystem.StringDefinition, TypeSystem.StringDefinition)
81+
new MethodReference(nameof(string.Copy), StringDefinition, StringDefinition)
6982
{
70-
Parameters = { new ParameterDefinition(TypeSystem.StringDefinition) }
83+
Parameters = { new ParameterDefinition(StringDefinition) }
7184
});
7285
}
7386

0 commit comments

Comments
 (0)