Enrico Granata | 3f1052b | 2012-03-13 21:52:00 +0000 | [diff] [blame] | 1 | """ |
| 2 | Objective-C runtime wrapper for use by LLDB Python formatters |
| 3 | |
| 4 | part of The LLVM Compiler Infrastructure |
| 5 | This file is distributed under the University of Illinois Open Source |
| 6 | License. See LICENSE.TXT for details. |
| 7 | """ |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 8 | |
| 9 | |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 10 | class AttributesDictionary: |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 11 | |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 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 |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 16 | |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 17 | def __getattr__(self, name): |
| 18 | if not self._check_exists(name): |
| 19 | return None |
| 20 | value = self._dictionary[name] |
| 21 | return value |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 22 | |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 23 | def _set_impl(self, name, value): |
| 24 | self._dictionary[name] = value |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 25 | |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 26 | def _check_exists(self, name): |
| 27 | return name in self._dictionary |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 28 | |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 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) |
Enrico Granata | cfdafa3 | 2012-03-05 19:56:33 +0000 | [diff] [blame] | 34 | |
Kate Stone | b9c1b51 | 2016-09-06 20:57:50 +0000 | [diff] [blame] | 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) |