================ @@ -1552,68 +1553,85 @@ class Cursor(Structure): _fields_ = [("_kind_id", c_int), ("xdata", c_int), ("data", c_void_p * 3)] + _tu: TranslationUnit + + # This ensures that no operations are possible on null cursors + # by guarding all method calls with a not-null assert + def __getattribute__(self, key: str) -> object: ---------------- Endilll wrote:
> I've decorated all methods for now (except what's required for the null-check > itself), Thank you, I like it better than `__getattribute__` solution. > but do you think there are any that we should leave out? I looked at all of them, and I don't think we need to leave out more than you already did. However, I found a source of null cursors, and left a comment there. > Or on the contrary, should we only decorate those functions using any of the > from_result methods? I'm afraid this might make the interface inconsistent > though, in a way that's not very clear to the user No, mapping of null cursors to `None` is an invariant for the whole `Cursor` class, so your new decorator should be put on almost anything. Maybe worth leaving comments on methods which are not decorated, to make it clear that it is a very intentional omission. https://github.com/llvm/llvm-project/pull/138103 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits