1""" 2Objective-C runtime wrapper for use by LLDB Python formatters 3 4Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5See https://llvm.org/LICENSE.txt for license information. 6SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7""" 8 9 10class AttributesDictionary: 11 12 def __init__(self, allow_reset=True): 13 # need to do it this way to prevent endless recursion 14 self.__dict__['_dictionary'] = {} 15 self.__dict__['_allow_reset'] = allow_reset 16 17 def __getattr__(self, name): 18 if not self._check_exists(name): 19 return None 20 value = self._dictionary[name] 21 return value 22 23 def _set_impl(self, name, value): 24 self._dictionary[name] = value 25 26 def _check_exists(self, name): 27 return name in self._dictionary 28 29 def __setattr__(self, name, value): 30 if self._allow_reset: 31 self._set_impl(name, value) 32 else: 33 self.set_if_necessary(name, value) 34 35 def set_if_necessary(self, name, value): 36 if not self._check_exists(name): 37 self._set_impl(name, value) 38 return True 39 return False 40 41 def __len__(self): 42 return len(self._dictionary) 43