Mono.Debugger.Backend.DwarfReader.Attribute.read_data C# (CSharp) Method

read_data() private method

private read_data ( ) : object
return object
            object read_data()
            {
                DwarfBinaryReader reader = dwarf.DebugInfoReader;

                switch (form) {
                case DwarfForm.flag:
                    data_size = 1;
                    return reader.PeekByte (offset) != 0;

                case DwarfForm.ref1:
                case DwarfForm.data1:
                    data_size = 1;
                    return (long) reader.PeekByte (offset);

                case DwarfForm.ref2:
                case DwarfForm.data2:
                    data_size = 2;
                    return (long) reader.PeekInt16 (offset);

                case DwarfForm.ref4:
                case DwarfForm.data4:
                    data_size = 4;
                    return (long) reader.PeekInt32 (offset);

                case DwarfForm.ref8:
                case DwarfForm.data8:
                    data_size = 8;
                    return (long) reader.PeekInt64 (offset);

                case DwarfForm.addr:
                    data_size = dwarf.AddressSize;
                    return (long) reader.PeekAddress (offset);

                case DwarfForm.cstring: {
                    string retval = reader.PeekString (offset);
                    data_size = retval.Length + 1;
                    return retval;
                }

                case DwarfForm.block1:
                    data_size = reader.PeekByte (offset) + 1;
                    return reader.PeekBuffer (offset + 1, data_size - 1);

                case DwarfForm.block2:
                    data_size = reader.PeekInt16 (offset) + 2;
                    return reader.PeekBuffer (offset + 2, data_size - 2);

                case DwarfForm.block4:
                    data_size = reader.PeekInt32 (offset) + 4;
                    return reader.PeekBuffer (offset + 4, data_size - 4);

                case DwarfForm.block: {
                    int size;
                    data_size = reader.PeekLeb128 (offset, out size);
                    return reader.PeekBuffer (offset + size, data_size);
                }

                case DwarfForm.strp: {
                    if (dwarf.DebugStrReader == null)
                        throw new DwarfException (
                            dwarf.bfd, "Got DW_FORM_strp, but " +
                            "'.debug_str' section is missing.");
                    long str_offset = reader.PeekOffset (offset, out data_size);
                    return dwarf.DebugStrReader.PeekString (str_offset);
                }

                case DwarfForm.ref_udata:
                case DwarfForm.udata:
                case DwarfForm.sdata:
                    return (long) reader.PeekLeb128 (offset, out data_size);

                case DwarfForm.ref_addr:
                    return (long) reader.PeekOffset (offset, out data_size);

                default:
                    throw new DwarfException (
                        dwarf.bfd, "Unknown DW_FORM: 0x{0:x}",
                        (int) form);
                }
            }