@@ -19,21 +19,24 @@ public ArrayGenerator(Type type, int length)
1919
2020 public object Generate ( in GenerationContext context )
2121 {
22- var elemType = Type . GetElementType ( ) ;
23- var generator = context . GetGenerator ( elemType ) ;
24- var rank = Type . GetArrayRank ( ) ;
25-
26- var array = Array . CreateInstance ( elemType , Enumerable . Range ( 0 , rank ) . Select ( _ => length ) . ToArray ( ) ) ;
27- switch ( rank )
22+ using ( var scope = context . TypeStack . Enter ( Type ) )
2823 {
29- case 1 : SetOne ( array , generator , context ) ; break ;
30- case 2 : SetTwo ( array , generator , context ) ; break ;
31- case 3 : SetThree ( array , generator , context ) ; break ;
32- default :
33- throw new InvalidOperationException ( $ "Array rank:{ rank } is not supported.") ;
34- }
24+ var elemType = Type . GetElementType ( ) ;
25+ var generator = context . GetGenerator ( elemType ) ;
26+ var rank = Type . GetArrayRank ( ) ;
27+
28+ var array = Array . CreateInstance ( elemType , Enumerable . Range ( 0 , rank ) . Select ( _ => length ) . ToArray ( ) ) ;
29+ switch ( rank )
30+ {
31+ case 1 : SetOne ( array , generator , context ) ; break ;
32+ case 2 : SetTwo ( array , generator , context ) ; break ;
33+ case 3 : SetThree ( array , generator , context ) ; break ;
34+ default :
35+ throw new InvalidOperationException ( $ "Array rank:{ rank } is not supported.") ;
36+ }
3537
36- return array ;
38+ return array ;
39+ }
3740 }
3841
3942 void SetOne ( Array array , IGenerator generator , GenerationContext context )
@@ -85,11 +88,14 @@ public ArraySegmentGenerator(Type type, int length)
8588
8689 public object Generate ( in GenerationContext context )
8790 {
88- var elemType = type . GetGenericArguments ( ) [ 0 ] ;
89- var arrayGenerator = context . GetGenerator ( elemType . MakeArrayType ( ) ) ;
91+ using ( var scope = context . TypeStack . Enter ( Type ) )
92+ {
93+ var elemType = type . GetGenericArguments ( ) [ 0 ] ;
94+ var arrayGenerator = context . GetGenerator ( elemType . MakeArrayType ( ) ) ;
9095
91- var innerArray = arrayGenerator . Generate ( context ) ;
92- return ReflectionHelper . CreateInstance ( type , new [ ] { innerArray } ) ;
96+ var innerArray = arrayGenerator . Generate ( context ) ;
97+ return ReflectionHelper . CreateInstance ( type , new [ ] { innerArray } ) ;
98+ }
9399 }
94100 }
95101
@@ -109,16 +115,19 @@ public ListGenerator(Type type, int length)
109115
110116 public object Generate ( in GenerationContext context )
111117 {
112- var elemType = type . GetGenericArguments ( ) [ 0 ] ;
113- var generator = context . GetGenerator ( elemType ) ;
114-
115- var list = ReflectionHelper . CreateInstance ( type ) as IList ;
116- for ( int i = 0 ; i < length ; i ++ )
118+ using ( var scope = context . TypeStack . Enter ( Type ) )
117119 {
118- list . Add ( generator . Generate ( context ) ) ;
119- }
120+ var elemType = type . GetGenericArguments ( ) [ 0 ] ;
121+ var generator = context . GetGenerator ( elemType ) ;
120122
121- return list ;
123+ var list = ReflectionHelper . CreateInstance ( type ) as IList ;
124+ for ( int i = 0 ; i < length ; i ++ )
125+ {
126+ list . Add ( generator . Generate ( context ) ) ;
127+ }
128+
129+ return list ;
130+ }
122131 }
123132 }
124133
@@ -138,19 +147,22 @@ public DictionaryGenerator(Type type, int length)
138147
139148 public object Generate ( in GenerationContext context )
140149 {
141- var genArgs = type . GetGenericArguments ( ) ;
142- var keyType = genArgs [ 0 ] ;
143- var valueType = genArgs [ 1 ] ;
144- var keyGenerator = context . GetGenerator ( keyType ) ;
145- var valueGenerator = context . GetGenerator ( valueType ) ;
146-
147- var dict = ReflectionHelper . CreateInstance ( type ) as IDictionary ;
148- for ( int i = 0 ; i < length ; i ++ )
150+ using ( var scope = context . TypeStack . Enter ( Type ) )
149151 {
150- dict [ keyGenerator . Generate ( context ) ] = valueGenerator . Generate ( context ) ;
151- }
152+ var genArgs = type . GetGenericArguments ( ) ;
153+ var keyType = genArgs [ 0 ] ;
154+ var valueType = genArgs [ 1 ] ;
155+ var keyGenerator = context . GetGenerator ( keyType ) ;
156+ var valueGenerator = context . GetGenerator ( valueType ) ;
157+
158+ var dict = ReflectionHelper . CreateInstance ( type ) as IDictionary ;
159+ for ( int i = 0 ; i < length ; i ++ )
160+ {
161+ dict [ keyGenerator . Generate ( context ) ] = valueGenerator . Generate ( context ) ;
162+ }
152163
153- return dict ;
164+ return dict ;
165+ }
154166 }
155167 }
156168
@@ -169,18 +181,21 @@ public GenericReflectionCollectionGeneratorBase(Type type, int length)
169181
170182 public object Generate ( in GenerationContext context )
171183 {
172- var elemType = Type . GetGenericArguments ( ) [ 0 ] ;
173- var generator = context . GetGenerator ( elemType ) ;
184+ using ( var scope = context . TypeStack . Enter ( Type ) )
185+ {
186+ var elemType = Type . GetGenericArguments ( ) [ 0 ] ;
187+ var generator = context . GetGenerator ( elemType ) ;
174188
175- var add = Type . GetMethod ( AddMethodName , new [ ] { elemType } ) ;
189+ var add = Type . GetMethod ( AddMethodName , new [ ] { elemType } ) ;
176190
177- var collection = ReflectionHelper . CreateInstance ( Type ) ;
178- for ( int i = 0 ; i < length ; i ++ )
179- {
180- add . Invoke ( collection , new [ ] { generator . Generate ( context ) } ) ;
181- }
191+ var collection = ReflectionHelper . CreateInstance ( Type ) ;
192+ for ( int i = 0 ; i < length ; i ++ )
193+ {
194+ add . Invoke ( collection , new [ ] { generator . Generate ( context ) } ) ;
195+ }
182196
183- return collection ;
197+ return collection ;
198+ }
184199 }
185200 }
186201
@@ -249,12 +264,15 @@ public InterfaceLookupGenerator(Type type, int length)
249264
250265 public object Generate ( in GenerationContext context )
251266 {
252- var genType = type . GenericTypeArguments ;
253- var generator = context . GetGenerator ( typeof ( Dictionary < , > ) . MakeGenericType ( new [ ] { genType [ 0 ] , genType [ 1 ] . MakeArrayType ( ) } ) ) ;
254- var dictionary = generator . Generate ( context ) ;
267+ using ( var scope = context . TypeStack . Enter ( Type ) )
268+ {
269+ var genType = type . GenericTypeArguments ;
270+ var generator = context . GetGenerator ( typeof ( Dictionary < , > ) . MakeGenericType ( new [ ] { genType [ 0 ] , genType [ 1 ] . MakeArrayType ( ) } ) ) ;
271+ var dictionary = generator . Generate ( context ) ;
255272
256- var lookup = ReflectionHelper . CreateInstance ( typeof ( PseudoLookup < , > ) . MakeGenericType ( genType ) , new [ ] { dictionary } ) ;
257- return lookup ;
273+ var lookup = ReflectionHelper . CreateInstance ( typeof ( PseudoLookup < , > ) . MakeGenericType ( genType ) , new [ ] { dictionary } ) ;
274+ return lookup ;
275+ }
258276 }
259277
260278 // require to type hint to use in IL2CPP
0 commit comments