================
@@ -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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits