structstd.debug.Dwarf.CompileUnit.SrcLocCache[src]

Types

TypeLineTable[src]

Source Code

Source code
pub const LineTable = std.AutoArrayHashMapUnmanaged(u64, LineEntry)

Fields

line_table: LineTable
directories: []const FileEntry
files: []FileEntry
version: u16

Functions

FunctionfindSource[src]

pub fn findSource(slc: *const SrcLocCache, address: u64) !LineEntry

Parameters

slc: *const SrcLocCache
address: u64

Source Code

Source code
pub fn findSource(slc: *const SrcLocCache, address: u64) !LineEntry {
    const index = std.sort.upperBound(u64, slc.line_table.keys(), address, struct {
        fn order(context: u64, item: u64) std.math.Order {
            return std.math.order(context, item);
        }
    }.order);
    if (index == 0) return missing();
    return slc.line_table.values()[index - 1];
}

Source Code

Source code
pub const SrcLocCache = struct {
    line_table: LineTable,
    directories: []const FileEntry,
    files: []FileEntry,
    version: u16,

    pub const LineTable = std.AutoArrayHashMapUnmanaged(u64, LineEntry);

    pub const LineEntry = struct {
        line: u32,
        column: u32,
        /// Offset by 1 depending on whether Dwarf version is >= 5.
        file: u32,

        pub const invalid: LineEntry = .{
            .line = undefined,
            .column = undefined,
            .file = std.math.maxInt(u32),
        };

        pub fn isInvalid(le: LineEntry) bool {
            return le.file == invalid.file;
        }
    };

    pub fn findSource(slc: *const SrcLocCache, address: u64) !LineEntry {
        const index = std.sort.upperBound(u64, slc.line_table.keys(), address, struct {
            fn order(context: u64, item: u64) std.math.Order {
                return std.math.order(context, item);
            }
        }.order);
        if (index == 0) return missing();
        return slc.line_table.values()[index - 1];
    }
}