def parse_symbol_table()

in cbmc_viewer/symbol_table.py [0:0]


def parse_symbol_table(definitions, wkdir):
    """Extract symbols and source locations from symbol table definitions."""

    def nonnull(items):
        nonnull_items = [item for item in items if item is not None]
        if nonnull_items:
            return nonnull_items[0]
        return None

    def nonnull_pair(items):
        nonnull_items = [item for item in items if item is not None
                         and (item[0] is not None or item[1] is not None)]
        if nonnull_items:
            return nonnull_items[0]
        return None, None

    def symbol(dfn):
        return nonnull([parse_symbol(line) for line in dfn])

    def pretty(dfn):
        return nonnull([parse_pretty_name(line) for line in dfn])

    def location(dfn, wkdir):
        return nonnull_pair([parse_location(line, wkdir) for line in dfn])

    def parse_definition(dfn, wkdir):
        loc = location(dfn, wkdir)
        return {
            'symbol': pretty(dfn) or symbol(dfn),
            'file': loc[0],
            'line': loc[1]
        }

    return [parse_definition(dfn, wkdir) for dfn in definitions]