""" Objective-C runtime wrapper for use by LLDB Python formatters Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information. SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception """ class AttributesDictionary: def __init__(self, allow_reset=True): # need to do it this way to prevent endless recursion self.__dict__['_dictionary'] = {} self.__dict__['_allow_reset'] = allow_reset def __getattr__(self, name): if not self._check_exists(name): return None value = self._dictionary[name] return value def _set_impl(self, name, value): self._dictionary[name] = value def _check_exists(self, name): return name in self._dictionary def __setattr__(self, name, value): if self._allow_reset: self._set_impl(name, value) else: self.set_if_necessary(name, value) def set_if_necessary(self, name, value): if not self._check_exists(name): self._set_impl(name, value) return True return False def __len__(self): return len(self._dictionary)