Exemple #1
0
        public override IList <PdbConstant> GetConstants(ModuleDef module, GenericParamContext gpContext)
        {
            if (constantList >= constantListEnd)
            {
                return(emptyPdbConstants);
            }
            Debug.Assert(constantsMetaData != null);

            var res = new PdbConstant[constantListEnd - constantList];
            int w   = 0;

            for (int i = 0; i < res.Length; i++)
            {
                uint rid = constantList + (uint)i;
                uint nameOffset;
                uint signature = constantsMetaData.TablesStream.ReadLocalConstantRow2(rid, out nameOffset);
                var  name      = constantsMetaData.StringsStream.Read(nameOffset);
                using (var stream = constantsMetaData.BlobStream.CreateStream(signature)) {
                    var     localConstantSigBlobReader = new LocalConstantSigBlobReader(module, stream, gpContext);
                    TypeSig type;
                    object  value;
                    bool    b = localConstantSigBlobReader.Read(out type, out value);
                    Debug.Assert(b);
                    if (b)
                    {
                        var pdbConstant = new PdbConstant(name, type, value);
                        int token       = new MDToken(Table.LocalConstant, rid).ToInt32();
                        owner.GetCustomDebugInfos(token, gpContext, pdbConstant.CustomDebugInfos);
                        res[w++] = pdbConstant;
                    }
                    Debug.Assert(stream.Position == stream.Length);
                }
            }
            if (res.Length != w)
            {
                Array.Resize(ref res, w);
            }
            return(res);
        }