| """ |
| 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) |