public override string Display() { StringBuilder funcDef = new StringBuilder(); funcDef.Append($"func {this.Name}("); DefsAndRefsStream defsAndRefsStream = DefsAndRefsStream.GetInstance(); List <ParamTableRow> paramTableRows = defsAndRefsStream.GetParameterTableRowsFromOffset(this.ParamsListIndex); MethodDefSignature method = this.GetBlobStream().GetMethodDefValue(this.Signature); for (var i = 0; i < paramTableRows.Count; i++) { ParamTableRow paramTableRow = paramTableRows[i]; if (i < method.ParameterTypes.Count) { ParameterType parameterType = method.ParameterTypes[i]; funcDef.Append($"{(i == 0 ? "" : ",")} {parameterType.Type.ToString()} {paramTableRow.Display()}"); } else { funcDef.Append($"{(i == 0 ? "" : ",")}{paramTableRow.Display()}"); } } funcDef.Append($") -> {method.ReturnType.Type.ToString()}"); return(funcDef.ToString()); }
public MethodDefSignature GetMethodDefValue(uint signatureOffset) { CachedAssemblyBuffer.SetIndexPointer(signatureOffset); MethodDefSignature signature = new MethodDefSignature(); signature.PopulateFields(CachedAssemblyBuffer); return(signature); }
private void LoadGenericParameters() { CallingConventions callingConvention = MethodDefSignature.GetCallingConvention( _blobStream.GetSignitureContents((int)_methodToBuild.SignitureBlob.Value) ); bool isGenericMethod = (callingConvention & CallingConventions.Generic) != 0; if (isGenericMethod) { List <GenericParamMetadataTableRow> genericParameters = _metadataStream.Tables.GetGenericParametersFor( MetadataTables.MethodDef, _rowIndex + 1); if (genericParameters.Count > 0) { _methodToBuild.IsGeneric = true; foreach (GenericParamMetadataTableRow genParam in genericParameters) { _methodToBuild.GenericTypes.Add( GenericTypeRef.CreateFromMetadata(_references, genParam) ); } } } }