コード例 #1
0
        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());
        }
コード例 #2
0
        public MethodDefSignature GetMethodDefValue(uint signatureOffset)
        {
            CachedAssemblyBuffer.SetIndexPointer(signatureOffset);

            MethodDefSignature signature = new MethodDefSignature();

            signature.PopulateFields(CachedAssemblyBuffer);

            return(signature);
        }
コード例 #3
0
            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)
                                );
                        }
                    }
                }
            }