@@ -141,32 +141,44 @@ public static string Escape(string identifier)
141141 return $ "'{ EscapeString ( identifier ) . Replace ( "'" , "\\ '" ) } '";
142142 }
143143
144- public static void WriteParameterReference ( ITextOutput writer , MetadataReader metadata , MethodDefinitionHandle handle , int sequence )
144+ public static void WriteParameterReference ( ITextOutput writer , MetadataReader metadata , MethodDefinitionHandle handle , int index )
145145 {
146- var methodDefinition = metadata . GetMethodDefinition ( handle ) ;
147- var signature = methodDefinition . DecodeSignature ( new FullTypeNameSignatureDecoder ( metadata ) , default ) ;
148- var parameters = methodDefinition . GetParameters ( ) . Select ( p => metadata . GetParameter ( p ) ) . ToArray ( ) ;
149- var signatureHeader = signature . Header ;
150- int index = sequence ;
151- if ( signatureHeader . IsInstance && signature . ParameterTypes . Length == parameters . Length )
146+ string name = GetParameterName ( index ) ;
147+ if ( name == null )
152148 {
153- index -- ;
149+ writer . WriteLocalReference ( index . ToString ( ) , "param_" + index ) ;
154150 }
155- if ( index < 0 || index >= parameters . Length )
151+ else
156152 {
157- writer . WriteLocalReference ( sequence . ToString ( ) , "param_" + index ) ;
153+ writer . WriteLocalReference ( name , "param_" + index ) ;
158154 }
159- else
155+
156+ string GetParameterName ( int parameterNumber )
160157 {
161- var param = parameters [ index ] ;
162- if ( param . Name . IsNil )
158+ var methodDefinition = metadata . GetMethodDefinition ( handle ) ;
159+ if ( ( methodDefinition . Attributes & System . Reflection . MethodAttributes . Static ) != 0 )
163160 {
164- writer . WriteLocalReference ( sequence . ToString ( ) , "param_" + index ) ;
161+ parameterNumber ++ ;
165162 }
166- else
163+ foreach ( var p in methodDefinition . GetParameters ( ) )
167164 {
168- writer . WriteLocalReference ( Escape ( metadata . GetString ( param . Name ) ) , "param_" + index ) ;
165+ var param = metadata . GetParameter ( p ) ;
166+ if ( param . SequenceNumber < parameterNumber )
167+ {
168+ continue ;
169+ }
170+ else if ( param . SequenceNumber == parameterNumber )
171+ {
172+ if ( param . Name . IsNil )
173+ return null ;
174+ return Escape ( metadata . GetString ( param . Name ) ) ;
175+ }
176+ else
177+ {
178+ break ;
179+ }
169180 }
181+ return null ;
170182 }
171183 }
172184
0 commit comments