pyobjc-core 12.0__tar.gz → 12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/PyObjCTools/TestSupport.py +388 -59
  2. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_bridges.py +11 -0
  3. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_bridgesupport.py +7 -20
  4. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience.py +6 -2
  5. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsdata.py +30 -17
  6. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_new.py +1 -3
  7. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_transform.py +5 -40
  8. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/PKG-INFO +3 -4
  9. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/SOURCES.txt +8 -1
  10. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/include/pyobjc-compat.h +24 -50
  11. pyobjc_core-12.2/Lib/pyobjc_core.egg-info/pyobjc-build-info.txt +3 -0
  12. pyobjc_core-12.2/Modules/objc/OC_BuiltinPythonNumber.m +19 -0
  13. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonArray.h +0 -1
  14. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonArray.m +29 -39
  15. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonData.h +0 -1
  16. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonData.m +10 -10
  17. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonDate.h +0 -1
  18. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonDate.m +7 -7
  19. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonDictionary.h +0 -1
  20. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonDictionary.m +69 -21
  21. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonEnumerator.m +2 -2
  22. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonNumber.h +0 -1
  23. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonNumber.m +110 -50
  24. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonObject.h +0 -1
  25. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonObject.m +57 -60
  26. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonSet.h +0 -1
  27. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonSet.m +8 -7
  28. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonURL.m +2 -2
  29. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonUnicode.h +0 -1
  30. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonUnicode.m +15 -17
  31. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/ObjCPointer.h +0 -1
  32. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/ObjCPointer.m +12 -33
  33. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/block_support.h +2 -2
  34. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/block_support.m +80 -93
  35. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/bundle-variables.m +27 -30
  36. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/class-builder.h +2 -0
  37. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/class-builder.m +97 -202
  38. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/class-list.m +9 -9
  39. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/corefoundation.m +61 -47
  40. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/ctests.m +199 -8
  41. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/file_wrapper.m +19 -20
  42. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/formal-protocol.m +32 -37
  43. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/fsref.m +8 -26
  44. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/function.m +45 -69
  45. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-authorization.m +17 -18
  46. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nscoder.m +142 -139
  47. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsdata.m +19 -17
  48. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsdecimal.m +84 -87
  49. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsinvocation.m +44 -44
  50. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsobject.m +55 -28
  51. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/instance-var.m +20 -22
  52. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/ivar-accessor.m +15 -15
  53. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/libffi_support.h +3 -5
  54. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/libffi_support.m +1106 -1052
  55. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/memview.m +13 -37
  56. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/meth-func.m +47 -34
  57. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/method-accessor.m +82 -103
  58. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/method-imp.h +1 -2
  59. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/method-imp.m +56 -73
  60. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/method-signature.h +25 -24
  61. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/method-signature.m +893 -785
  62. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/module.m +122 -107
  63. pyobjc_core-12.2/Modules/objc/objc-NULL.m +54 -0
  64. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc-class.m +574 -537
  65. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc-object.h +7 -5
  66. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc-object.m +171 -170
  67. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc-runtime-compat.h +2 -2
  68. pyobjc_core-12.2/Modules/objc/objc-runtime-compat.m +45 -0
  69. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc_super.m +28 -36
  70. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc_support.h +1 -1
  71. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc_support.m +243 -385
  72. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc_util.h +2 -2
  73. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc_util.m +197 -174
  74. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/opaque-pointer.m +31 -31
  75. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/options.h +1 -0
  76. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/options.m +79 -75
  77. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pointer-support.m +26 -24
  78. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/proxy-registry.h +8 -18
  79. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/proxy-registry.m +98 -13
  80. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc-api.m +6 -5
  81. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc-compat.h +24 -50
  82. pyobjc_core-12.2/Modules/objc/pyobjc-compat.m +38 -0
  83. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc-unittest.h +0 -1
  84. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc.h +1 -9
  85. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc_unicode.m +32 -65
  86. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/python-api-used.h +19 -5
  87. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/registry.m +60 -64
  88. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/selector.h +3 -2
  89. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/selector.m +190 -278
  90. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/struct-sockaddr.m +19 -17
  91. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/struct-wrapper.h +0 -18
  92. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/struct-wrapper.m +185 -168
  93. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/super-call.h +1 -4
  94. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/super-call.m +123 -80
  95. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/block.m +51 -1
  96. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/block2.m +16 -0
  97. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/bufsizeinarg.m +40 -0
  98. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/coding.m +10 -4
  99. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/customcallers.m +13 -0
  100. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/deprecations.m +82 -4
  101. pyobjc_core-12.2/Modules/objc/test/filepointer.m +160 -0
  102. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/genericnew.m +7 -0
  103. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/helpernsobject.m +102 -0
  104. pyobjc_core-12.0/Modules/objc/test/filepointer.m → pyobjc_core-12.2/Modules/objc/test/keyvalue.m +32 -26
  105. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/metadata.m +1222 -23
  106. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/metadatafunction.m +22 -0
  107. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/methodaccess.m +10 -0
  108. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/nulldelimitedresult.m +1 -1
  109. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/objectint.m +44 -1
  110. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/specialtypecodes.m +20 -0
  111. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/structargs.m +28 -0
  112. pyobjc_core-12.2/Modules/objc/test/supercall.m +383 -0
  113. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/testbndl.m +27 -3
  114. pyobjc_core-12.2/Modules/objc/test/transient.m +80 -0
  115. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/varlist.m +38 -50
  116. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/weakref.m +5 -13
  117. {pyobjc_core-12.0 → pyobjc_core-12.2}/PKG-INFO +3 -4
  118. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_archive_python.py +111 -1
  119. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_archiving_interop.py +15 -0
  120. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_archiving_secure_interop.py +30 -1
  121. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_array_interface.py +12 -0
  122. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_authorizationitem.py +2 -0
  123. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_blocks.py +179 -0
  124. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_bridged_classes.py +7 -1
  125. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_bridges.py +4 -0
  126. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_bufsizeinarg.py +78 -3
  127. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_callbacks.py +58 -6
  128. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_convenience.py +15 -0
  129. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_conversion.py +143 -39
  130. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_corefoundation.py +19 -3
  131. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_customcallers.py +37 -0
  132. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_data_proxy.py +40 -0
  133. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_deprecations.py +88 -5
  134. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_dict_proxy.py +63 -4
  135. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_filepointer.py +133 -7
  136. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_final.py +8 -0
  137. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_functions.py +234 -24
  138. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_generic_class.py +1 -3
  139. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_generic_new.py +16 -1
  140. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_hidden_selector.py +117 -28
  141. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_imp.py +80 -10
  142. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_initpatterns.py +2 -1
  143. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_internals.py +119 -14
  144. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_keyvalue.py +33 -0
  145. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_lazy_import.py +2 -0
  146. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadata.py +2423 -148
  147. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadata_function.py +15 -0
  148. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadata_imp.py +0 -3
  149. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadata_py.py +1808 -195
  150. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_methodaccess.py +65 -0
  151. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_methodedits.py +121 -1
  152. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_methods.py +11 -1
  153. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nsdata.py +65 -0
  154. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nsdecimal.py +10 -3
  155. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nsobject.py +116 -1
  156. pyobjc_core-12.2/PyObjCTest/test_nsproxy.py +75 -0
  157. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_number_proxy.py +196 -64
  158. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_opaque.py +6 -1
  159. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_options.py +54 -0
  160. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_propertiesforclass.py +18 -0
  161. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_regr.py +576 -17
  162. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_set_interface.py +1 -1
  163. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_charbyte.py +16 -1
  164. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_unichar.py +76 -4
  165. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_splitsig.py +75 -1
  166. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_structs.py +52 -5
  167. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_subclass.py +332 -21
  168. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_testsupport.py +353 -40
  169. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_transform.py +15 -21
  170. pyobjc_core-12.2/PyObjCTest/test_transient.py +79 -0
  171. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_usekvo.py +17 -0
  172. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_vector_proxy.py +7 -1
  173. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/free-threading/_tools.py +0 -1
  174. pyobjc_core-12.2/Tools/free-threading/concurrent-methinfo.py +20 -0
  175. pyobjc_core-12.2/Tools/free-threading/concurrent-upcalls.py +24 -0
  176. pyobjc_core-12.2/Tools/free-threading/concurrent-upcalls2.py +43 -0
  177. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/pyobjc_setup.py +4 -5
  178. {pyobjc_core-12.0 → pyobjc_core-12.2}/setup.cfg +2 -3
  179. {pyobjc_core-12.0 → pyobjc_core-12.2}/setup.py +37 -15
  180. pyobjc_core-12.0/Lib/pyobjc_core.egg-info/pyobjc-build-info.txt +0 -3
  181. pyobjc_core-12.0/Modules/objc/OC_BuiltinPythonNumber.m +0 -30
  182. pyobjc_core-12.0/Modules/objc/objc-NULL.m +0 -72
  183. pyobjc_core-12.0/Modules/objc/objc-runtime-compat.m +0 -66
  184. pyobjc_core-12.0/Modules/objc/pyobjc-assert.h +0 -59
  185. pyobjc_core-12.0/Modules/objc/pyobjc-compat.m +0 -69
  186. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/00ReadMe.txt +0 -0
  187. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/GUITests/00ReadMe.txt +0 -0
  188. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/GUITests/test_modalsession.py +0 -0
  189. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/HelloWorld.py +0 -0
  190. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/autoreadme.py +0 -0
  191. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/instrumentSends.py +0 -0
  192. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/kvo-debugging.py +0 -0
  193. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/signal-demo.py +0 -0
  194. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/stdinreader.py +0 -0
  195. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/subclassing-objective-c.py +0 -0
  196. {pyobjc_core-12.0 → pyobjc_core-12.2}/Examples/Scripts/wmEnable.py +0 -0
  197. {pyobjc_core-12.0 → pyobjc_core-12.2}/HISTORIC.txt +0 -0
  198. {pyobjc_core-12.0 → pyobjc_core-12.2}/Install.txt +0 -0
  199. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/PyObjCTools/KeyValueCoding.py +0 -0
  200. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/PyObjCTools/MachSignals.py +0 -0
  201. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/PyObjCTools/Signals.py +0 -0
  202. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/__init__.py +0 -0
  203. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_callable_docstr.py +0 -0
  204. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_category.py +0 -0
  205. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_compat.py +0 -0
  206. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_context.py +0 -0
  207. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_mapping.py +0 -0
  208. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsarray.py +0 -0
  209. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsdecimal.py +0 -0
  210. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsdictionary.py +0 -0
  211. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsobject.py +0 -0
  212. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsset.py +0 -0
  213. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_nsstring.py +0 -0
  214. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_convenience_sequence.py +0 -0
  215. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_descriptors.py +0 -0
  216. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_dyld.py +0 -0
  217. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_framework.py +0 -0
  218. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_informal_protocol.py +0 -0
  219. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_lazyimport.py +0 -0
  220. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_locking.py +0 -0
  221. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_properties.py +0 -0
  222. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_protocols.py +0 -0
  223. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_pycoder.py +0 -0
  224. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_pythonify.py +0 -0
  225. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_structtype.py +0 -0
  226. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/_types.py +0 -0
  227. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/objc/simd.py +0 -0
  228. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/dependency_links.txt +0 -0
  229. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/include/pyobjc-api.h +0 -0
  230. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/not-zip-safe +0 -0
  231. {pyobjc_core-12.0 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/top_level.txt +0 -0
  232. {pyobjc_core-12.0 → pyobjc_core-12.2}/License.txt +0 -0
  233. {pyobjc_core-12.0 → pyobjc_core-12.2}/MANIFEST +0 -0
  234. {pyobjc_core-12.0 → pyobjc_core-12.2}/MANIFEST.in +0 -0
  235. {pyobjc_core-12.0 → pyobjc_core-12.2}/Misc/announcement.txt +0 -0
  236. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/_machsignals.m +0 -0
  237. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonArray.h +0 -0
  238. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonArray.m +0 -0
  239. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonData.h +0 -0
  240. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonData.m +0 -0
  241. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDate.h +0 -0
  242. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDate.m +0 -0
  243. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDictionary.h +0 -0
  244. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDictionary.m +0 -0
  245. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonNumber.h +0 -0
  246. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonSet.h +0 -0
  247. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonSet.m +0 -0
  248. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonUnicode.h +0 -0
  249. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonUnicode.m +0 -0
  250. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_NSBundleHack.h +0 -0
  251. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_NSBundleHack.m +0 -0
  252. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonEnumerator.h +0 -0
  253. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/OC_PythonURL.h +0 -0
  254. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/bundle-variables.h +0 -0
  255. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/class-list.h +0 -0
  256. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/closure_pool.h +0 -0
  257. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/closure_pool.m +0 -0
  258. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/corefoundation.h +0 -0
  259. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/ctests.h +0 -0
  260. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/file_wrapper.h +0 -0
  261. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/formal-protocol.h +0 -0
  262. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/fsref.h +0 -0
  263. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/function.h +0 -0
  264. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers-vector.m +0 -0
  265. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/helpers.h +0 -0
  266. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/instance-var.h +0 -0
  267. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/ivar-accessor.h +0 -0
  268. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/libffi_extra.h +0 -0
  269. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/libffi_extra.m +0 -0
  270. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/memview.h +0 -0
  271. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/meth-func.h +0 -0
  272. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/method-accessor.h +0 -0
  273. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc-NULL.h +0 -0
  274. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc-class.h +0 -0
  275. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/objc_super.h +0 -0
  276. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/opaque-pointer.h +0 -0
  277. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pointer-support.h +0 -0
  278. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc-api.h +0 -0
  279. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/pyobjc_unicode.h +0 -0
  280. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/registry.h +0 -0
  281. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/released-buffer.h +0 -0
  282. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/released-buffer.m +0 -0
  283. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/struct-sockaddr.h +0 -0
  284. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/NULL.m +0 -0
  285. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/arrayint.m +0 -0
  286. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/arrays.m +0 -0
  287. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/authorizationitem.m +0 -0
  288. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/categories_base.m +0 -0
  289. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c42.m +0 -0
  290. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c43.m +0 -0
  291. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c44.m +0 -0
  292. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c45.m +0 -0
  293. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c46.m +0 -0
  294. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c47.m +0 -0
  295. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c48.m +0 -0
  296. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c49.m +0 -0
  297. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c50.m +0 -0
  298. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c51.m +0 -0
  299. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c52.m +0 -0
  300. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c53.m +0 -0
  301. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c54.m +0 -0
  302. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c55.m +0 -0
  303. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c56.m +0 -0
  304. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c57.m +0 -0
  305. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c58.m +0 -0
  306. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_c59.m +0 -0
  307. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp10.m +0 -0
  308. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp11.m +0 -0
  309. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp12.m +0 -0
  310. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp13.m +0 -0
  311. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp14.m +0 -0
  312. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp15.m +0 -0
  313. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp16.m +0 -0
  314. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp17.m +0 -0
  315. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp18.m +0 -0
  316. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp19.m +0 -0
  317. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp20.m +0 -0
  318. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp21.m +0 -0
  319. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp22.m +0 -0
  320. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp23.m +0 -0
  321. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp24.m +0 -0
  322. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp27.m +0 -0
  323. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp3.m +0 -0
  324. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp30.m +0 -0
  325. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp33.m +0 -0
  326. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp36.m +0 -0
  327. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp39.m +0 -0
  328. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp42.m +0 -0
  329. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp45.m +0 -0
  330. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp48.m +0 -0
  331. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp51.m +0 -0
  332. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp54.m +0 -0
  333. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp57.m +0 -0
  334. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp6.m +0 -0
  335. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp7.m +0 -0
  336. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp8.m +0 -0
  337. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_gp9.m +0 -0
  338. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p24.m +0 -0
  339. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p25.m +0 -0
  340. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p26.m +0 -0
  341. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p27.m +0 -0
  342. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p28.m +0 -0
  343. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p29.m +0 -0
  344. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p30.m +0 -0
  345. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p31.m +0 -0
  346. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p32.m +0 -0
  347. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p33.m +0 -0
  348. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p34.m +0 -0
  349. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p35.m +0 -0
  350. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p36.m +0 -0
  351. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p37.m +0 -0
  352. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p38.m +0 -0
  353. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p39.m +0 -0
  354. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p40.m +0 -0
  355. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/category_p41.m +0 -0
  356. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/cfsocket.m +0 -0
  357. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/classes.m +0 -0
  358. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/clinmeth.m +0 -0
  359. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/copying.m +0 -0
  360. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/corefoundation.m +0 -0
  361. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/dataint.m +0 -0
  362. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/dateint.m +0 -0
  363. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/decimal.m +0 -0
  364. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/dictint.m +0 -0
  365. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/enumeration.m +0 -0
  366. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/exceptions.m +0 -0
  367. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/fsref.m +0 -0
  368. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/gcov.m +0 -0
  369. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/helpernsdata.m +0 -0
  370. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/identity.m +0 -0
  371. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/initialize.m +0 -0
  372. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/initpatterns.m +0 -0
  373. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/instanceVariables.m +0 -0
  374. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/locking.m +0 -0
  375. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/metadataorder.m +0 -0
  376. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/methodlookup.m +0 -0
  377. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/methres1.m +0 -0
  378. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/methres2.m +0 -0
  379. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/misc.m +0 -0
  380. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/missing1.m +0 -0
  381. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/missing2.m +0 -0
  382. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/missing3.m +0 -0
  383. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/nsobjectcategory.m +0 -0
  384. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/opaque.m +0 -0
  385. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/pointersupport.m +0 -0
  386. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/properties.m +0 -0
  387. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/protected.m +0 -0
  388. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/protocol.m +0 -0
  389. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/pythonnumber.m +0 -0
  390. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/pythonset.m +0 -0
  391. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/sequence.m +0 -0
  392. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/sockaddr.m +0 -0
  393. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/stringint.m +0 -0
  394. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/structpointer1.m +0 -0
  395. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/structpointer2.m +0 -0
  396. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/structs.m +0 -0
  397. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/testbndl2.m +0 -0
  398. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/testclassandinst.m +0 -0
  399. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/testoutputinitializer.m +0 -0
  400. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/unavailable.m +0 -0
  401. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/vector.m +0 -0
  402. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/vectorcall.m +0 -0
  403. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/test/voidpointer.m +0 -0
  404. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/varlist.h +0 -0
  405. {pyobjc_core-12.0 → pyobjc_core-12.2}/Modules/objc/weakref.h +0 -0
  406. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/__init__.py +0 -0
  407. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/archives/py2-oc2.3.keyed +0 -0
  408. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/archives/py2-oc2.3.plain +0 -0
  409. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/archives/py3-oc3.0.keyed +0 -0
  410. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/archives/py3-oc3.0.plain +0 -0
  411. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/bundle_data/Test.bridgesupport +0 -0
  412. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/with_data/Test.bridgesupport +0 -0
  413. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/with_data_dylib/Test.bridgesupport +0 -0
  414. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/with_data_dylib/Test.dylib +0 -0
  415. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/dump-nsarchive-securecoding.m +0 -0
  416. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/dump-nsarchive.m +0 -0
  417. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/fnd.py +0 -0
  418. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/helper_bridgesupport.py +0 -0
  419. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/keyvaluehelper.py +0 -0
  420. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/loader.py +0 -0
  421. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_NULL.py +0 -0
  422. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_allocatebuffer.py +0 -0
  423. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_api_import.py +0 -0
  424. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_array_property.py +0 -0
  425. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_arrays.py +0 -0
  426. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_assocations.py +0 -0
  427. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_bridgesupport.py +0 -0
  428. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_bundleFunctions.py +0 -0
  429. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_bundleVariables.py +0 -0
  430. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_callable_docstr.py +0 -0
  431. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_categories.py +0 -0
  432. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_classandinst.py +0 -0
  433. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_classhooks.py +0 -0
  434. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_clinmeth.py +0 -0
  435. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_compat.py +0 -0
  436. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_context.py +0 -0
  437. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_copying.py +0 -0
  438. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_ctests.py +0 -0
  439. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_date_proxy.py +0 -0
  440. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_default_selector.py +0 -0
  441. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_descriptors.py +0 -0
  442. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_dict_interface.py +0 -0
  443. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_dict_property.py +0 -0
  444. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_dyld.py +0 -0
  445. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_enumerator.py +0 -0
  446. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_exceptions.py +0 -0
  447. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_framework.py +0 -0
  448. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_free_threading.py +0 -0
  449. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_fsref.py +0 -0
  450. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_identity.py +0 -0
  451. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_inspect_signatures.py +0 -0
  452. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_ivar.py +0 -0
  453. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_keyvalue_prop.py +0 -0
  454. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_keyvaluecoding.py +0 -0
  455. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_leaks.py +0 -0
  456. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_list_proxy.py +0 -0
  457. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_locking.py +0 -0
  458. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_machsignals.py +0 -0
  459. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadata_inheritance.py +0 -0
  460. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadata_py2py.py +0 -0
  461. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_metadataorder.py +0 -0
  462. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_method_prototypes.py +0 -0
  463. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_methodlookup.py +0 -0
  464. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_methods2.py +0 -0
  465. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_methres.py +0 -0
  466. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nscoder.py +0 -0
  467. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nsdate_proxy.py +0 -0
  468. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nsinvocation.py +0 -0
  469. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nsunavailable.py +0 -0
  470. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_nulldelimited.py +0 -0
  471. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_objc.py +0 -0
  472. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_objcpointer.py +0 -0
  473. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_object_property.py +0 -0
  474. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_object_proxy.py +0 -0
  475. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_outputinitializer.py +0 -0
  476. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_pickle.py +0 -0
  477. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_pickling_objc.py +0 -0
  478. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_pointer_compat.py +0 -0
  479. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_protected.py +0 -0
  480. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_protocol.py +0 -0
  481. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_protocolNamed.py +0 -0
  482. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_python_method.py +0 -0
  483. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_set_property.py +0 -0
  484. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_set_proxy.py +0 -0
  485. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_signals.py +0 -0
  486. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_signatures.py +0 -0
  487. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_simd.py +0 -0
  488. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_sockaddr.py +0 -0
  489. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_charint.py +0 -0
  490. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_methdef.py +0 -0
  491. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_nsbool.py +0 -0
  492. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_struct.py +0 -0
  493. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_string_proxy.py +0 -0
  494. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_structpointer.py +0 -0
  495. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_super_on_regular_classes.py +0 -0
  496. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_synthesize.py +0 -0
  497. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_transform_integration.py +0 -0
  498. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_typecheck.py +0 -0
  499. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_unicode.py +0 -0
  500. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_urlproxy.py +0 -0
  501. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_varargs.py +0 -0
  502. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_varlist.py +0 -0
  503. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_vectorcall.py +0 -0
  504. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_version_support.py +0 -0
  505. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_voidpointer.py +0 -0
  506. {pyobjc_core-12.0 → pyobjc_core-12.2}/PyObjCTest/test_weakref.py +0 -0
  507. {pyobjc_core-12.0 → pyobjc_core-12.2}/README.txt +0 -0
  508. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/MANIFEST.in +0 -0
  509. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/comparebench.py +0 -0
  510. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/free-threading/concurrent-class-list.py +0 -0
  511. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/free-threading/concurrent-dict-getting.py +0 -0
  512. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/free-threading/concurrent-iteration.py +0 -0
  513. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/free-threading/concurrent-registration.py +0 -0
  514. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/free-threading/concurrent-value-getting.py +0 -0
  515. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/gen_archive.py +0 -0
  516. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/generate-category-tests.py +0 -0
  517. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/generate-helpers-vector.py +0 -0
  518. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/pyobjcbench.py +0 -0
  519. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/results/pyobjcbench-7.3.txt +0 -0
  520. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/results/pyobjcbench-8.0b1.txt +0 -0
  521. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/results/pyobjcbench-8.0b2.txt +0 -0
  522. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/run-free-threading-tests.py +0 -0
  523. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/runtests-with-nuitka.py +0 -0
  524. {pyobjc_core-12.0 → pyobjc_core-12.2}/Tools/runtests.py +0 -0
  525. {pyobjc_core-12.0 → pyobjc_core-12.2}/pyproject.toml +0 -0
@@ -29,9 +29,7 @@ _usepool = not _os.environ.get("PYOBJC_NO_AUTORELEASE")
29
29
 
30
30
 
31
31
  def _typemap(tp):
32
- if isinstance(tp, tuple):
33
- return tuple(_typemap(x) for x in tp)
34
- elif tp is None:
32
+ if tp is None:
35
33
  return None
36
34
  return (
37
35
  tp.replace(b"_NSRect", b"CGRect")
@@ -499,6 +497,21 @@ class TestCase(_unittest.TestCase):
499
497
  or "argument %d of %r is not a null-terminated array" % (argno, method)
500
498
  )
501
499
 
500
+ def assertArgIsNotNullTerminated(self, method, argno, message=None):
501
+ if isinstance(method, objc.selector):
502
+ offset = 2
503
+ else:
504
+ offset = 0
505
+ info = method.__metadata__()
506
+ try:
507
+ if info["arguments"][argno + offset].get("c_array_delimited_by_null"):
508
+ self.fail(
509
+ message
510
+ or "argument %d of %r is a null-terminated array" % (argno, method)
511
+ )
512
+ except (KeyError, IndexError):
513
+ pass
514
+
502
515
  def assertArgIsVariableSize(self, method, argno, message=None):
503
516
  if isinstance(method, objc.selector):
504
517
  offset = 2
@@ -542,6 +555,21 @@ class TestCase(_unittest.TestCase):
542
555
  or "argument %d of %r does not have size in result" % (argno, method)
543
556
  )
544
557
 
558
+ def assertArgSizeNotInResult(self, method, argno, message=None):
559
+ if isinstance(method, objc.selector):
560
+ offset = 2
561
+ else:
562
+ offset = 0
563
+ info = method.__metadata__()
564
+ try:
565
+ if info["arguments"][argno + offset].get("c_array_length_in_result"):
566
+ self.fail(
567
+ message
568
+ or "argument %d of %r does have size in result" % (argno, method)
569
+ )
570
+ except (KeyError, IndexError):
571
+ pass
572
+
545
573
  def assertArgIsPrintf(self, method, argno, message=None):
546
574
  if isinstance(method, objc.selector):
547
575
  offset = 2
@@ -563,6 +591,24 @@ class TestCase(_unittest.TestCase):
563
591
  or "%r argument %d is not a printf format string" % (method, argno)
564
592
  )
565
593
 
594
+ def assertArgIsNotPrintf(self, method, argno, message=None):
595
+ if isinstance(method, objc.selector):
596
+ offset = 2
597
+ else:
598
+ offset = 0
599
+ info = method.__metadata__()
600
+ if not info.get("variadic"):
601
+ self.fail(message or f"{method!r} is not a variadic function")
602
+
603
+ try:
604
+ if info["arguments"][argno + offset].get("printf_format"):
605
+ self.fail(
606
+ message
607
+ or "%r argument %d is a printf format string" % (method, argno)
608
+ )
609
+ except (KeyError, IndexError):
610
+ pass
611
+
566
612
  def assertArgIsCFRetained(self, method, argno, message=None):
567
613
  if isinstance(method, objc.selector):
568
614
  offset = 2
@@ -675,8 +721,8 @@ class TestCase(_unittest.TestCase):
675
721
  for item in tp:
676
722
  if (
677
723
  typestr == item
678
- or _typemap(typestr) == _typemap(tp)
679
- or _typealias.get(typestr, typestr) == _typealias.get(tp, tp)
724
+ or _typemap(typestr) == _typemap(item)
725
+ or _typealias.get(typestr, typestr) == _typealias.get(item, item)
680
726
  ):
681
727
  break
682
728
  else:
@@ -717,8 +763,8 @@ class TestCase(_unittest.TestCase):
717
763
  for item in tp:
718
764
  if (
719
765
  typestr == item
720
- or _typemap(typestr) == _typemap(tp)
721
- or _typealias.get(typestr, typestr) == _typealias.get(tp, tp)
766
+ or _typemap(typestr) == _typemap(item)
767
+ or _typealias.get(typestr, typestr) == _typealias.get(item, item)
722
768
  ):
723
769
  break
724
770
  else:
@@ -1302,9 +1348,14 @@ class TestCase(_unittest.TestCase):
1302
1348
 
1303
1349
  if exclude_cocoa:
1304
1350
  try:
1305
- import Cocoa
1351
+ if "AppKit" in _sys.modules:
1352
+ import AppKit
1306
1353
 
1307
- exclude_names = set(dir(Cocoa))
1354
+ exclude_names = set(dir(AppKit))
1355
+ else:
1356
+ import Foundation
1357
+
1358
+ exclude_names = set(dir(Foundation))
1308
1359
 
1309
1360
  # Don't exclude NSObject' because a number
1310
1361
  # of frameworks define categories on this class.
@@ -1383,65 +1434,339 @@ class TestCase(_unittest.TestCase):
1383
1434
  exclude_attrs.add("AudioObjectPropertiesChanged")
1384
1435
  exclude_attrs.add("AudioObjectsPublishedAndDied")
1385
1436
 
1437
+ # Private classes in various frameworks
1438
+ exclude_attrs.add("ACTrackedXPCConnection")
1439
+ exclude_attrs.add("ACZeroingString")
1440
+ exclude_attrs.add("AFBArray")
1441
+ exclude_attrs.add("AFBBufferBuilder")
1442
+ exclude_attrs.add("AFBDictionary")
1443
+ exclude_attrs.add("AFConversationError")
1444
+ exclude_attrs.add("AFInstanceContext")
1445
+ exclude_attrs.add("AFInstanceContextHost")
1446
+ exclude_attrs.add("AFKBufferMemoryDescriptor")
1447
+ exclude_attrs.add("AFKEndpointInterface")
1448
+ exclude_attrs.add("AFKMemoryDescriptor")
1449
+ exclude_attrs.add("AFMyriadAccessoryMetricMessage")
1450
+ exclude_attrs.add("AFPreferences")
1451
+ exclude_attrs.add("AFSUPFunctionProvider")
1452
+ exclude_attrs.add("AFSpeakableUtteranceParser")
1453
+ exclude_attrs.add("AKAppleIDSession")
1454
+ exclude_attrs.add("AWDLTrafficRegistrationConfiguration")
1455
+ exclude_attrs.add("AXLogColorizer")
1456
+ exclude_attrs.add("AXValidationManager")
1457
+ exclude_attrs.add("BroadcomHostController")
1458
+ exclude_attrs.add("CBDevice")
1459
+ exclude_attrs.add("CKAssetDownloadStagingManager")
1460
+ exclude_attrs.add("CKBehaviorOptions")
1461
+ exclude_attrs.add("CKInternalError")
1462
+ exclude_attrs.add("CKObjCType")
1463
+ exclude_attrs.add("CKPrettyError")
1464
+ exclude_attrs.add("CKSQLiteCompiledStatementDecoder")
1465
+ exclude_attrs.add("CKSQLiteDatabaseKeyedArchiver")
1466
+ exclude_attrs.add("CKSQLiteDatabaseKeyedUnarchiver")
1467
+ exclude_attrs.add("CKSQLiteTOCImageInfoEntry")
1468
+ exclude_attrs.add("CKSyncEngineState")
1469
+ exclude_attrs.add("CKUserDefaults")
1470
+ exclude_attrs.add("CLAssertion")
1471
+ exclude_attrs.add("CLBBTimeFreqTransferCallbackAssertion")
1472
+ exclude_attrs.add("CLEEDMitigation")
1473
+ exclude_attrs.add("CLEmergencyClientEnablementAssertion")
1474
+ exclude_attrs.add("CLEmergencyEnablementAssertion")
1475
+ exclude_attrs.add("CLFindMyAccessoryManager")
1476
+ exclude_attrs.add("CLGNSSStateQueryAssertionResponse")
1477
+ exclude_attrs.add("CLGnssDisablementAssertion")
1478
+ exclude_attrs.add("CLGnssExtensionsClient")
1479
+ exclude_attrs.add("CLIntersiloProxy")
1480
+ exclude_attrs.add("CLIntersiloProxyToInitiator")
1481
+ exclude_attrs.add("CLIntersiloProxyToRecipient")
1482
+ exclude_attrs.add("CLLocationInternalClient")
1483
+ exclude_attrs.add("CLLocationManagerStateTracker")
1484
+ exclude_attrs.add("CLLocationUpdater")
1485
+ exclude_attrs.add("CLOSTransaction")
1486
+ exclude_attrs.add("CLStateTracker")
1487
+ exclude_attrs.add("CRBiDiTransform")
1488
+ exclude_attrs.add("CRImage")
1489
+ exclude_attrs.add("CRImage_PixelBuffer")
1490
+ exclude_attrs.add("CSUError")
1491
+ exclude_attrs.add("CUDashboardClient")
1492
+ exclude_attrs.add("CUICommonAssetStorage")
1493
+ exclude_attrs.add("CUIMaskedFacetLayer")
1494
+ exclude_attrs.add("CUIMutableCommonAssetStorage")
1495
+ exclude_attrs.add("CUIMutablePSDImageRef")
1496
+ exclude_attrs.add("CUIMutableStructuredThemeStore")
1497
+ exclude_attrs.add("CUIPSDImageRef")
1498
+ exclude_attrs.add("CUIPSDLayerRef")
1499
+ exclude_attrs.add("CUIPlaceholderCUICommonAssetStorage")
1500
+ exclude_attrs.add("CUIPlaceholderCUIMutableCommonAssetStorage")
1501
+ exclude_attrs.add("CUISingleNamedAssetMutableStorage")
1502
+ exclude_attrs.add("CUIStructuredThemeStore")
1503
+ exclude_attrs.add("CUISystemStore")
1504
+ exclude_attrs.add("CUNANEndpoint")
1505
+ exclude_attrs.add("CUReadRequest")
1506
+ exclude_attrs.add("CUSPAKECommon")
1507
+ exclude_attrs.add("CUSPAKEProver")
1508
+ exclude_attrs.add("CUSPAKEVerifier")
1509
+ exclude_attrs.add("CUWriteRequest")
1510
+ exclude_attrs.add("CWFNetworkProfile")
1511
+ exclude_attrs.add("CoreUtilsNSSubrangeData")
1512
+ exclude_attrs.add("DDScannerResult")
1513
+ exclude_attrs.add("DMAPFS")
1514
+ exclude_attrs.add("DMCoreStorage")
1515
+ exclude_attrs.add("DMFilesystem")
1516
+ exclude_attrs.add("DMManager")
1517
+ exclude_attrs.add("EFILWLogging")
1518
+ exclude_attrs.add("FLSQLitePersistence")
1519
+ exclude_attrs.add("FPAppLibraryCollection")
1520
+ exclude_attrs.add("FPCTLTermDumper")
1521
+ exclude_attrs.add("FPError")
1522
+ exclude_attrs.add("FPExtensionCollection")
1523
+ exclude_attrs.add("FPFlattenedPackageSandboxingURLWrapper")
1524
+ exclude_attrs.add("FPItemCollection")
1525
+ exclude_attrs.add("FPQueryCollection")
1526
+ exclude_attrs.add("FPSandboxingURLWrapper")
1527
+ exclude_attrs.add("FPSearchCollection")
1528
+ exclude_attrs.add("FPSearchTrashCollection")
1529
+ exclude_attrs.add("FPTask")
1530
+ exclude_attrs.add("FPTrashUnionCollection")
1531
+ exclude_attrs.add("FPUnarchiveOperation")
1532
+ exclude_attrs.add("FPUnionCollection")
1533
+ exclude_attrs.add("FaceCoreImage")
1534
+ exclude_attrs.add("GEOActiveTileGroup")
1535
+ exclude_attrs.add("GEOBrandInfoMapping")
1536
+ exclude_attrs.add("GEODaemon")
1537
+ exclude_attrs.add("GEOFeature")
1538
+ exclude_attrs.add("GEOMapItemURLExtras")
1539
+ exclude_attrs.add("GEOPDTransitIncident")
1540
+ exclude_attrs.add("GEOPerformanceEventLogger")
1541
+ exclude_attrs.add("GEOPurgableFile")
1542
+ exclude_attrs.add("GEORegionalResourceTileDecoder")
1543
+ exclude_attrs.add("GEOSQLiteDB")
1544
+ exclude_attrs.add("GEOTileEditionUpdate")
1545
+ exclude_attrs.add("GEOVectorTile")
1546
+ exclude_attrs.add("GEOVectorTileDecoder")
1547
+ exclude_attrs.add("HardcopyCableReplacement")
1548
+ exclude_attrs.add("ICREnvironment")
1549
+ exclude_attrs.add("IDSDatagramChannel")
1550
+ exclude_attrs.add("IDSDependencyProvider")
1551
+ exclude_attrs.add("IDSDirectMessageConnection")
1552
+ exclude_attrs.add("IDSGlobalLinkMessage")
1553
+ exclude_attrs.add("IDSInterfaceAddress")
1554
+ exclude_attrs.add("IDSInternalQueueController")
1555
+ exclude_attrs.add("IDSNWPathUtils")
1556
+ exclude_attrs.add("IDSRateLimiter")
1557
+ exclude_attrs.add("IDSStunMessage")
1558
+ exclude_attrs.add("IDSStunRelayInterfaceInfoController")
1559
+ exclude_attrs.add("IDSTCPLink")
1560
+ exclude_attrs.add("IMFileManager")
1561
+ exclude_attrs.add("INDeferredLocalizedString")
1562
+ exclude_attrs.add("IOBluetoothHardcopyCableReplacement")
1563
+ exclude_attrs.add("IOBluetoothHeadsetAudioGateway")
1564
+ exclude_attrs.add("IOBluetoothLocalSDPServiceRecord")
1565
+ exclude_attrs.add("IOBluetoothOBEXSession")
1566
+ exclude_attrs.add("IOBluetoothSDPDataElement")
1567
+ exclude_attrs.add("IOBluetoothSDPServiceRecord")
1568
+ exclude_attrs.add("IOBluetoothSDPUUID")
1569
+ exclude_attrs.add("IOBluetoothSerialPortManager")
1570
+ exclude_attrs.add("ISCompositor")
1571
+ exclude_attrs.add("ISIcns")
1572
+ exclude_attrs.add("ISMutableIcns")
1573
+ exclude_attrs.add("KCAESGCMDuplexSession")
1574
+ exclude_attrs.add("KCPairingChannel")
1575
+ exclude_attrs.add("KCSRPClientContext")
1576
+ exclude_attrs.add("KCSRPContext")
1577
+ exclude_attrs.add("KCSRPServerContext")
1578
+ exclude_attrs.add("LACACMHelper")
1579
+ exclude_attrs.add("LACBiometryHelper")
1580
+ exclude_attrs.add("LACDeviceTreeReader")
1581
+ exclude_attrs.add("LACLocalizationUtils")
1582
+ exclude_attrs.add("LAErrorHelper")
1583
+ exclude_attrs.add("MLE5InputPort")
1584
+ exclude_attrs.add("MLE5InputPortBinder")
1585
+ exclude_attrs.add("MLE5OutputPort")
1586
+ exclude_attrs.add("MLE5OutputPortBinder")
1587
+ exclude_attrs.add("MLItemSimilarityRecommender")
1588
+ exclude_attrs.add("MLLoaderEvent")
1589
+ exclude_attrs.add("MLModelAsset")
1590
+ exclude_attrs.add("MLMultiArrayAsNSArrayWrapper")
1591
+ exclude_attrs.add("MLNeuralNetworkEngine")
1592
+ exclude_attrs.add("MLNeuralNetworkMLComputeUpdateEngine")
1593
+ exclude_attrs.add("MLNeuralNetworkUpdateEngine")
1594
+ exclude_attrs.add("MLNeuralNetworkV1Engine")
1595
+ exclude_attrs.add("MLProbabilityDictionary")
1596
+ exclude_attrs.add("MLProgramEngine")
1597
+ exclude_attrs.add("MLSequnceAsFeatureValueArray")
1598
+ exclude_attrs.add("MLTreeEnsembleClassifier")
1599
+ exclude_attrs.add("MLTreeEnsembleRegressor")
1600
+ exclude_attrs.add("MSVDefaultDictionary")
1601
+ exclude_attrs.add("MSVOPACKDecoder")
1602
+ exclude_attrs.add("MSVOPACKEncoder")
1603
+ exclude_attrs.add("MSVSegmentedDecoder")
1604
+ exclude_attrs.add("MSVSegmentedEncoder")
1605
+ exclude_attrs.add("MSVXPCConnection")
1606
+ exclude_attrs.add("NSAttributeDictionary")
1607
+ exclude_attrs.add("NSCTFont")
1608
+ exclude_attrs.add("NSCoreTypesetter")
1609
+ exclude_attrs.add("NSDocFormatReader")
1610
+ exclude_attrs.add("NSSingleLineTypesetter")
1611
+ exclude_attrs.add("NSTempAttributeDictionary")
1612
+ exclude_attrs.add("OBEXFilePut")
1613
+ exclude_attrs.add("OBEXSession")
1614
+ exclude_attrs.add("OTInheritanceKey")
1615
+ exclude_attrs.add("PCLog")
1616
+ exclude_attrs.add("SASampleStore")
1617
+ exclude_attrs.add("SATask")
1618
+ exclude_attrs.add("SCDAAccessoryMetricMessage")
1619
+ exclude_attrs.add("SFBLEScanner")
1620
+ exclude_attrs.add("SFCollaborationUtilities")
1621
+ exclude_attrs.add("SFFeatureFlagAdaptor")
1622
+ exclude_attrs.add("SFService")
1623
+ exclude_attrs.add("SFServiceSession")
1624
+ exclude_attrs.add("SFSession")
1625
+ exclude_attrs.add("SSInflightCAMetalLayerIntervalStats")
1626
+ exclude_attrs.add("SignpostIntervalBuilder")
1627
+ exclude_attrs.add("SiriAnalyticsError")
1628
+ exclude_attrs.add("TIHardwareKeyboardLayout")
1629
+ exclude_attrs.add("TIKeyboardCandidateResultSetCoder")
1630
+ exclude_attrs.add("TIKeyboardLayout")
1631
+ exclude_attrs.add("TIKeyedArchiver")
1632
+ exclude_attrs.add("TIKeyedUnarchiver")
1633
+ exclude_attrs.add("TKBERTLVRecord")
1634
+ exclude_attrs.add("TKDataSource")
1635
+ exclude_attrs.add("TKSmartCardATRInterfaceGroup")
1636
+ exclude_attrs.add("TKSmartCardWithError")
1637
+ exclude_attrs.add("TKTokenID")
1638
+ exclude_attrs.add("TRICCommandRunner")
1639
+ exclude_attrs.add("TRICEnvironmentManager")
1640
+ exclude_attrs.add("TRIFBCloudKitTreatmentRecordAsset")
1641
+ exclude_attrs.add("TRIFBFactorLevel")
1642
+ exclude_attrs.add("TRIFBFactorMetadataKeyValue")
1643
+ exclude_attrs.add("TRIFBFastFactorLevels")
1644
+ exclude_attrs.add("TRIFBMobileAssetReference")
1645
+ exclude_attrs.add("TRIFBTrialManagedAsset")
1646
+ exclude_attrs.add("TRILevel")
1647
+ exclude_attrs.add("TRINamespaceResolver")
1648
+ exclude_attrs.add("TRIPBAutocreatedArray")
1649
+ exclude_attrs.add("TRIPBAutocreatedDictionary")
1650
+ exclude_attrs.add("TRIPBBoolArray")
1651
+ exclude_attrs.add("TRIPBBoolBoolDictionary")
1652
+ exclude_attrs.add("TRIPBBoolDoubleDictionary")
1653
+ exclude_attrs.add("TRIPBBoolEnumDictionary")
1654
+ exclude_attrs.add("TRIPBBoolFloatDictionary")
1655
+ exclude_attrs.add("TRIPBBoolInt32Dictionary")
1656
+ exclude_attrs.add("TRIPBBoolInt64Dictionary")
1657
+ exclude_attrs.add("TRIPBBoolObjectDictionary")
1658
+ exclude_attrs.add("TRIPBBoolUInt32Dictionary")
1659
+ exclude_attrs.add("TRIPBBoolUInt64Dictionary")
1660
+ exclude_attrs.add("TRIPBDescriptor")
1661
+ exclude_attrs.add("TRIPBEnumDescriptor")
1662
+ exclude_attrs.add("TRIPBExtensionDescriptor")
1663
+ exclude_attrs.add("TRIPBInt32BoolDictionary")
1664
+ exclude_attrs.add("TRIPBInt64BoolDictionary")
1665
+ exclude_attrs.add("TRIPBOneofDescriptor")
1666
+ exclude_attrs.add("TRIPBStringBoolDictionary")
1667
+ exclude_attrs.add("TRIPBUInt32BoolDictionary")
1668
+ exclude_attrs.add("TRIPBUInt64BoolDictionary")
1669
+ exclude_attrs.add("TSPSaveMeasurements")
1670
+ exclude_attrs.add("TTSRegex")
1671
+ exclude_attrs.add("TTSUnicodeUtils")
1672
+ exclude_attrs.add("UAFAssetExpansion")
1673
+ exclude_attrs.add("UAFAssetSetManager")
1674
+ exclude_attrs.add("UAFAutoAssetManager")
1675
+ exclude_attrs.add("UAFAutoAssetSet")
1676
+ exclude_attrs.add("UAFCommonUtilities")
1677
+ exclude_attrs.add("UAFSubscriptionStoreManager")
1678
+ exclude_attrs.add("UIFont")
1679
+ exclude_attrs.add("UINibDecoder")
1680
+ exclude_attrs.add("UINibEncoder")
1681
+ exclude_attrs.add("UNLocalizedString")
1682
+ exclude_attrs.add("UNSecurityScopedURL")
1683
+ exclude_attrs.add("UserRegistryDB")
1684
+ exclude_attrs.add("VNCCCharBoxContext")
1685
+ exclude_attrs.add("VNCCTextDetector")
1686
+ exclude_attrs.add("VNDisallowedList")
1687
+ exclude_attrs.add("VNEspressoModelClassifier")
1688
+ exclude_attrs.add("VNFingerprintHash")
1689
+ exclude_attrs.add("VNPersonSegmentationGeneratorFast")
1690
+ exclude_attrs.add("VNPersonSegmentationGeneratorInstanceBased4People")
1691
+ exclude_attrs.add("VNPersonSegmentationGeneratorLearnedMatting")
1692
+ exclude_attrs.add("VNPersonSegmentationGeneratorLearnedMattingTiled")
1693
+ exclude_attrs.add("VNPersonSegmentationGeneratorSemantics")
1694
+ exclude_attrs.add("VNSegmentationGenerator")
1695
+ exclude_attrs.add("VNSmartCamClassifier")
1696
+ exclude_attrs.add("VNValidationUtilities")
1697
+ exclude_attrs.add("VisionCoreMetalContext")
1698
+ exclude_attrs.add("WiFiAwareDiscoveryResult")
1699
+ exclude_attrs.add("WiFiP2PXPCConnection")
1700
+ exclude_attrs.add("geo_isolater")
1701
+ exclude_attrs.add("geo_reentrant_isolater")
1702
+ exclude_attrs.add(
1703
+ ("CWInterface", "twoGHzChainDisabledAndReturnReassocRequired_error_")
1704
+ )
1705
+ exclude_attrs.add(
1706
+ ("IOBluetoothDevice", "getRemoteVersionInfo_lmpVersion_lmpSubversion_")
1707
+ )
1708
+ exclude_attrs.add(("IOBluetoothHandsFree", "processIncomingData_length_"))
1709
+ exclude_attrs.add(
1710
+ ("IOBluetoothHandsFreeAudioGateway", "processIncomingData_length_")
1711
+ )
1712
+ exclude_attrs.add(("IOBluetoothHandsFreeDevice", "processIncomingData_length_"))
1713
+ exclude_attrs.add(("IOBluetoothHandsFreeDevice", "saveToFile_bufferSize_"))
1714
+ exclude_attrs.add(
1715
+ ("IOBluetoothHostController", "getPropertyObjectFromIOServiceNamed_forKey_")
1716
+ )
1717
+ exclude_attrs.add(
1718
+ (
1719
+ "IOBluetoothHostController",
1720
+ "readVerboseConfigVersionInfo_outTargetID_outBaseline_outBuild_",
1721
+ )
1722
+ )
1723
+ exclude_attrs.add(
1724
+ (
1725
+ "NSFileProviderManager",
1726
+ "checkDomainsCanBeStored_onVolumeAtURL_unsupportedReason_error_",
1727
+ )
1728
+ )
1729
+ exclude_attrs.add(
1730
+ (
1731
+ "TKSmartCard",
1732
+ "buildIns_p1_p2_data_range_le_protocol_chained_extended_realLe_",
1733
+ )
1734
+ )
1735
+
1386
1736
  # Calculate all (interesting) names in the module. This pokes into
1387
1737
  # the implementation details of objc.ObjCLazyModule to avoid loading
1388
1738
  # all attributes (which is expensive for larger bindings).
1389
- if isinstance(module, objc.ObjCLazyModule):
1739
+ def is_pyobjc_lazy(module):
1740
+ getter = getattr(module, "__getattr__", None)
1741
+ if getter is None:
1742
+ return False
1743
+ return hasattr(getter, "_pyobjc_parents")
1744
+
1745
+ if is_pyobjc_lazy(module):
1746
+ getter = getattr(module, "__getattr__", None)
1390
1747
  module_names = []
1391
1748
  module_names.extend(
1392
1749
  cls.__name__
1393
1750
  for cls in objc.getClassList(True)
1394
1751
  if (not cls.__name__.startswith("_")) and ("." not in cls.__name__)
1395
1752
  )
1396
- module_names.extend(module._ObjCLazyModule__funcmap or [])
1397
- module_names.extend(module.__dict__.keys())
1398
- todo = list(module._ObjCLazyModule__parents or [])
1753
+ module_names.extend(getattr(getter, "_pyobjc_funcmap", None) or [])
1754
+ todo = list(getter._pyobjc_parents)
1399
1755
  while todo:
1400
1756
  parent = todo.pop()
1401
- if isinstance(parent, objc.ObjCLazyModule):
1402
- module_names.extend(parent._ObjCLazyModule__funcmap or ())
1403
- todo.extend(parent._ObjCLazyModule__parents or ())
1757
+ if is_pyobjc_lazy(parent):
1758
+ getter = getattr(parent, "__getattr__", None)
1759
+ module_names.extend(getattr(getter, "_pyobjc_funcmap", None) or [])
1760
+ todo.extend(getter._pyobjc_parents or ())
1404
1761
  module_names.extend(parent.__dict__.keys())
1762
+
1405
1763
  else:
1406
1764
  module_names.extend(dir(parent))
1407
1765
 
1408
- # The module_names list might contain duplicates
1409
1766
  module_names = sorted(set(module_names))
1410
- else:
1411
-
1412
- def is_pyobjc_lazy(module):
1413
- getter = getattr(module, "__getattr__", None)
1414
- if getter is None:
1415
- return False
1416
- return hasattr(getter, "_pyobjc_parents")
1417
-
1418
- if is_pyobjc_lazy(module):
1419
- getter = getattr(module, "__getattr__", None)
1420
- module_names = []
1421
- module_names.extend(
1422
- cls.__name__
1423
- for cls in objc.getClassList(True)
1424
- if (not cls.__name__.startswith("_")) and ("." not in cls.__name__)
1425
- )
1426
- module_names.extend(getattr(getter, "_pyobjc_funcmap", None) or [])
1427
- todo = list(getter._pyobjc_parents)
1428
- while todo:
1429
- parent = todo.pop()
1430
- if is_pyobjc_lazy(parent):
1431
- getter = getattr(parent, "__getattr__", None)
1432
- module_names.extend(
1433
- getattr(getter, "_pyobjc_funcmap", None) or []
1434
- )
1435
- todo.extend(getter._pyobjc_parents or ())
1436
- module_names.extend(parent.__dict__.keys())
1437
-
1438
- else:
1439
- module_names.extend(dir(parent))
1440
1767
 
1441
- module_names = sorted(set(module_names))
1442
-
1443
- else:
1444
- module_names = sorted(set(dir(module)))
1768
+ else:
1769
+ module_names = sorted(set(dir(module)))
1445
1770
 
1446
1771
  for _idx, nm in enumerate(module_names):
1447
1772
  # print(f"{_idx}/{len(module_names)} {nm}")
@@ -1452,18 +1777,16 @@ class TestCase(_unittest.TestCase):
1452
1777
 
1453
1778
  try:
1454
1779
  value = getattr(module, nm)
1455
- except AttributeError:
1456
- continue
1780
+ except AttributeError: # pragma: no cover
1781
+ continue # pragma: no cover
1457
1782
  if isinstance(value, objc.objc_class):
1458
1783
  with objc.autorelease_pool():
1459
1784
  if value.__name__ == "Object":
1460
1785
  # Root class, does not conform to the NSObject
1461
1786
  # protocol and useless to test.
1462
1787
  continue
1463
- for (
1464
- attr_name,
1465
- attr,
1466
- ) in value.pyobjc_instanceMethods.__dict__.items():
1788
+ instanceMethodDict = value.pyobjc_instanceMethods.__dict__
1789
+ for attr_name, attr in instanceMethodDict.items():
1467
1790
  if attr_name in exclude_method_names:
1468
1791
  continue
1469
1792
  if (nm, attr_name) in exclude_attrs:
@@ -1472,6 +1795,12 @@ class TestCase(_unittest.TestCase):
1472
1795
  # Skip private names
1473
1796
  continue
1474
1797
 
1798
+ if value.__name__ == "IOBluetoothHostController" and any(
1799
+ attr_name.startswith(pfx)
1800
+ for pfx in ("Bluetooth", "Broadcom")
1801
+ ):
1802
+ continue
1803
+
1475
1804
  with self.subTest(classname=nm, instance_method=attr_name):
1476
1805
  if isinstance(attr, objc.selector): # pragma: no branch
1477
1806
  self._validateCallableMetadata(
@@ -1481,8 +1810,8 @@ class TestCase(_unittest.TestCase):
1481
1810
  )
1482
1811
 
1483
1812
  for attr_name, attr in value.pyobjc_classMethods.__dict__.items():
1484
- if attr_name in exclude_method_names:
1485
- continue
1813
+ if attr_name in exclude_method_names: # pragma: no branch
1814
+ continue # pragma: no cover
1486
1815
  if (nm, attr_name) in exclude_attrs:
1487
1816
  continue
1488
1817
  if attr_name.startswith("_"):
@@ -1,6 +1,7 @@
1
1
  import collections.abc
2
2
  import datetime
3
3
  import pathlib
4
+ import numbers
4
5
 
5
6
  from objc import _objc
6
7
 
@@ -10,6 +11,7 @@ __all__ = [
10
11
  "registerSetType",
11
12
  "registerDateType",
12
13
  "registerPathType",
14
+ "registerNumberType",
13
15
  ]
14
16
 
15
17
  _objc.options._datetime_date_type = datetime.date
@@ -56,6 +58,14 @@ def registerPathType(type_object):
56
58
  _objc.options._path_types += (type_object,)
57
59
 
58
60
 
61
+ def registerNumberType(type_object):
62
+ """
63
+ Register 'type' as a date-like type that will be proxied
64
+ as an NSDate subclass.
65
+ """
66
+ _objc.options._number_types += (type_object,)
67
+
68
+
59
69
  registerListType(collections.abc.Sequence)
60
70
  registerListType(range)
61
71
  registerMappingType(collections.abc.Mapping)
@@ -66,3 +76,4 @@ registerSetType(collections.abc.Set)
66
76
  registerDateType(datetime.date)
67
77
  registerDateType(datetime.datetime)
68
78
  registerPathType(pathlib.Path)
79
+ registerNumberType(numbers.Number)
@@ -669,29 +669,16 @@ def _parseBridgeSupport(data, globals, frameworkName, *args, **kwds): # noqa: A
669
669
  )
670
670
 
671
671
 
672
- if sys.version_info[:2] >= (3, 9): # pragma: no branch
673
-
674
- def resource_exists(package, resource):
675
- try:
676
- return resources.files(package).joinpath(resource).is_file()
677
-
678
- except ImportError:
679
- return False
680
-
681
- def resource_string(package, resource):
682
- return resources.files(package).joinpath(resource).read_text()
683
-
684
- else: # pragma: no cover
672
+ def resource_exists(package, resource):
673
+ try:
674
+ return resources.files(package).joinpath(resource).is_file()
685
675
 
686
- def resource_exists(package, resource):
687
- try:
688
- return resources.is_resource(package, resource)
676
+ except ImportError:
677
+ return False
689
678
 
690
- except ImportError:
691
- return False
692
679
 
693
- def resource_string(package, resource):
694
- return resources.read_text(package, resource)
680
+ def resource_string(package, resource):
681
+ return resources.files(package).joinpath(resource).read_text()
695
682
 
696
683
 
697
684
  def initFrameworkWrapper(
@@ -139,7 +139,9 @@ def registerNewKeywordsFromSelector(classname, selector):
139
139
  raise TypeError("selector should by a bytes object")
140
140
  selname = selector.decode()
141
141
  kw = _selectorToKeywords(selname)
142
- NEW_MAP.setdefault(classname, {})[kw] = selname.replace(":", "_")
142
+ map_dict = NEW_MAP.setdefault(classname, {})
143
+ if kw not in map_dict:
144
+ map_dict[kw] = selname.replace(":", "_")
143
145
 
144
146
 
145
147
  def registerNewKeywords(classname, keywords, methodname):
@@ -152,7 +154,9 @@ def registerNewKeywords(classname, keywords, methodname):
152
154
  """
153
155
  if not isinstance(keywords, tuple) or not all(isinstance(x, str) for x in keywords):
154
156
  raise TypeError("keywords must be tuple of strings")
155
- NEW_MAP.setdefault(classname, {})[keywords] = methodname
157
+ map_dict = NEW_MAP.setdefault(classname, {})
158
+ if keywords not in map_dict:
159
+ map_dict[keywords] = methodname
156
160
 
157
161
 
158
162
  def registerABCForClass(classname, *abc_class):