@@ -19,22 +19,24 @@ public ArrayGenerator(Type type, int length)
1919
2020 public object Generate ( in GenerationContext context )
2121 {
22- context . TypeStack . Enter ( Type ) ;
23- var elemType = Type . GetElementType ( ) ;
24- var generator = context . GetGenerator ( elemType ) ;
25- var rank = Type . GetArrayRank ( ) ;
26-
27- var array = Array . CreateInstance ( elemType , Enumerable . Range ( 0 , rank ) . Select ( _ => length ) . ToArray ( ) ) ;
28- switch ( rank )
22+ using ( var scope = context . TypeStack . Enter ( Type ) )
2923 {
30- case 1 : SetOne ( array , generator , context ) ; break ;
31- case 2 : SetTwo ( array , generator , context ) ; break ;
32- case 3 : SetThree ( array , generator , context ) ; break ;
33- default :
34- throw new InvalidOperationException ( $ "Array rank:{ rank } is not supported.") ;
35- }
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+ }
3637
37- return array ;
38+ return array ;
39+ }
3840 }
3941
4042 void SetOne ( Array array , IGenerator generator , GenerationContext context )
@@ -86,12 +88,14 @@ public ArraySegmentGenerator(Type type, int length)
8688
8789 public object Generate ( in GenerationContext context )
8890 {
89- context . TypeStack . Enter ( Type ) ;
90- var elemType = type . GetGenericArguments ( ) [ 0 ] ;
91- 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 ( ) ) ;
9295
93- var innerArray = arrayGenerator . Generate ( context ) ;
94- return ReflectionHelper . CreateInstance ( type , new [ ] { innerArray } ) ;
96+ var innerArray = arrayGenerator . Generate ( context ) ;
97+ return ReflectionHelper . CreateInstance ( type , new [ ] { innerArray } ) ;
98+ }
9599 }
96100 }
97101
@@ -111,17 +115,19 @@ public ListGenerator(Type type, int length)
111115
112116 public object Generate ( in GenerationContext context )
113117 {
114- context . TypeStack . Enter ( Type ) ;
115- var elemType = type . GetGenericArguments ( ) [ 0 ] ;
116- var generator = context . GetGenerator ( elemType ) ;
117-
118- var list = ReflectionHelper . CreateInstance ( type ) as IList ;
119- for ( int i = 0 ; i < length ; i ++ )
118+ using ( var scope = context . TypeStack . Enter ( Type ) )
120119 {
121- list . Add ( generator . Generate ( context ) ) ;
122- }
120+ var elemType = type . GetGenericArguments ( ) [ 0 ] ;
121+ var generator = context . GetGenerator ( elemType ) ;
123122
124- 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+ }
125131 }
126132 }
127133
@@ -141,20 +147,22 @@ public DictionaryGenerator(Type type, int length)
141147
142148 public object Generate ( in GenerationContext context )
143149 {
144- var genArgs = type . GetGenericArguments ( ) ;
145- var keyType = genArgs [ 0 ] ;
146- var valueType = genArgs [ 1 ] ;
147- var keyGenerator = context . GetGenerator ( keyType ) ;
148- var valueGenerator = context . GetGenerator ( valueType ) ;
149- context . TypeStack . Enter ( Type ) ;
150-
151- var dict = ReflectionHelper . CreateInstance ( type ) as IDictionary ;
152- for ( int i = 0 ; i < length ; i ++ )
150+ using ( var scope = context . TypeStack . Enter ( Type ) )
153151 {
154- dict [ keyGenerator . Generate ( context ) ] = valueGenerator . Generate ( context ) ;
155- }
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+ }
156163
157- return dict ;
164+ return dict ;
165+ }
158166 }
159167 }
160168
@@ -173,19 +181,21 @@ public GenericReflectionCollectionGeneratorBase(Type type, int length)
173181
174182 public object Generate ( in GenerationContext context )
175183 {
176- context . TypeStack . Enter ( Type ) ;
177- var elemType = Type . GetGenericArguments ( ) [ 0 ] ;
178- 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 ) ;
179188
180- var add = Type . GetMethod ( AddMethodName , new [ ] { elemType } ) ;
189+ var add = Type . GetMethod ( AddMethodName , new [ ] { elemType } ) ;
181190
182- var collection = ReflectionHelper . CreateInstance ( Type ) ;
183- for ( int i = 0 ; i < length ; i ++ )
184- {
185- add . Invoke ( collection , new [ ] { generator . Generate ( context ) } ) ;
186- }
191+ var collection = ReflectionHelper . CreateInstance ( Type ) ;
192+ for ( int i = 0 ; i < length ; i ++ )
193+ {
194+ add . Invoke ( collection , new [ ] { generator . Generate ( context ) } ) ;
195+ }
187196
188- return collection ;
197+ return collection ;
198+ }
189199 }
190200 }
191201
@@ -254,13 +264,15 @@ public InterfaceLookupGenerator(Type type, int length)
254264
255265 public object Generate ( in GenerationContext context )
256266 {
257- context . TypeStack . Enter ( Type ) ;
258- var genType = type . GenericTypeArguments ;
259- var generator = context . GetGenerator ( typeof ( Dictionary < , > ) . MakeGenericType ( new [ ] { genType [ 0 ] , genType [ 1 ] . MakeArrayType ( ) } ) ) ;
260- 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 ) ;
261272
262- var lookup = ReflectionHelper . CreateInstance ( typeof ( PseudoLookup < , > ) . MakeGenericType ( genType ) , new [ ] { dictionary } ) ;
263- return lookup ;
273+ var lookup = ReflectionHelper . CreateInstance ( typeof ( PseudoLookup < , > ) . MakeGenericType ( genType ) , new [ ] { dictionary } ) ;
274+ return lookup ;
275+ }
264276 }
265277
266278 // require to type hint to use in IL2CPP
0 commit comments