1
- using System . Collections . Generic ;
1
+ using AsmResolver . DotNet ;
2
+ using AsmResolver . DotNet . Signatures ;
2
3
using Il2CppInterop . Generator . Extensions ;
3
4
using Il2CppInterop . Generator . Utils ;
4
- using Mono . Cecil ;
5
5
6
6
namespace Il2CppInterop . Generator . Contexts ;
7
7
@@ -28,7 +28,7 @@ public AssemblyRewriteContext(RewriteGlobalContext globalContext, AssemblyDefini
28
28
NewAssembly = newAssembly ;
29
29
GlobalContext = globalContext ;
30
30
31
- Imports = ImportsMap . GetOrCreate ( newAssembly . MainModule ,
31
+ Imports = ImportsMap . GetOrCreate ( newAssembly . ManifestModule ! ,
32
32
mod => new RuntimeAssemblyReferences ( mod , globalContext ) ) ;
33
33
}
34
34
@@ -57,63 +57,66 @@ public void RegisterTypeRewrite(TypeRewriteContext context)
57
57
myNameTypeMap [ ( context . OriginalType ?? context . NewType ) . FullName ] = context ;
58
58
}
59
59
60
- public MethodReference RewriteMethodRef ( MethodReference methodRef )
60
+ public IMethodDefOrRef RewriteMethodRef ( IMethodDefOrRef methodRef )
61
61
{
62
- var newType = GlobalContext . GetNewTypeForOriginal ( methodRef . DeclaringType . Resolve ( ) ) ;
63
- return newType . GetMethodByOldMethod ( methodRef . Resolve ( ) ) . NewMethod ;
62
+ var newType = GlobalContext . GetNewTypeForOriginal ( methodRef . DeclaringType ! . Resolve ( ) ! ) ;
63
+ var newMethod = newType . GetMethodByOldMethod ( methodRef . Resolve ( ) ! ) . NewMethod ;
64
+ return NewAssembly . ManifestModule ! . DefaultImporter . ImportMethod ( newMethod ) ;
64
65
}
65
66
66
- public TypeReference RewriteTypeRef ( TypeReference ? typeRef )
67
+ public ITypeDefOrRef RewriteTypeRef ( ITypeDescriptor typeRef )
67
68
{
68
- if ( typeRef == null ) return Imports . Il2CppObjectBase ;
69
+ return RewriteTypeRef ( typeRef ? . ToTypeSignature ( ) ) . ToTypeDefOrRef ( ) ;
70
+ }
71
+
72
+ public TypeSignature RewriteTypeRef ( TypeSignature ? typeRef )
73
+ {
74
+ if ( typeRef == null )
75
+ return Imports . Il2CppObjectBase ;
69
76
70
- var sourceModule = NewAssembly . MainModule ;
77
+ var sourceModule = NewAssembly . ManifestModule ! ;
71
78
72
- if ( typeRef is ArrayType arrayType )
79
+ if ( typeRef is ArrayBaseTypeSignature arrayType )
73
80
{
74
81
if ( arrayType . Rank != 1 )
75
82
return Imports . Il2CppObjectBase ;
76
83
77
- var elementType = arrayType . ElementType ;
84
+ var elementType = arrayType . BaseType ;
78
85
if ( elementType . FullName == "System.String" )
79
86
return Imports . Il2CppStringArray ;
80
87
81
88
var convertedElementType = RewriteTypeRef ( elementType ) ;
82
- if ( elementType . IsGenericParameter )
83
- return new GenericInstanceType ( Imports . Il2CppArrayBase ) { GenericArguments = { convertedElementType } } ;
89
+ if ( elementType is GenericParameterSignature )
90
+ return new GenericInstanceTypeSignature ( Imports . Il2CppArrayBase . ToTypeDefOrRef ( ) , false , convertedElementType ) ;
84
91
85
- return new GenericInstanceType ( convertedElementType . IsValueType
86
- ? Imports . Il2CppStructArray
87
- : Imports . Il2CppReferenceArray )
88
- { GenericArguments = { convertedElementType } } ;
92
+ return new GenericInstanceTypeSignature ( convertedElementType . IsValueType
93
+ ? Imports . Il2CppStructArray . ToTypeDefOrRef ( )
94
+ : Imports . Il2CppReferenceArray . ToTypeDefOrRef ( ) , false , convertedElementType ) ;
89
95
}
90
96
91
- if ( typeRef is GenericParameter genericParameter )
97
+ if ( typeRef is GenericParameterSignature genericParameter )
92
98
{
93
- var genericParameterDeclaringType = genericParameter . DeclaringType ;
94
- if ( genericParameterDeclaringType != null )
95
- return RewriteTypeRef ( genericParameterDeclaringType ) . GenericParameters [ genericParameter . Position ] ;
96
-
97
- return RewriteMethodRef ( genericParameter . DeclaringMethod ) . GenericParameters [ genericParameter . Position ] ;
99
+ return new GenericParameterSignature ( sourceModule , genericParameter . ParameterType , genericParameter . Index ) ;
98
100
}
99
101
100
- if ( typeRef is ByReferenceType byRef )
101
- return new ByReferenceType ( RewriteTypeRef ( byRef . ElementType ) ) ;
102
+ if ( typeRef is ByReferenceTypeSignature byRef )
103
+ return new ByReferenceTypeSignature ( RewriteTypeRef ( byRef . BaseType ) ) ;
102
104
103
- if ( typeRef is PointerType pointerType )
104
- return new PointerType ( RewriteTypeRef ( pointerType . ElementType ) ) ;
105
+ if ( typeRef is PointerTypeSignature pointerType )
106
+ return new PointerTypeSignature ( RewriteTypeRef ( pointerType . BaseType ) ) ;
105
107
106
- if ( typeRef is GenericInstanceType genericInstance )
108
+ if ( typeRef is GenericInstanceTypeSignature genericInstance )
107
109
{
108
- var newRef = new GenericInstanceType ( RewriteTypeRef ( genericInstance . ElementType ) ) ;
109
- foreach ( var originalParameter in genericInstance . GenericArguments )
110
- newRef . GenericArguments . Add ( RewriteTypeRef ( originalParameter ) ) ;
110
+ var genericType = RewriteTypeRef ( genericInstance . GenericType . ToTypeSignature ( ) ) . ToTypeDefOrRef ( ) ;
111
+ var newRef = new GenericInstanceTypeSignature ( genericType , genericType . IsValueType ) ;
112
+ foreach ( var originalParameter in genericInstance . TypeArguments )
113
+ newRef . TypeArguments . Add ( RewriteTypeRef ( originalParameter ) ) ;
111
114
112
115
return newRef ;
113
116
}
114
117
115
- if ( typeRef . IsPrimitive || typeRef . FullName == "System.TypedReference" )
116
- return sourceModule . ImportCorlibReference ( typeRef . Namespace , typeRef . Name ) ;
118
+ if ( typeRef . IsPrimitive ( ) || typeRef . FullName == "System.TypedReference" )
119
+ return sourceModule . ImportCorlibReference ( typeRef . FullName ) ;
117
120
118
121
if ( typeRef . FullName == "System.Void" )
119
122
return Imports . Module . Void ( ) ;
@@ -122,18 +125,18 @@ public TypeReference RewriteTypeRef(TypeReference? typeRef)
122
125
return Imports . Module . String ( ) ;
123
126
124
127
if ( typeRef . FullName == "System.Object" )
125
- return sourceModule . ImportReference ( GlobalContext . GetAssemblyByName ( "mscorlib" )
126
- . GetTypeByName ( "System.Object" ) . NewType ) ;
128
+ return sourceModule . DefaultImporter . ImportType ( GlobalContext . GetAssemblyByName ( "mscorlib" )
129
+ . GetTypeByName ( "System.Object" ) . NewType ) . ToTypeSignature ( ) ;
127
130
128
131
if ( typeRef . FullName == "System.Attribute" )
129
- return sourceModule . ImportReference ( GlobalContext . GetAssemblyByName ( "mscorlib" )
130
- . GetTypeByName ( "System.Attribute" ) . NewType ) ;
132
+ return sourceModule . DefaultImporter . ImportType ( GlobalContext . GetAssemblyByName ( "mscorlib" )
133
+ . GetTypeByName ( "System.Attribute" ) . NewType ) . ToTypeSignature ( ) ;
131
134
132
- var originalTypeDef = typeRef . Resolve ( ) ;
133
- var targetAssembly = GlobalContext . GetNewAssemblyForOriginal ( originalTypeDef . Module . Assembly ) ;
135
+ var originalTypeDef = typeRef . Resolve ( ) ! ;
136
+ var targetAssembly = GlobalContext . GetNewAssemblyForOriginal ( originalTypeDef . Module ! . Assembly ! ) ;
134
137
var target = targetAssembly . GetContextForOriginalType ( originalTypeDef ) . NewType ;
135
138
136
- return sourceModule . ImportReference ( target ) ;
139
+ return sourceModule . DefaultImporter . ImportType ( target ) . ToTypeSignature ( ) ;
137
140
}
138
141
139
142
public TypeRewriteContext GetTypeByName ( string name )
0 commit comments