Source code for angr.storage.memory_mixins.keyvalue_memory.keyvalue_memory_mixin

from .. import MemoryMixin


[docs]class TypedVariable: __slots__ = ( "type", "value", )
[docs] def __init__(self, type_, value): self.type = type_ self.value = value
[docs]class KeyValueMemoryMixin(MemoryMixin):
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._store = {}
[docs] def load(self, key, none_if_missing=False, **kwargs): if none_if_missing and key not in self._store: return None return self._store[key].value
[docs] def store(self, key, data, type_=None, **kwargs): self._store[key] = TypedVariable(type_, data)
@MemoryMixin.memo def copy(self, memo): o: "KeyValueMemoryMixin" = super().copy(memo) o._store = self._store.copy() return o def __str__(self): return "\n".join([f"{k}: {v.value} ({v.type})" for k, v in self._store.items()])