================
@@ -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

Reply via email to