frida 16.2.1 → 16.2.2

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 (386) hide show
  1. package/BSDmakefile +6 -0
  2. package/Makefile +16 -0
  3. package/README.md +14 -11
  4. package/configure +18 -0
  5. package/configure.bat +22 -0
  6. package/dist/native.js +0 -8
  7. package/lib/application.ts +98 -0
  8. package/lib/authentication.ts +3 -0
  9. package/lib/build.py +50 -0
  10. package/lib/bus.ts +30 -0
  11. package/lib/cancellable.ts +33 -0
  12. package/lib/child.ts +15 -0
  13. package/lib/crash.ts +11 -0
  14. package/lib/device.ts +329 -0
  15. package/lib/device_manager.ts +69 -0
  16. package/lib/endpoint_parameters.ts +56 -0
  17. package/lib/icon.ts +15 -0
  18. package/lib/index.ts +311 -0
  19. package/lib/iostream.ts +78 -0
  20. package/lib/meson.build +53 -0
  21. package/lib/native.ts +9 -0
  22. package/lib/portal_membership.ts +10 -0
  23. package/lib/portal_service.ts +105 -0
  24. package/lib/process.ts +57 -0
  25. package/lib/relay.ts +44 -0
  26. package/lib/script.ts +352 -0
  27. package/lib/session.ts +113 -0
  28. package/lib/signals.ts +45 -0
  29. package/lib/socket_address.ts +35 -0
  30. package/lib/spawn.ts +4 -0
  31. package/lib/system_parameters.ts +78 -0
  32. package/make.bat +23 -0
  33. package/meson.build +160 -0
  34. package/meson.options +11 -0
  35. package/package.json +27 -6
  36. package/releng/deps.py +1133 -0
  37. package/releng/deps.toml +391 -0
  38. package/releng/devkit-assets/frida-core-example-unix.c +188 -0
  39. package/releng/devkit-assets/frida-core-example-windows.c +197 -0
  40. package/releng/devkit-assets/frida-core-example.sln +28 -0
  41. package/releng/devkit-assets/frida-core-example.vcxproj +157 -0
  42. package/releng/devkit-assets/frida-core-example.vcxproj.filters +27 -0
  43. package/releng/devkit-assets/frida-gum-example-unix.c +122 -0
  44. package/releng/devkit-assets/frida-gum-example-windows.c +132 -0
  45. package/releng/devkit-assets/frida-gum-example.sln +28 -0
  46. package/releng/devkit-assets/frida-gum-example.vcxproj +157 -0
  47. package/releng/devkit-assets/frida-gum-example.vcxproj.filters +27 -0
  48. package/releng/devkit-assets/frida-gumjs-example-unix.c +84 -0
  49. package/releng/devkit-assets/frida-gumjs-example-windows.c +91 -0
  50. package/releng/devkit-assets/frida-gumjs-example.sln +28 -0
  51. package/releng/devkit-assets/frida-gumjs-example.vcxproj +157 -0
  52. package/releng/devkit-assets/frida-gumjs-example.vcxproj.filters +27 -0
  53. package/releng/devkit.py +535 -0
  54. package/releng/env.py +420 -0
  55. package/releng/env_android.py +150 -0
  56. package/releng/env_apple.py +176 -0
  57. package/releng/env_generic.py +373 -0
  58. package/releng/frida_version.py +69 -0
  59. package/releng/machine_file.py +44 -0
  60. package/releng/machine_spec.py +290 -0
  61. package/releng/meson/meson.py +27 -0
  62. package/releng/meson/mesonbuild/__init__.py +0 -0
  63. package/releng/meson/mesonbuild/_pathlib.py +63 -0
  64. package/releng/meson/mesonbuild/_typing.py +69 -0
  65. package/releng/meson/mesonbuild/arglist.py +321 -0
  66. package/releng/meson/mesonbuild/ast/__init__.py +23 -0
  67. package/releng/meson/mesonbuild/ast/interpreter.py +441 -0
  68. package/releng/meson/mesonbuild/ast/introspection.py +374 -0
  69. package/releng/meson/mesonbuild/ast/postprocess.py +109 -0
  70. package/releng/meson/mesonbuild/ast/printer.py +620 -0
  71. package/releng/meson/mesonbuild/ast/visitor.py +161 -0
  72. package/releng/meson/mesonbuild/backend/__init__.py +0 -0
  73. package/releng/meson/mesonbuild/backend/backends.py +2047 -0
  74. package/releng/meson/mesonbuild/backend/ninjabackend.py +3808 -0
  75. package/releng/meson/mesonbuild/backend/nonebackend.py +26 -0
  76. package/releng/meson/mesonbuild/backend/vs2010backend.py +2078 -0
  77. package/releng/meson/mesonbuild/backend/vs2012backend.py +35 -0
  78. package/releng/meson/mesonbuild/backend/vs2013backend.py +34 -0
  79. package/releng/meson/mesonbuild/backend/vs2015backend.py +35 -0
  80. package/releng/meson/mesonbuild/backend/vs2017backend.py +59 -0
  81. package/releng/meson/mesonbuild/backend/vs2019backend.py +54 -0
  82. package/releng/meson/mesonbuild/backend/vs2022backend.py +54 -0
  83. package/releng/meson/mesonbuild/backend/xcodebackend.py +1781 -0
  84. package/releng/meson/mesonbuild/build.py +3249 -0
  85. package/releng/meson/mesonbuild/cargo/__init__.py +5 -0
  86. package/releng/meson/mesonbuild/cargo/builder.py +238 -0
  87. package/releng/meson/mesonbuild/cargo/cfg.py +274 -0
  88. package/releng/meson/mesonbuild/cargo/interpreter.py +733 -0
  89. package/releng/meson/mesonbuild/cargo/manifest.py +227 -0
  90. package/releng/meson/mesonbuild/cargo/version.py +95 -0
  91. package/releng/meson/mesonbuild/cmake/__init__.py +28 -0
  92. package/releng/meson/mesonbuild/cmake/common.py +331 -0
  93. package/releng/meson/mesonbuild/cmake/data/__init__.py +0 -0
  94. package/releng/meson/mesonbuild/cmake/data/preload.cmake +82 -0
  95. package/releng/meson/mesonbuild/cmake/executor.py +241 -0
  96. package/releng/meson/mesonbuild/cmake/fileapi.py +324 -0
  97. package/releng/meson/mesonbuild/cmake/generator.py +186 -0
  98. package/releng/meson/mesonbuild/cmake/interpreter.py +1267 -0
  99. package/releng/meson/mesonbuild/cmake/toolchain.py +248 -0
  100. package/releng/meson/mesonbuild/cmake/traceparser.py +814 -0
  101. package/releng/meson/mesonbuild/cmake/tracetargets.py +161 -0
  102. package/releng/meson/mesonbuild/compilers/__init__.py +86 -0
  103. package/releng/meson/mesonbuild/compilers/asm.py +307 -0
  104. package/releng/meson/mesonbuild/compilers/c.py +788 -0
  105. package/releng/meson/mesonbuild/compilers/c_function_attributes.py +143 -0
  106. package/releng/meson/mesonbuild/compilers/compilers.py +1388 -0
  107. package/releng/meson/mesonbuild/compilers/cpp.py +1035 -0
  108. package/releng/meson/mesonbuild/compilers/cs.py +136 -0
  109. package/releng/meson/mesonbuild/compilers/cuda.py +806 -0
  110. package/releng/meson/mesonbuild/compilers/cython.py +91 -0
  111. package/releng/meson/mesonbuild/compilers/d.py +861 -0
  112. package/releng/meson/mesonbuild/compilers/detect.py +1396 -0
  113. package/releng/meson/mesonbuild/compilers/fortran.py +523 -0
  114. package/releng/meson/mesonbuild/compilers/java.py +113 -0
  115. package/releng/meson/mesonbuild/compilers/mixins/__init__.py +0 -0
  116. package/releng/meson/mesonbuild/compilers/mixins/arm.py +167 -0
  117. package/releng/meson/mesonbuild/compilers/mixins/ccrx.py +113 -0
  118. package/releng/meson/mesonbuild/compilers/mixins/clang.py +170 -0
  119. package/releng/meson/mesonbuild/compilers/mixins/clike.py +1330 -0
  120. package/releng/meson/mesonbuild/compilers/mixins/compcert.py +117 -0
  121. package/releng/meson/mesonbuild/compilers/mixins/elbrus.py +93 -0
  122. package/releng/meson/mesonbuild/compilers/mixins/emscripten.py +89 -0
  123. package/releng/meson/mesonbuild/compilers/mixins/gnu.py +629 -0
  124. package/releng/meson/mesonbuild/compilers/mixins/intel.py +167 -0
  125. package/releng/meson/mesonbuild/compilers/mixins/islinker.py +120 -0
  126. package/releng/meson/mesonbuild/compilers/mixins/metrowerks.py +279 -0
  127. package/releng/meson/mesonbuild/compilers/mixins/pgi.py +88 -0
  128. package/releng/meson/mesonbuild/compilers/mixins/ti.py +130 -0
  129. package/releng/meson/mesonbuild/compilers/mixins/visualstudio.py +458 -0
  130. package/releng/meson/mesonbuild/compilers/mixins/xc16.py +111 -0
  131. package/releng/meson/mesonbuild/compilers/objc.py +120 -0
  132. package/releng/meson/mesonbuild/compilers/objcpp.py +102 -0
  133. package/releng/meson/mesonbuild/compilers/rust.py +230 -0
  134. package/releng/meson/mesonbuild/compilers/swift.py +131 -0
  135. package/releng/meson/mesonbuild/compilers/vala.py +121 -0
  136. package/releng/meson/mesonbuild/coredata.py +1532 -0
  137. package/releng/meson/mesonbuild/dependencies/__init__.py +252 -0
  138. package/releng/meson/mesonbuild/dependencies/base.py +663 -0
  139. package/releng/meson/mesonbuild/dependencies/boost.py +1083 -0
  140. package/releng/meson/mesonbuild/dependencies/cmake.py +656 -0
  141. package/releng/meson/mesonbuild/dependencies/coarrays.py +80 -0
  142. package/releng/meson/mesonbuild/dependencies/configtool.py +163 -0
  143. package/releng/meson/mesonbuild/dependencies/cuda.py +295 -0
  144. package/releng/meson/mesonbuild/dependencies/data/CMakeLists.txt +102 -0
  145. package/releng/meson/mesonbuild/dependencies/data/CMakeListsLLVM.txt +204 -0
  146. package/releng/meson/mesonbuild/dependencies/data/CMakePathInfo.txt +31 -0
  147. package/releng/meson/mesonbuild/dependencies/data/__init__.py +0 -0
  148. package/releng/meson/mesonbuild/dependencies/detect.py +225 -0
  149. package/releng/meson/mesonbuild/dependencies/dev.py +707 -0
  150. package/releng/meson/mesonbuild/dependencies/dub.py +424 -0
  151. package/releng/meson/mesonbuild/dependencies/factory.py +146 -0
  152. package/releng/meson/mesonbuild/dependencies/framework.py +111 -0
  153. package/releng/meson/mesonbuild/dependencies/hdf5.py +168 -0
  154. package/releng/meson/mesonbuild/dependencies/misc.py +618 -0
  155. package/releng/meson/mesonbuild/dependencies/mpi.py +231 -0
  156. package/releng/meson/mesonbuild/dependencies/pkgconfig.py +570 -0
  157. package/releng/meson/mesonbuild/dependencies/platform.py +52 -0
  158. package/releng/meson/mesonbuild/dependencies/python.py +431 -0
  159. package/releng/meson/mesonbuild/dependencies/qt.py +484 -0
  160. package/releng/meson/mesonbuild/dependencies/scalapack.py +142 -0
  161. package/releng/meson/mesonbuild/dependencies/ui.py +281 -0
  162. package/releng/meson/mesonbuild/depfile.py +82 -0
  163. package/releng/meson/mesonbuild/envconfig.py +480 -0
  164. package/releng/meson/mesonbuild/environment.py +987 -0
  165. package/releng/meson/mesonbuild/interpreter/__init__.py +47 -0
  166. package/releng/meson/mesonbuild/interpreter/compiler.py +900 -0
  167. package/releng/meson/mesonbuild/interpreter/dependencyfallbacks.py +386 -0
  168. package/releng/meson/mesonbuild/interpreter/interpreter.py +3595 -0
  169. package/releng/meson/mesonbuild/interpreter/interpreterobjects.py +1096 -0
  170. package/releng/meson/mesonbuild/interpreter/kwargs.py +479 -0
  171. package/releng/meson/mesonbuild/interpreter/mesonmain.py +487 -0
  172. package/releng/meson/mesonbuild/interpreter/primitives/__init__.py +29 -0
  173. package/releng/meson/mesonbuild/interpreter/primitives/array.py +108 -0
  174. package/releng/meson/mesonbuild/interpreter/primitives/boolean.py +52 -0
  175. package/releng/meson/mesonbuild/interpreter/primitives/dict.py +88 -0
  176. package/releng/meson/mesonbuild/interpreter/primitives/integer.py +86 -0
  177. package/releng/meson/mesonbuild/interpreter/primitives/range.py +38 -0
  178. package/releng/meson/mesonbuild/interpreter/primitives/string.py +247 -0
  179. package/releng/meson/mesonbuild/interpreter/type_checking.py +853 -0
  180. package/releng/meson/mesonbuild/interpreterbase/__init__.py +126 -0
  181. package/releng/meson/mesonbuild/interpreterbase/_unholder.py +25 -0
  182. package/releng/meson/mesonbuild/interpreterbase/baseobjects.py +174 -0
  183. package/releng/meson/mesonbuild/interpreterbase/decorators.py +806 -0
  184. package/releng/meson/mesonbuild/interpreterbase/disabler.py +35 -0
  185. package/releng/meson/mesonbuild/interpreterbase/exceptions.py +22 -0
  186. package/releng/meson/mesonbuild/interpreterbase/helpers.py +67 -0
  187. package/releng/meson/mesonbuild/interpreterbase/interpreterbase.py +665 -0
  188. package/releng/meson/mesonbuild/interpreterbase/operator.py +32 -0
  189. package/releng/meson/mesonbuild/linkers/__init__.py +20 -0
  190. package/releng/meson/mesonbuild/linkers/base.py +39 -0
  191. package/releng/meson/mesonbuild/linkers/detect.py +229 -0
  192. package/releng/meson/mesonbuild/linkers/linkers.py +1614 -0
  193. package/releng/meson/mesonbuild/mcompile.py +380 -0
  194. package/releng/meson/mesonbuild/mconf.py +368 -0
  195. package/releng/meson/mesonbuild/mdevenv.py +234 -0
  196. package/releng/meson/mesonbuild/mdist.py +376 -0
  197. package/releng/meson/mesonbuild/mesondata.py +38 -0
  198. package/releng/meson/mesonbuild/mesonlib.py +23 -0
  199. package/releng/meson/mesonbuild/mesonmain.py +289 -0
  200. package/releng/meson/mesonbuild/minit.py +204 -0
  201. package/releng/meson/mesonbuild/minstall.py +864 -0
  202. package/releng/meson/mesonbuild/mintro.py +667 -0
  203. package/releng/meson/mesonbuild/mlog.py +542 -0
  204. package/releng/meson/mesonbuild/modules/__init__.py +270 -0
  205. package/releng/meson/mesonbuild/modules/cmake.py +442 -0
  206. package/releng/meson/mesonbuild/modules/cuda.py +377 -0
  207. package/releng/meson/mesonbuild/modules/dlang.py +117 -0
  208. package/releng/meson/mesonbuild/modules/external_project.py +306 -0
  209. package/releng/meson/mesonbuild/modules/fs.py +323 -0
  210. package/releng/meson/mesonbuild/modules/gnome.py +2215 -0
  211. package/releng/meson/mesonbuild/modules/hotdoc.py +487 -0
  212. package/releng/meson/mesonbuild/modules/i18n.py +405 -0
  213. package/releng/meson/mesonbuild/modules/icestorm.py +123 -0
  214. package/releng/meson/mesonbuild/modules/java.py +112 -0
  215. package/releng/meson/mesonbuild/modules/keyval.py +65 -0
  216. package/releng/meson/mesonbuild/modules/modtest.py +33 -0
  217. package/releng/meson/mesonbuild/modules/pkgconfig.py +744 -0
  218. package/releng/meson/mesonbuild/modules/python.py +556 -0
  219. package/releng/meson/mesonbuild/modules/python3.py +85 -0
  220. package/releng/meson/mesonbuild/modules/qt.py +621 -0
  221. package/releng/meson/mesonbuild/modules/qt4.py +23 -0
  222. package/releng/meson/mesonbuild/modules/qt5.py +23 -0
  223. package/releng/meson/mesonbuild/modules/qt6.py +22 -0
  224. package/releng/meson/mesonbuild/modules/rust.py +355 -0
  225. package/releng/meson/mesonbuild/modules/simd.py +114 -0
  226. package/releng/meson/mesonbuild/modules/sourceset.py +291 -0
  227. package/releng/meson/mesonbuild/modules/wayland.py +151 -0
  228. package/releng/meson/mesonbuild/modules/windows.py +207 -0
  229. package/releng/meson/mesonbuild/mparser.py +1114 -0
  230. package/releng/meson/mesonbuild/msetup.py +365 -0
  231. package/releng/meson/mesonbuild/msubprojects.py +764 -0
  232. package/releng/meson/mesonbuild/mtest.py +2201 -0
  233. package/releng/meson/mesonbuild/munstable_coredata.py +107 -0
  234. package/releng/meson/mesonbuild/optinterpreter.py +276 -0
  235. package/releng/meson/mesonbuild/programs.py +367 -0
  236. package/releng/meson/mesonbuild/rewriter.py +1075 -0
  237. package/releng/meson/mesonbuild/scripts/__init__.py +10 -0
  238. package/releng/meson/mesonbuild/scripts/clangformat.py +55 -0
  239. package/releng/meson/mesonbuild/scripts/clangtidy.py +30 -0
  240. package/releng/meson/mesonbuild/scripts/cleantrees.py +35 -0
  241. package/releng/meson/mesonbuild/scripts/cmake_run_ctgt.py +103 -0
  242. package/releng/meson/mesonbuild/scripts/cmd_or_ps.ps1 +17 -0
  243. package/releng/meson/mesonbuild/scripts/copy.py +19 -0
  244. package/releng/meson/mesonbuild/scripts/coverage.py +214 -0
  245. package/releng/meson/mesonbuild/scripts/delwithsuffix.py +27 -0
  246. package/releng/meson/mesonbuild/scripts/depfixer.py +495 -0
  247. package/releng/meson/mesonbuild/scripts/depscan.py +198 -0
  248. package/releng/meson/mesonbuild/scripts/dirchanger.py +20 -0
  249. package/releng/meson/mesonbuild/scripts/env2mfile.py +402 -0
  250. package/releng/meson/mesonbuild/scripts/externalproject.py +106 -0
  251. package/releng/meson/mesonbuild/scripts/gettext.py +86 -0
  252. package/releng/meson/mesonbuild/scripts/gtkdochelper.py +286 -0
  253. package/releng/meson/mesonbuild/scripts/hotdochelper.py +40 -0
  254. package/releng/meson/mesonbuild/scripts/itstool.py +77 -0
  255. package/releng/meson/mesonbuild/scripts/meson_exe.py +115 -0
  256. package/releng/meson/mesonbuild/scripts/msgfmthelper.py +29 -0
  257. package/releng/meson/mesonbuild/scripts/pycompile.py +54 -0
  258. package/releng/meson/mesonbuild/scripts/python_info.py +121 -0
  259. package/releng/meson/mesonbuild/scripts/regen_checker.py +55 -0
  260. package/releng/meson/mesonbuild/scripts/run_tool.py +58 -0
  261. package/releng/meson/mesonbuild/scripts/scanbuild.py +57 -0
  262. package/releng/meson/mesonbuild/scripts/symbolextractor.py +322 -0
  263. package/releng/meson/mesonbuild/scripts/tags.py +44 -0
  264. package/releng/meson/mesonbuild/scripts/test_loaded_modules.py +14 -0
  265. package/releng/meson/mesonbuild/scripts/uninstall.py +41 -0
  266. package/releng/meson/mesonbuild/scripts/vcstagger.py +35 -0
  267. package/releng/meson/mesonbuild/scripts/yasm.py +24 -0
  268. package/releng/meson/mesonbuild/templates/__init__.py +0 -0
  269. package/releng/meson/mesonbuild/templates/cpptemplates.py +143 -0
  270. package/releng/meson/mesonbuild/templates/cstemplates.py +90 -0
  271. package/releng/meson/mesonbuild/templates/ctemplates.py +126 -0
  272. package/releng/meson/mesonbuild/templates/cudatemplates.py +143 -0
  273. package/releng/meson/mesonbuild/templates/dlangtemplates.py +109 -0
  274. package/releng/meson/mesonbuild/templates/fortrantemplates.py +101 -0
  275. package/releng/meson/mesonbuild/templates/javatemplates.py +94 -0
  276. package/releng/meson/mesonbuild/templates/mesontemplates.py +70 -0
  277. package/releng/meson/mesonbuild/templates/objcpptemplates.py +126 -0
  278. package/releng/meson/mesonbuild/templates/objctemplates.py +126 -0
  279. package/releng/meson/mesonbuild/templates/rusttemplates.py +79 -0
  280. package/releng/meson/mesonbuild/templates/samplefactory.py +41 -0
  281. package/releng/meson/mesonbuild/templates/sampleimpl.py +160 -0
  282. package/releng/meson/mesonbuild/templates/valatemplates.py +82 -0
  283. package/releng/meson/mesonbuild/utils/__init__.py +0 -0
  284. package/releng/meson/mesonbuild/utils/core.py +166 -0
  285. package/releng/meson/mesonbuild/utils/platform.py +27 -0
  286. package/releng/meson/mesonbuild/utils/posix.py +32 -0
  287. package/releng/meson/mesonbuild/utils/universal.py +2445 -0
  288. package/releng/meson/mesonbuild/utils/vsenv.py +126 -0
  289. package/releng/meson/mesonbuild/utils/win32.py +29 -0
  290. package/releng/meson/mesonbuild/wrap/__init__.py +59 -0
  291. package/releng/meson/mesonbuild/wrap/wrap.py +846 -0
  292. package/releng/meson/mesonbuild/wrap/wraptool.py +198 -0
  293. package/releng/meson-scripts/BSDmakefile +6 -0
  294. package/releng/meson-scripts/Makefile +16 -0
  295. package/releng/meson-scripts/configure +18 -0
  296. package/releng/meson-scripts/configure.bat +22 -0
  297. package/releng/meson-scripts/make.bat +23 -0
  298. package/releng/meson_configure.py +506 -0
  299. package/releng/meson_make.py +131 -0
  300. package/releng/mkdevkit.py +107 -0
  301. package/releng/mkfatmacho.py +54 -0
  302. package/releng/post-process-oabi.py +97 -0
  303. package/releng/progress.py +14 -0
  304. package/releng/sync-from-upstream.py +185 -0
  305. package/releng/tomlkit/tomlkit/__init__.py +59 -0
  306. package/releng/tomlkit/tomlkit/_compat.py +22 -0
  307. package/releng/tomlkit/tomlkit/_types.py +83 -0
  308. package/releng/tomlkit/tomlkit/_utils.py +158 -0
  309. package/releng/tomlkit/tomlkit/api.py +308 -0
  310. package/releng/tomlkit/tomlkit/container.py +875 -0
  311. package/releng/tomlkit/tomlkit/exceptions.py +227 -0
  312. package/releng/tomlkit/tomlkit/items.py +1967 -0
  313. package/releng/tomlkit/tomlkit/parser.py +1141 -0
  314. package/releng/tomlkit/tomlkit/py.typed +0 -0
  315. package/releng/tomlkit/tomlkit/source.py +180 -0
  316. package/releng/tomlkit/tomlkit/toml_char.py +52 -0
  317. package/releng/tomlkit/tomlkit/toml_document.py +7 -0
  318. package/releng/tomlkit/tomlkit/toml_file.py +58 -0
  319. package/releng/winenv.py +140 -0
  320. package/scripts/adjust-version.py +19 -0
  321. package/scripts/detect-version.py +40 -0
  322. package/scripts/fetch-abi-bits.py +343 -0
  323. package/scripts/install.js +23 -0
  324. package/scripts/package.py +15 -0
  325. package/src/addon.cc +76 -0
  326. package/src/application.cc +148 -0
  327. package/src/application.h +31 -0
  328. package/src/authentication.cc +174 -0
  329. package/src/authentication.h +24 -0
  330. package/src/bus.cc +167 -0
  331. package/src/bus.h +33 -0
  332. package/src/cancellable.cc +117 -0
  333. package/src/cancellable.h +31 -0
  334. package/src/child.cc +150 -0
  335. package/src/child.h +32 -0
  336. package/src/crash.cc +122 -0
  337. package/src/crash.h +30 -0
  338. package/src/device.cc +1302 -0
  339. package/src/device.h +55 -0
  340. package/src/device_manager.cc +362 -0
  341. package/src/device_manager.h +35 -0
  342. package/src/endpoint_parameters.cc +171 -0
  343. package/src/endpoint_parameters.h +28 -0
  344. package/src/glib_context.cc +62 -0
  345. package/src/glib_context.h +29 -0
  346. package/src/glib_object.cc +25 -0
  347. package/src/glib_object.h +37 -0
  348. package/src/iostream.cc +247 -0
  349. package/src/iostream.h +30 -0
  350. package/src/meson.build +26 -0
  351. package/src/operation.h +94 -0
  352. package/src/portal_membership.cc +100 -0
  353. package/src/portal_membership.h +26 -0
  354. package/src/portal_service.cc +401 -0
  355. package/src/portal_service.h +40 -0
  356. package/src/process.cc +135 -0
  357. package/src/process.h +30 -0
  358. package/src/relay.cc +139 -0
  359. package/src/relay.h +31 -0
  360. package/src/runtime.cc +443 -0
  361. package/src/runtime.h +64 -0
  362. package/src/script.cc +301 -0
  363. package/src/script.h +36 -0
  364. package/src/session.cc +860 -0
  365. package/src/session.h +42 -0
  366. package/src/signals.cc +334 -0
  367. package/src/signals.h +47 -0
  368. package/src/spawn.cc +95 -0
  369. package/src/spawn.h +27 -0
  370. package/src/usage_monitor.h +117 -0
  371. package/src/uv_context.cc +118 -0
  372. package/src/uv_context.h +40 -0
  373. package/src/win_delay_load_hook.cc +63 -0
  374. package/subprojects/frida-core.wrap +8 -0
  375. package/subprojects/nan.wrap +9 -0
  376. package/subprojects/packagefiles/nan.patch +13 -0
  377. package/test/data/index.ts +13 -0
  378. package/test/data/unixvictim-linux-x86 +0 -0
  379. package/test/data/unixvictim-linux-x86_64 +0 -0
  380. package/test/data/unixvictim-macos +0 -0
  381. package/test/device.ts +27 -0
  382. package/test/device_manager.ts +16 -0
  383. package/test/labrat.ts +32 -0
  384. package/test/script.ts +176 -0
  385. package/test/session.ts +73 -0
  386. package/tsconfig.json +18 -0
@@ -0,0 +1,374 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2018 The Meson development team
3
+ # Copyright © 2024 Intel Corporation
4
+
5
+ # This class contains the basic functionality needed to run any interpreter
6
+ # or an interpreter-based tool
7
+
8
+ from __future__ import annotations
9
+ import copy
10
+ import os
11
+ import typing as T
12
+
13
+ from .. import compilers, environment, mesonlib, optinterpreter
14
+ from .. import coredata as cdata
15
+ from ..build import Executable, Jar, SharedLibrary, SharedModule, StaticLibrary
16
+ from ..compilers import detect_compiler_for
17
+ from ..interpreterbase import InvalidArguments, SubProject
18
+ from ..mesonlib import MachineChoice, OptionKey
19
+ from ..mparser import BaseNode, ArithmeticNode, ArrayNode, ElementaryNode, IdNode, FunctionNode, BaseStringNode
20
+ from .interpreter import AstInterpreter
21
+
22
+ if T.TYPE_CHECKING:
23
+ from ..build import BuildTarget
24
+ from ..interpreterbase import TYPE_var
25
+ from .visitor import AstVisitor
26
+
27
+
28
+ # TODO: it would be nice to not have to duplicate this
29
+ BUILD_TARGET_FUNCTIONS = [
30
+ 'executable', 'jar', 'library', 'shared_library', 'shared_module',
31
+ 'static_library', 'both_libraries'
32
+ ]
33
+
34
+ class IntrospectionHelper:
35
+ # mimic an argparse namespace
36
+ def __init__(self, cross_file: T.Optional[str]):
37
+ self.cross_file = [cross_file] if cross_file is not None else []
38
+ self.native_file: T.List[str] = []
39
+ self.cmd_line_options: T.Dict[OptionKey, str] = {}
40
+ self.projectoptions: T.List[str] = []
41
+
42
+ def __eq__(self, other: object) -> bool:
43
+ return NotImplemented
44
+
45
+ class IntrospectionInterpreter(AstInterpreter):
46
+ # Interpreter to detect the options without a build directory
47
+ # Most of the code is stolen from interpreter.Interpreter
48
+ def __init__(self,
49
+ source_root: str,
50
+ subdir: str,
51
+ backend: str,
52
+ visitors: T.Optional[T.List[AstVisitor]] = None,
53
+ cross_file: T.Optional[str] = None,
54
+ subproject: SubProject = SubProject(''),
55
+ subproject_dir: str = 'subprojects',
56
+ env: T.Optional[environment.Environment] = None):
57
+ visitors = visitors if visitors is not None else []
58
+ super().__init__(source_root, subdir, subproject, visitors=visitors)
59
+
60
+ options = IntrospectionHelper(cross_file)
61
+ self.cross_file = cross_file
62
+ if env is None:
63
+ self.environment = environment.Environment(source_root, None, options)
64
+ else:
65
+ self.environment = env
66
+ self.subproject_dir = subproject_dir
67
+ self.coredata = self.environment.get_coredata()
68
+ self.backend = backend
69
+ self.default_options = {OptionKey('backend'): self.backend}
70
+ self.project_data: T.Dict[str, T.Any] = {}
71
+ self.targets: T.List[T.Dict[str, T.Any]] = []
72
+ self.dependencies: T.List[T.Dict[str, T.Any]] = []
73
+ self.project_node: BaseNode = None
74
+
75
+ self.funcs.update({
76
+ 'add_languages': self.func_add_languages,
77
+ 'dependency': self.func_dependency,
78
+ 'executable': self.func_executable,
79
+ 'jar': self.func_jar,
80
+ 'library': self.func_library,
81
+ 'project': self.func_project,
82
+ 'shared_library': self.func_shared_lib,
83
+ 'shared_module': self.func_shared_module,
84
+ 'static_library': self.func_static_lib,
85
+ 'both_libraries': self.func_both_lib,
86
+ })
87
+
88
+ def func_project(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> None:
89
+ if self.project_node:
90
+ raise InvalidArguments('Second call to project()')
91
+ self.project_node = node
92
+ if len(args) < 1:
93
+ raise InvalidArguments('Not enough arguments to project(). Needs at least the project name.')
94
+
95
+ proj_name = args[0]
96
+ proj_vers = kwargs.get('version', 'undefined')
97
+ proj_langs = self.flatten_args(args[1:])
98
+ if isinstance(proj_vers, ElementaryNode):
99
+ proj_vers = proj_vers.value
100
+ if not isinstance(proj_vers, str):
101
+ proj_vers = 'undefined'
102
+ self.project_data = {'descriptive_name': proj_name, 'version': proj_vers}
103
+
104
+ optfile = os.path.join(self.source_root, self.subdir, 'meson.options')
105
+ if not os.path.exists(optfile):
106
+ optfile = os.path.join(self.source_root, self.subdir, 'meson_options.txt')
107
+ if os.path.exists(optfile):
108
+ oi = optinterpreter.OptionInterpreter(self.subproject)
109
+ oi.process(optfile)
110
+ assert isinstance(proj_name, str), 'for mypy'
111
+ self.coredata.update_project_options(oi.options, T.cast('SubProject', proj_name))
112
+
113
+ def_opts = self.flatten_args(kwargs.get('default_options', []))
114
+ _project_default_options = mesonlib.stringlistify(def_opts)
115
+ self.project_default_options = cdata.create_options_dict(_project_default_options, self.subproject)
116
+ self.default_options.update(self.project_default_options)
117
+ self.coredata.set_default_options(self.default_options, self.subproject, self.environment)
118
+
119
+ if not self.is_subproject() and 'subproject_dir' in kwargs:
120
+ spdirname = kwargs['subproject_dir']
121
+ if isinstance(spdirname, BaseStringNode):
122
+ assert isinstance(spdirname.value, str)
123
+ self.subproject_dir = spdirname.value
124
+ if not self.is_subproject():
125
+ self.project_data['subprojects'] = []
126
+ subprojects_dir = os.path.join(self.source_root, self.subproject_dir)
127
+ if os.path.isdir(subprojects_dir):
128
+ for i in os.listdir(subprojects_dir):
129
+ if os.path.isdir(os.path.join(subprojects_dir, i)):
130
+ self.do_subproject(SubProject(i))
131
+
132
+ self.coredata.init_backend_options(self.backend)
133
+ options = {k: v for k, v in self.environment.options.items() if k.is_backend()}
134
+
135
+ self.coredata.set_options(options)
136
+ self._add_languages(proj_langs, True, MachineChoice.HOST)
137
+ self._add_languages(proj_langs, True, MachineChoice.BUILD)
138
+
139
+ def do_subproject(self, dirname: SubProject) -> None:
140
+ subproject_dir_abs = os.path.join(self.environment.get_source_dir(), self.subproject_dir)
141
+ subpr = os.path.join(subproject_dir_abs, dirname)
142
+ try:
143
+ subi = IntrospectionInterpreter(subpr, '', self.backend, cross_file=self.cross_file, subproject=dirname, subproject_dir=self.subproject_dir, env=self.environment, visitors=self.visitors)
144
+ subi.analyze()
145
+ subi.project_data['name'] = dirname
146
+ self.project_data['subprojects'] += [subi.project_data]
147
+ except (mesonlib.MesonException, RuntimeError):
148
+ return
149
+
150
+ def func_add_languages(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> None:
151
+ kwargs = self.flatten_kwargs(kwargs)
152
+ required = kwargs.get('required', True)
153
+ assert isinstance(required, (bool, cdata.UserFeatureOption)), 'for mypy'
154
+ if isinstance(required, cdata.UserFeatureOption):
155
+ required = required.is_enabled()
156
+ if 'native' in kwargs:
157
+ native = kwargs.get('native', False)
158
+ self._add_languages(args, required, MachineChoice.BUILD if native else MachineChoice.HOST)
159
+ else:
160
+ for for_machine in [MachineChoice.BUILD, MachineChoice.HOST]:
161
+ self._add_languages(args, required, for_machine)
162
+
163
+ def _add_languages(self, raw_langs: T.List[TYPE_var], required: bool, for_machine: MachineChoice) -> None:
164
+ langs: T.List[str] = []
165
+ for l in self.flatten_args(raw_langs):
166
+ if isinstance(l, str):
167
+ langs.append(l)
168
+ elif isinstance(l, BaseStringNode):
169
+ langs.append(l.value)
170
+
171
+ for lang in sorted(langs, key=compilers.sort_clink):
172
+ lang = lang.lower()
173
+ if lang not in self.coredata.compilers[for_machine]:
174
+ try:
175
+ comp = detect_compiler_for(self.environment, lang, for_machine, True, self.subproject)
176
+ except mesonlib.MesonException:
177
+ # do we even care about introspecting this language?
178
+ if required:
179
+ raise
180
+ else:
181
+ continue
182
+ if self.subproject:
183
+ options = {}
184
+ for k in comp.get_options():
185
+ v = copy.copy(self.coredata.options[k])
186
+ k = k.evolve(subproject=self.subproject)
187
+ options[k] = v
188
+ self.coredata.add_compiler_options(options, lang, for_machine, self.environment, self.subproject)
189
+
190
+ def func_dependency(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> None:
191
+ args = self.flatten_args(args)
192
+ kwargs = self.flatten_kwargs(kwargs)
193
+ if not args:
194
+ return
195
+ name = args[0]
196
+ has_fallback = 'fallback' in kwargs
197
+ required = kwargs.get('required', True)
198
+ version = kwargs.get('version', [])
199
+ if not isinstance(version, list):
200
+ version = [version]
201
+ if isinstance(required, ElementaryNode):
202
+ required = required.value
203
+ if not isinstance(required, bool):
204
+ required = False
205
+ self.dependencies += [{
206
+ 'name': name,
207
+ 'required': required,
208
+ 'version': version,
209
+ 'has_fallback': has_fallback,
210
+ 'conditional': node.condition_level > 0,
211
+ 'node': node
212
+ }]
213
+
214
+ def build_target(self, node: BaseNode, args: T.List[TYPE_var], kwargs_raw: T.Dict[str, TYPE_var], targetclass: T.Type[BuildTarget]) -> T.Optional[T.Dict[str, T.Any]]:
215
+ args = self.flatten_args(args)
216
+ if not args or not isinstance(args[0], str):
217
+ return None
218
+ name = args[0]
219
+ srcqueue = [node]
220
+ extra_queue = []
221
+
222
+ # Process the sources BEFORE flattening the kwargs, to preserve the original nodes
223
+ if 'sources' in kwargs_raw:
224
+ srcqueue += mesonlib.listify(kwargs_raw['sources'])
225
+
226
+ if 'extra_files' in kwargs_raw:
227
+ extra_queue += mesonlib.listify(kwargs_raw['extra_files'])
228
+
229
+ kwargs = self.flatten_kwargs(kwargs_raw, True)
230
+
231
+ def traverse_nodes(inqueue: T.List[BaseNode]) -> T.List[BaseNode]:
232
+ res: T.List[BaseNode] = []
233
+ while inqueue:
234
+ curr = inqueue.pop(0)
235
+ arg_node = None
236
+ assert isinstance(curr, BaseNode)
237
+ if isinstance(curr, FunctionNode):
238
+ arg_node = curr.args
239
+ elif isinstance(curr, ArrayNode):
240
+ arg_node = curr.args
241
+ elif isinstance(curr, IdNode):
242
+ # Try to resolve the ID and append the node to the queue
243
+ assert isinstance(curr.value, str)
244
+ var_name = curr.value
245
+ if var_name in self.assignments:
246
+ tmp_node = self.assignments[var_name]
247
+ if isinstance(tmp_node, (ArrayNode, IdNode, FunctionNode)):
248
+ inqueue += [tmp_node]
249
+ elif isinstance(curr, ArithmeticNode):
250
+ inqueue += [curr.left, curr.right]
251
+ if arg_node is None:
252
+ continue
253
+ arg_nodes = arg_node.arguments.copy()
254
+ # Pop the first element if the function is a build target function
255
+ if isinstance(curr, FunctionNode) and curr.func_name.value in BUILD_TARGET_FUNCTIONS:
256
+ arg_nodes.pop(0)
257
+ elementary_nodes = [x for x in arg_nodes if isinstance(x, (str, BaseStringNode))]
258
+ inqueue += [x for x in arg_nodes if isinstance(x, (FunctionNode, ArrayNode, IdNode, ArithmeticNode))]
259
+ if elementary_nodes:
260
+ res += [curr]
261
+ return res
262
+
263
+ source_nodes = traverse_nodes(srcqueue)
264
+ extraf_nodes = traverse_nodes(extra_queue)
265
+
266
+ # Make sure nothing can crash when creating the build class
267
+ kwargs_reduced = {k: v for k, v in kwargs.items() if k in targetclass.known_kwargs and k in {'install', 'build_by_default', 'build_always'}}
268
+ kwargs_reduced = {k: v.value if isinstance(v, ElementaryNode) else v for k, v in kwargs_reduced.items()}
269
+ kwargs_reduced = {k: v for k, v in kwargs_reduced.items() if not isinstance(v, BaseNode)}
270
+ for_machine = MachineChoice.HOST
271
+ objects: T.List[T.Any] = []
272
+ empty_sources: T.List[T.Any] = []
273
+ # Passing the unresolved sources list causes errors
274
+ kwargs_reduced['_allow_no_sources'] = True
275
+ target = targetclass(name, self.subdir, self.subproject, for_machine, empty_sources, None, objects,
276
+ self.environment, self.coredata.compilers[for_machine], self.coredata.is_build_only, kwargs_reduced)
277
+ target.process_compilers_late()
278
+
279
+ new_target = {
280
+ 'name': target.get_basename(),
281
+ 'id': target.get_id(),
282
+ 'type': target.get_typename(),
283
+ 'defined_in': os.path.normpath(os.path.join(self.source_root, self.subdir, environment.build_filename)),
284
+ 'subdir': self.subdir,
285
+ 'build_by_default': target.build_by_default,
286
+ 'installed': target.should_install(),
287
+ 'outputs': target.get_outputs(),
288
+ 'sources': source_nodes,
289
+ 'extra_files': extraf_nodes,
290
+ 'kwargs': kwargs,
291
+ 'node': node,
292
+ }
293
+
294
+ self.targets += [new_target]
295
+ return new_target
296
+
297
+ def build_library(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
298
+ default_library = self.coredata.get_option(OptionKey('default_library'))
299
+ if default_library == 'shared':
300
+ return self.build_target(node, args, kwargs, SharedLibrary)
301
+ elif default_library == 'static':
302
+ return self.build_target(node, args, kwargs, StaticLibrary)
303
+ elif default_library == 'both':
304
+ return self.build_target(node, args, kwargs, SharedLibrary)
305
+ return None
306
+
307
+ def func_executable(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
308
+ return self.build_target(node, args, kwargs, Executable)
309
+
310
+ def func_static_lib(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
311
+ return self.build_target(node, args, kwargs, StaticLibrary)
312
+
313
+ def func_shared_lib(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
314
+ return self.build_target(node, args, kwargs, SharedLibrary)
315
+
316
+ def func_both_lib(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
317
+ return self.build_target(node, args, kwargs, SharedLibrary)
318
+
319
+ def func_shared_module(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
320
+ return self.build_target(node, args, kwargs, SharedModule)
321
+
322
+ def func_library(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
323
+ return self.build_library(node, args, kwargs)
324
+
325
+ def func_jar(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
326
+ return self.build_target(node, args, kwargs, Jar)
327
+
328
+ def func_build_target(self, node: BaseNode, args: T.List[TYPE_var], kwargs: T.Dict[str, TYPE_var]) -> T.Optional[T.Dict[str, T.Any]]:
329
+ if 'target_type' not in kwargs:
330
+ return None
331
+ target_type = kwargs.pop('target_type')
332
+ if isinstance(target_type, ElementaryNode):
333
+ target_type = target_type.value
334
+ if target_type == 'executable':
335
+ return self.build_target(node, args, kwargs, Executable)
336
+ elif target_type == 'shared_library':
337
+ return self.build_target(node, args, kwargs, SharedLibrary)
338
+ elif target_type == 'static_library':
339
+ return self.build_target(node, args, kwargs, StaticLibrary)
340
+ elif target_type == 'both_libraries':
341
+ return self.build_target(node, args, kwargs, SharedLibrary)
342
+ elif target_type == 'library':
343
+ return self.build_library(node, args, kwargs)
344
+ elif target_type == 'jar':
345
+ return self.build_target(node, args, kwargs, Jar)
346
+ return None
347
+
348
+ def is_subproject(self) -> bool:
349
+ return self.subproject != ''
350
+
351
+ def analyze(self) -> None:
352
+ self.load_root_meson_file()
353
+ self.sanity_check_ast()
354
+ self.parse_project()
355
+ self.run()
356
+
357
+ def extract_subproject_dir(self) -> T.Optional[str]:
358
+ '''Fast path to extract subproject_dir kwarg.
359
+ This is faster than self.parse_project() which also initialize options
360
+ and also calls parse_project() on every subproject.
361
+ '''
362
+ if not self.ast.lines:
363
+ return None
364
+ project = self.ast.lines[0]
365
+ # first line is always project()
366
+ if not isinstance(project, FunctionNode):
367
+ return None
368
+ for kw, val in project.args.kwargs.items():
369
+ assert isinstance(kw, IdNode), 'for mypy'
370
+ if kw.value == 'subproject_dir':
371
+ # mypy does not understand "and isinstance"
372
+ if isinstance(val, BaseStringNode):
373
+ return val.value
374
+ return None
@@ -0,0 +1,109 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2019 The Meson development team
3
+
4
+ # This class contains the basic functionality needed to run any interpreter
5
+ # or an interpreter-based tool
6
+ from __future__ import annotations
7
+
8
+ from .visitor import AstVisitor
9
+ import typing as T
10
+
11
+ if T.TYPE_CHECKING:
12
+ from .. import mparser
13
+
14
+ class AstIndentationGenerator(AstVisitor):
15
+ def __init__(self) -> None:
16
+ self.level = 0
17
+
18
+ def visit_default_func(self, node: mparser.BaseNode) -> None:
19
+ # Store the current level in the node
20
+ node.level = self.level
21
+
22
+ def visit_ArrayNode(self, node: mparser.ArrayNode) -> None:
23
+ self.visit_default_func(node)
24
+ self.level += 1
25
+ node.args.accept(self)
26
+ self.level -= 1
27
+
28
+ def visit_DictNode(self, node: mparser.DictNode) -> None:
29
+ self.visit_default_func(node)
30
+ self.level += 1
31
+ node.args.accept(self)
32
+ self.level -= 1
33
+
34
+ def visit_MethodNode(self, node: mparser.MethodNode) -> None:
35
+ self.visit_default_func(node)
36
+ node.source_object.accept(self)
37
+ self.level += 1
38
+ node.args.accept(self)
39
+ self.level -= 1
40
+
41
+ def visit_FunctionNode(self, node: mparser.FunctionNode) -> None:
42
+ self.visit_default_func(node)
43
+ self.level += 1
44
+ node.args.accept(self)
45
+ self.level -= 1
46
+
47
+ def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
48
+ self.visit_default_func(node)
49
+ self.level += 1
50
+ node.items.accept(self)
51
+ node.block.accept(self)
52
+ self.level -= 1
53
+
54
+ def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
55
+ self.visit_default_func(node)
56
+ for i in node.ifs:
57
+ i.accept(self)
58
+ if node.elseblock:
59
+ self.level += 1
60
+ node.elseblock.accept(self)
61
+ self.level -= 1
62
+
63
+ def visit_IfNode(self, node: mparser.IfNode) -> None:
64
+ self.visit_default_func(node)
65
+ self.level += 1
66
+ node.condition.accept(self)
67
+ node.block.accept(self)
68
+ self.level -= 1
69
+
70
+ class AstIDGenerator(AstVisitor):
71
+ def __init__(self) -> None:
72
+ self.counter: T.Dict[str, int] = {}
73
+
74
+ def visit_default_func(self, node: mparser.BaseNode) -> None:
75
+ name = type(node).__name__
76
+ if name not in self.counter:
77
+ self.counter[name] = 0
78
+ node.ast_id = name + '#' + str(self.counter[name])
79
+ self.counter[name] += 1
80
+
81
+ class AstConditionLevel(AstVisitor):
82
+ def __init__(self) -> None:
83
+ self.condition_level = 0
84
+
85
+ def visit_default_func(self, node: mparser.BaseNode) -> None:
86
+ node.condition_level = self.condition_level
87
+
88
+ def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
89
+ self.visit_default_func(node)
90
+ self.condition_level += 1
91
+ node.items.accept(self)
92
+ node.block.accept(self)
93
+ self.condition_level -= 1
94
+
95
+ def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
96
+ self.visit_default_func(node)
97
+ for i in node.ifs:
98
+ i.accept(self)
99
+ if node.elseblock:
100
+ self.condition_level += 1
101
+ node.elseblock.accept(self)
102
+ self.condition_level -= 1
103
+
104
+ def visit_IfNode(self, node: mparser.IfNode) -> None:
105
+ self.visit_default_func(node)
106
+ self.condition_level += 1
107
+ node.condition.accept(self)
108
+ node.block.accept(self)
109
+ self.condition_level -= 1