| 1957 | return self._symbol_cache[key] |
| 1958 | |
| 1959 | def _build_symbol_cache(self): |
| 1960 | count = ctypes.c_ulonglong(0) |
| 1961 | self._symbol_list = core.BNGetSymbols(self._view.handle, count, None) |
| 1962 | assert self._symbol_list is not None, "core.BNGetSymbols returned None" |
| 1963 | self._symbol_cache = {} |
| 1964 | self._count = count.value |
| 1965 | for i in range(len(self)): |
| 1966 | _handle = core.BNNewSymbolReference(self._symbol_list[i]) |
| 1967 | assert _handle is not None, "core.BNNewSymbolReference returned None" |
| 1968 | sym = _types.CoreSymbol(_handle) |
| 1969 | try: |
| 1970 | if sym.raw_name in self._symbol_cache: |
| 1971 | self._symbol_cache[sym.raw_name].append(sym) |
| 1972 | else: |
| 1973 | self._symbol_cache[sym.raw_name] = [sym] |
| 1974 | except UnicodeDecodeError: |
| 1975 | mapped_str = sym.raw_bytes.decode('charmap') |
| 1976 | if mapped_str in self._symbol_cache: |
| 1977 | self._symbol_cache[mapped_str].append(sym) |
| 1978 | else: |
| 1979 | self._symbol_cache[mapped_str] = [sym] |
| 1980 | |
| 1981 | def __iter__(self) -> Iterator[str]: |
| 1982 | if self._symbol_cache is None: |