'Return a flat list of ``int`` or ``str`` objects which can be
passed to :func:`.flat`.
Arguments:
addr(int): Address at which the data starts in memory.
If :const:`None`, ``self.addr`` is used.'

def resolve(self, addr=None):

    if (addr is None):
        addr = self.address
    with self.local(addr):
        self.address = addr
        rv = ([None] * len(self.values))
        for (i, value) in enumerate(self.values):
            if isinstance(value, int):
                rv[i] = value
            if isinstance(value, str):
                value += '\x00'
                while (len(value) % context.bytes):
                    value += '$'
                rv[i] = value
            if isinstance(value, Unresolved):
                rv[i] = value.address
                rv.extend(value.resolve())
    return rv
