frida 16.2.0 → 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,620 @@
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 .. import mparser
9
+ from .visitor import AstVisitor
10
+
11
+ from itertools import zip_longest
12
+ import re
13
+ import typing as T
14
+
15
+ arithmic_map = {
16
+ 'add': '+',
17
+ 'sub': '-',
18
+ 'mod': '%',
19
+ 'mul': '*',
20
+ 'div': '/'
21
+ }
22
+
23
+ class AstPrinter(AstVisitor):
24
+ def __init__(self, indent: int = 2, arg_newline_cutoff: int = 5, update_ast_line_nos: bool = False):
25
+ self.result = ''
26
+ self.indent = indent
27
+ self.arg_newline_cutoff = arg_newline_cutoff
28
+ self.ci = ''
29
+ self.is_newline = True
30
+ self.last_level = 0
31
+ self.curr_line = 1 if update_ast_line_nos else None
32
+
33
+ def post_process(self) -> None:
34
+ self.result = re.sub(r'\s+\n', '\n', self.result)
35
+
36
+ def append(self, data: str, node: mparser.BaseNode) -> None:
37
+ self.last_level = node.level
38
+ if self.is_newline:
39
+ self.result += ' ' * (node.level * self.indent)
40
+ self.result += data
41
+ self.is_newline = False
42
+
43
+ def append_padded(self, data: str, node: mparser.BaseNode) -> None:
44
+ if self.result and self.result[-1] not in [' ', '\n']:
45
+ data = ' ' + data
46
+ self.append(data + ' ', node)
47
+
48
+ def newline(self) -> None:
49
+ self.result += '\n'
50
+ self.is_newline = True
51
+ if self.curr_line is not None:
52
+ self.curr_line += 1
53
+
54
+ def visit_BooleanNode(self, node: mparser.BooleanNode) -> None:
55
+ self.append('true' if node.value else 'false', node)
56
+ node.lineno = self.curr_line or node.lineno
57
+
58
+ def visit_IdNode(self, node: mparser.IdNode) -> None:
59
+ assert isinstance(node.value, str)
60
+ self.append(node.value, node)
61
+ node.lineno = self.curr_line or node.lineno
62
+
63
+ def visit_NumberNode(self, node: mparser.NumberNode) -> None:
64
+ self.append(str(node.value), node)
65
+ node.lineno = self.curr_line or node.lineno
66
+
67
+ def escape(self, val: str) -> str:
68
+ return val.translate(str.maketrans(T.cast(
69
+ 'T.Dict[str, T.Union[str, int]]',
70
+ {'\'': '\\\'', '\\': '\\\\'})))
71
+
72
+ def visit_StringNode(self, node: mparser.StringNode) -> None:
73
+ assert isinstance(node.value, str)
74
+ self.append("'" + self.escape(node.value) + "'", node)
75
+ node.lineno = self.curr_line or node.lineno
76
+
77
+ def visit_FormatStringNode(self, node: mparser.FormatStringNode) -> None:
78
+ assert isinstance(node.value, str)
79
+ self.append("f'" + self.escape(node.value) + "'", node)
80
+ node.lineno = self.curr_line or node.lineno
81
+
82
+ def visit_MultilineStringNode(self, node: mparser.MultilineFormatStringNode) -> None:
83
+ assert isinstance(node.value, str)
84
+ self.append("'''" + node.value + "'''", node)
85
+ node.lineno = self.curr_line or node.lineno
86
+
87
+ def visit_FormatMultilineStringNode(self, node: mparser.FormatStringNode) -> None:
88
+ assert isinstance(node.value, str)
89
+ self.append("f'''" + node.value + "'''", node)
90
+ node.lineno = self.curr_line or node.lineno
91
+
92
+ def visit_ContinueNode(self, node: mparser.ContinueNode) -> None:
93
+ self.append('continue', node)
94
+ node.lineno = self.curr_line or node.lineno
95
+
96
+ def visit_BreakNode(self, node: mparser.BreakNode) -> None:
97
+ self.append('break', node)
98
+ node.lineno = self.curr_line or node.lineno
99
+
100
+ def visit_ArrayNode(self, node: mparser.ArrayNode) -> None:
101
+ node.lineno = self.curr_line or node.lineno
102
+ self.append('[', node)
103
+ node.args.accept(self)
104
+ self.append(']', node)
105
+
106
+ def visit_DictNode(self, node: mparser.DictNode) -> None:
107
+ node.lineno = self.curr_line or node.lineno
108
+ self.append('{', node)
109
+ node.args.accept(self)
110
+ self.append('}', node)
111
+
112
+ def visit_OrNode(self, node: mparser.OrNode) -> None:
113
+ node.left.accept(self)
114
+ self.append_padded('or', node)
115
+ node.lineno = self.curr_line or node.lineno
116
+ node.right.accept(self)
117
+
118
+ def visit_AndNode(self, node: mparser.AndNode) -> None:
119
+ node.left.accept(self)
120
+ self.append_padded('and', node)
121
+ node.lineno = self.curr_line or node.lineno
122
+ node.right.accept(self)
123
+
124
+ def visit_ComparisonNode(self, node: mparser.ComparisonNode) -> None:
125
+ node.left.accept(self)
126
+ self.append_padded(node.ctype if node.ctype != 'notin' else 'not in', node)
127
+ node.lineno = self.curr_line or node.lineno
128
+ node.right.accept(self)
129
+
130
+ def visit_ArithmeticNode(self, node: mparser.ArithmeticNode) -> None:
131
+ node.left.accept(self)
132
+ self.append_padded(arithmic_map[node.operation], node)
133
+ node.lineno = self.curr_line or node.lineno
134
+ node.right.accept(self)
135
+
136
+ def visit_NotNode(self, node: mparser.NotNode) -> None:
137
+ node.lineno = self.curr_line or node.lineno
138
+ self.append_padded('not', node)
139
+ node.value.accept(self)
140
+
141
+ def visit_CodeBlockNode(self, node: mparser.CodeBlockNode) -> None:
142
+ node.lineno = self.curr_line or node.lineno
143
+ for i in node.lines:
144
+ i.accept(self)
145
+ self.newline()
146
+
147
+ def visit_IndexNode(self, node: mparser.IndexNode) -> None:
148
+ node.iobject.accept(self)
149
+ node.lineno = self.curr_line or node.lineno
150
+ self.append('[', node)
151
+ node.index.accept(self)
152
+ self.append(']', node)
153
+
154
+ def visit_MethodNode(self, node: mparser.MethodNode) -> None:
155
+ node.lineno = self.curr_line or node.lineno
156
+ node.source_object.accept(self)
157
+ self.append('.' + node.name.value + '(', node)
158
+ node.args.accept(self)
159
+ self.append(')', node)
160
+
161
+ def visit_FunctionNode(self, node: mparser.FunctionNode) -> None:
162
+ node.lineno = self.curr_line or node.lineno
163
+ self.append(node.func_name.value + '(', node)
164
+ node.args.accept(self)
165
+ self.append(')', node)
166
+
167
+ def visit_AssignmentNode(self, node: mparser.AssignmentNode) -> None:
168
+ node.lineno = self.curr_line or node.lineno
169
+ self.append(node.var_name.value + ' = ', node)
170
+ node.value.accept(self)
171
+
172
+ def visit_PlusAssignmentNode(self, node: mparser.PlusAssignmentNode) -> None:
173
+ node.lineno = self.curr_line or node.lineno
174
+ self.append(node.var_name.value + ' += ', node)
175
+ node.value.accept(self)
176
+
177
+ def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
178
+ node.lineno = self.curr_line or node.lineno
179
+ self.append_padded('foreach', node)
180
+ self.append_padded(', '.join(varname.value for varname in node.varnames), node)
181
+ self.append_padded(':', node)
182
+ node.items.accept(self)
183
+ self.newline()
184
+ node.block.accept(self)
185
+ self.append('endforeach', node)
186
+
187
+ def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
188
+ node.lineno = self.curr_line or node.lineno
189
+ prefix = ''
190
+ for i in node.ifs:
191
+ self.append_padded(prefix + 'if', node)
192
+ prefix = 'el'
193
+ i.accept(self)
194
+ if not isinstance(node.elseblock, mparser.EmptyNode):
195
+ self.append('else', node)
196
+ self.newline()
197
+ node.elseblock.accept(self)
198
+ self.append('endif', node)
199
+
200
+ def visit_UMinusNode(self, node: mparser.UMinusNode) -> None:
201
+ node.lineno = self.curr_line or node.lineno
202
+ self.append_padded('-', node)
203
+ node.value.accept(self)
204
+
205
+ def visit_IfNode(self, node: mparser.IfNode) -> None:
206
+ node.lineno = self.curr_line or node.lineno
207
+ node.condition.accept(self)
208
+ self.newline()
209
+ node.block.accept(self)
210
+
211
+ def visit_TernaryNode(self, node: mparser.TernaryNode) -> None:
212
+ node.lineno = self.curr_line or node.lineno
213
+ node.condition.accept(self)
214
+ self.append_padded('?', node)
215
+ node.trueblock.accept(self)
216
+ self.append_padded(':', node)
217
+ node.falseblock.accept(self)
218
+
219
+ def visit_ArgumentNode(self, node: mparser.ArgumentNode) -> None:
220
+ node.lineno = self.curr_line or node.lineno
221
+ break_args = (len(node.arguments) + len(node.kwargs)) > self.arg_newline_cutoff
222
+ for i in node.arguments + list(node.kwargs.values()):
223
+ if not isinstance(i, (mparser.ElementaryNode, mparser.IndexNode)):
224
+ break_args = True
225
+ if break_args:
226
+ self.newline()
227
+ for i in node.arguments:
228
+ i.accept(self)
229
+ self.append(', ', node)
230
+ if break_args:
231
+ self.newline()
232
+ for key, val in node.kwargs.items():
233
+ key.accept(self)
234
+ self.append_padded(':', node)
235
+ val.accept(self)
236
+ self.append(', ', node)
237
+ if break_args:
238
+ self.newline()
239
+ if break_args:
240
+ self.result = re.sub(r', \n$', '\n', self.result)
241
+ else:
242
+ self.result = re.sub(r', $', '', self.result)
243
+
244
+ class RawPrinter(AstVisitor):
245
+
246
+ def __init__(self) -> None:
247
+ self.result = ''
248
+
249
+ def visit_default_func(self, node: mparser.BaseNode) -> None:
250
+ # XXX: this seems like it could never actually be reached...
251
+ self.result += node.value # type: ignore[attr-defined]
252
+ if node.whitespaces:
253
+ node.whitespaces.accept(self)
254
+
255
+ def visit_unary_operator(self, node: mparser.UnaryOperatorNode) -> None:
256
+ node.operator.accept(self)
257
+ node.value.accept(self)
258
+ if node.whitespaces:
259
+ node.whitespaces.accept(self)
260
+
261
+ def visit_binary_operator(self, node: mparser.BinaryOperatorNode) -> None:
262
+ node.left.accept(self)
263
+ node.operator.accept(self)
264
+ node.right.accept(self)
265
+ if node.whitespaces:
266
+ node.whitespaces.accept(self)
267
+
268
+ def visit_BooleanNode(self, node: mparser.BooleanNode) -> None:
269
+ self.result += 'true' if node.value else 'false'
270
+ if node.whitespaces:
271
+ node.whitespaces.accept(self)
272
+
273
+ def visit_NumberNode(self, node: mparser.NumberNode) -> None:
274
+ self.result += node.raw_value
275
+ if node.whitespaces:
276
+ node.whitespaces.accept(self)
277
+
278
+ def visit_StringNode(self, node: mparser.StringNode) -> None:
279
+ self.result += f"'{node.raw_value}'"
280
+ if node.whitespaces:
281
+ node.whitespaces.accept(self)
282
+
283
+ def visit_MultilineStringNode(self, node: mparser.MultilineStringNode) -> None:
284
+ self.result += f"'''{node.value}'''"
285
+ if node.whitespaces:
286
+ node.whitespaces.accept(self)
287
+
288
+ def visit_FormatStringNode(self, node: mparser.FormatStringNode) -> None:
289
+ self.result += 'f'
290
+ self.visit_StringNode(node)
291
+
292
+ def visit_MultilineFormatStringNode(self, node: mparser.MultilineFormatStringNode) -> None:
293
+ self.result += 'f'
294
+ self.visit_MultilineStringNode(node)
295
+
296
+ def visit_ContinueNode(self, node: mparser.ContinueNode) -> None:
297
+ self.result += 'continue'
298
+ if node.whitespaces:
299
+ node.whitespaces.accept(self)
300
+
301
+ def visit_BreakNode(self, node: mparser.BreakNode) -> None:
302
+ self.result += 'break'
303
+ if node.whitespaces:
304
+ node.whitespaces.accept(self)
305
+
306
+ def visit_ArrayNode(self, node: mparser.ArrayNode) -> None:
307
+ node.lbracket.accept(self)
308
+ node.args.accept(self)
309
+ node.rbracket.accept(self)
310
+ if node.whitespaces:
311
+ node.whitespaces.accept(self)
312
+
313
+ def visit_DictNode(self, node: mparser.DictNode) -> None:
314
+ node.lcurl.accept(self)
315
+ node.args.accept(self)
316
+ node.rcurl.accept(self)
317
+ if node.whitespaces:
318
+ node.whitespaces.accept(self)
319
+
320
+ def visit_ParenthesizedNode(self, node: mparser.ParenthesizedNode) -> None:
321
+ node.lpar.accept(self)
322
+ node.inner.accept(self)
323
+ node.rpar.accept(self)
324
+ if node.whitespaces:
325
+ node.whitespaces.accept(self)
326
+
327
+ def visit_OrNode(self, node: mparser.OrNode) -> None:
328
+ self.visit_binary_operator(node)
329
+
330
+ def visit_AndNode(self, node: mparser.AndNode) -> None:
331
+ self.visit_binary_operator(node)
332
+
333
+ def visit_ComparisonNode(self, node: mparser.ComparisonNode) -> None:
334
+ self.visit_binary_operator(node)
335
+
336
+ def visit_ArithmeticNode(self, node: mparser.ArithmeticNode) -> None:
337
+ self.visit_binary_operator(node)
338
+
339
+ def visit_NotNode(self, node: mparser.NotNode) -> None:
340
+ self.visit_unary_operator(node)
341
+
342
+ def visit_CodeBlockNode(self, node: mparser.CodeBlockNode) -> None:
343
+ if node.pre_whitespaces:
344
+ node.pre_whitespaces.accept(self)
345
+ for i in node.lines:
346
+ i.accept(self)
347
+ if node.whitespaces:
348
+ node.whitespaces.accept(self)
349
+
350
+ def visit_IndexNode(self, node: mparser.IndexNode) -> None:
351
+ node.iobject.accept(self)
352
+ node.lbracket.accept(self)
353
+ node.index.accept(self)
354
+ node.rbracket.accept(self)
355
+ if node.whitespaces:
356
+ node.whitespaces.accept(self)
357
+
358
+ def visit_MethodNode(self, node: mparser.MethodNode) -> None:
359
+ node.source_object.accept(self)
360
+ node.dot.accept(self)
361
+ node.name.accept(self)
362
+ node.lpar.accept(self)
363
+ node.args.accept(self)
364
+ node.rpar.accept(self)
365
+ if node.whitespaces:
366
+ node.whitespaces.accept(self)
367
+
368
+ def visit_FunctionNode(self, node: mparser.FunctionNode) -> None:
369
+ node.func_name.accept(self)
370
+ node.lpar.accept(self)
371
+ node.args.accept(self)
372
+ node.rpar.accept(self)
373
+ if node.whitespaces:
374
+ node.whitespaces.accept(self)
375
+
376
+ def visit_AssignmentNode(self, node: mparser.AssignmentNode) -> None:
377
+ node.var_name.accept(self)
378
+ node.operator.accept(self)
379
+ node.value.accept(self)
380
+ if node.whitespaces:
381
+ node.whitespaces.accept(self)
382
+
383
+ def visit_PlusAssignmentNode(self, node: mparser.PlusAssignmentNode) -> None:
384
+ node.var_name.accept(self)
385
+ node.operator.accept(self)
386
+ node.value.accept(self)
387
+ if node.whitespaces:
388
+ node.whitespaces.accept(self)
389
+
390
+ def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
391
+ node.foreach_.accept(self)
392
+ for varname, comma in zip_longest(node.varnames, node.commas):
393
+ varname.accept(self)
394
+ if comma is not None:
395
+ comma.accept(self)
396
+ node.column.accept(self)
397
+ node.items.accept(self)
398
+ node.block.accept(self)
399
+ node.endforeach.accept(self)
400
+ if node.whitespaces:
401
+ node.whitespaces.accept(self)
402
+
403
+ def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
404
+ for i in node.ifs:
405
+ i.accept(self)
406
+ if not isinstance(node.elseblock, mparser.EmptyNode):
407
+ node.elseblock.accept(self)
408
+ node.endif.accept(self)
409
+ if node.whitespaces:
410
+ node.whitespaces.accept(self)
411
+
412
+ def visit_UMinusNode(self, node: mparser.UMinusNode) -> None:
413
+ self.visit_unary_operator(node)
414
+
415
+ def visit_IfNode(self, node: mparser.IfNode) -> None:
416
+ node.if_.accept(self)
417
+ node.condition.accept(self)
418
+ node.block.accept(self)
419
+ if node.whitespaces:
420
+ node.whitespaces.accept(self)
421
+
422
+ def visit_ElseNode(self, node: mparser.ElseNode) -> None:
423
+ node.else_.accept(self)
424
+ node.block.accept(self)
425
+ if node.whitespaces:
426
+ node.whitespaces.accept(self)
427
+
428
+ def visit_TernaryNode(self, node: mparser.TernaryNode) -> None:
429
+ node.condition.accept(self)
430
+ node.questionmark.accept(self)
431
+ node.trueblock.accept(self)
432
+ node.column.accept(self)
433
+ node.falseblock.accept(self)
434
+ if node.whitespaces:
435
+ node.whitespaces.accept(self)
436
+
437
+ def visit_ArgumentNode(self, node: mparser.ArgumentNode) -> None:
438
+ commas_iter = iter(node.commas)
439
+
440
+ for arg in node.arguments:
441
+ arg.accept(self)
442
+ try:
443
+ comma = next(commas_iter)
444
+ comma.accept(self)
445
+ except StopIteration:
446
+ pass
447
+
448
+ assert len(node.columns) == len(node.kwargs)
449
+ for (key, val), column in zip(node.kwargs.items(), node.columns):
450
+ key.accept(self)
451
+ column.accept(self)
452
+ val.accept(self)
453
+ try:
454
+ comma = next(commas_iter)
455
+ comma.accept(self)
456
+ except StopIteration:
457
+ pass
458
+
459
+ if node.whitespaces:
460
+ node.whitespaces.accept(self)
461
+
462
+ class AstJSONPrinter(AstVisitor):
463
+ def __init__(self) -> None:
464
+ self.result: T.Dict[str, T.Any] = {}
465
+ self.current = self.result
466
+
467
+ def _accept(self, key: str, node: mparser.BaseNode) -> None:
468
+ old = self.current
469
+ data: T.Dict[str, T.Any] = {}
470
+ self.current = data
471
+ node.accept(self)
472
+ self.current = old
473
+ self.current[key] = data
474
+
475
+ def _accept_list(self, key: str, nodes: T.Sequence[mparser.BaseNode]) -> None:
476
+ old = self.current
477
+ datalist: T.List[T.Dict[str, T.Any]] = []
478
+ for i in nodes:
479
+ self.current = {}
480
+ i.accept(self)
481
+ datalist += [self.current]
482
+ self.current = old
483
+ self.current[key] = datalist
484
+
485
+ def _raw_accept(self, node: mparser.BaseNode, data: T.Dict[str, T.Any]) -> None:
486
+ old = self.current
487
+ self.current = data
488
+ node.accept(self)
489
+ self.current = old
490
+
491
+ def setbase(self, node: mparser.BaseNode) -> None:
492
+ self.current['node'] = type(node).__name__
493
+ self.current['lineno'] = node.lineno
494
+ self.current['colno'] = node.colno
495
+ self.current['end_lineno'] = node.end_lineno
496
+ self.current['end_colno'] = node.end_colno
497
+
498
+ def visit_default_func(self, node: mparser.BaseNode) -> None:
499
+ self.setbase(node)
500
+
501
+ def gen_ElementaryNode(self, node: mparser.ElementaryNode) -> None:
502
+ self.current['value'] = node.value
503
+ self.setbase(node)
504
+
505
+ def visit_BooleanNode(self, node: mparser.BooleanNode) -> None:
506
+ self.gen_ElementaryNode(node)
507
+
508
+ def visit_IdNode(self, node: mparser.IdNode) -> None:
509
+ self.gen_ElementaryNode(node)
510
+
511
+ def visit_NumberNode(self, node: mparser.NumberNode) -> None:
512
+ self.gen_ElementaryNode(node)
513
+
514
+ def visit_StringNode(self, node: mparser.StringNode) -> None:
515
+ self.gen_ElementaryNode(node)
516
+
517
+ def visit_FormatStringNode(self, node: mparser.FormatStringNode) -> None:
518
+ self.gen_ElementaryNode(node)
519
+
520
+ def visit_ArrayNode(self, node: mparser.ArrayNode) -> None:
521
+ self._accept('args', node.args)
522
+ self.setbase(node)
523
+
524
+ def visit_DictNode(self, node: mparser.DictNode) -> None:
525
+ self._accept('args', node.args)
526
+ self.setbase(node)
527
+
528
+ def visit_OrNode(self, node: mparser.OrNode) -> None:
529
+ self._accept('left', node.left)
530
+ self._accept('right', node.right)
531
+ self.setbase(node)
532
+
533
+ def visit_AndNode(self, node: mparser.AndNode) -> None:
534
+ self._accept('left', node.left)
535
+ self._accept('right', node.right)
536
+ self.setbase(node)
537
+
538
+ def visit_ComparisonNode(self, node: mparser.ComparisonNode) -> None:
539
+ self._accept('left', node.left)
540
+ self._accept('right', node.right)
541
+ self.current['ctype'] = node.ctype
542
+ self.setbase(node)
543
+
544
+ def visit_ArithmeticNode(self, node: mparser.ArithmeticNode) -> None:
545
+ self._accept('left', node.left)
546
+ self._accept('right', node.right)
547
+ self.current['op'] = arithmic_map[node.operation]
548
+ self.setbase(node)
549
+
550
+ def visit_NotNode(self, node: mparser.NotNode) -> None:
551
+ self._accept('right', node.value)
552
+ self.setbase(node)
553
+
554
+ def visit_CodeBlockNode(self, node: mparser.CodeBlockNode) -> None:
555
+ self._accept_list('lines', node.lines)
556
+ self.setbase(node)
557
+
558
+ def visit_IndexNode(self, node: mparser.IndexNode) -> None:
559
+ self._accept('object', node.iobject)
560
+ self._accept('index', node.index)
561
+ self.setbase(node)
562
+
563
+ def visit_MethodNode(self, node: mparser.MethodNode) -> None:
564
+ self._accept('object', node.source_object)
565
+ self._accept('args', node.args)
566
+ self.current['name'] = node.name.value
567
+ self.setbase(node)
568
+
569
+ def visit_FunctionNode(self, node: mparser.FunctionNode) -> None:
570
+ self._accept('args', node.args)
571
+ self.current['name'] = node.func_name.value
572
+ self.setbase(node)
573
+
574
+ def visit_AssignmentNode(self, node: mparser.AssignmentNode) -> None:
575
+ self._accept('value', node.value)
576
+ self.current['var_name'] = node.var_name.value
577
+ self.setbase(node)
578
+
579
+ def visit_PlusAssignmentNode(self, node: mparser.PlusAssignmentNode) -> None:
580
+ self._accept('value', node.value)
581
+ self.current['var_name'] = node.var_name.value
582
+ self.setbase(node)
583
+
584
+ def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
585
+ self._accept('items', node.items)
586
+ self._accept('block', node.block)
587
+ self.current['varnames'] = [varname.value for varname in node.varnames]
588
+ self.setbase(node)
589
+
590
+ def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
591
+ self._accept_list('ifs', node.ifs)
592
+ self._accept('else', node.elseblock)
593
+ self.setbase(node)
594
+
595
+ def visit_UMinusNode(self, node: mparser.UMinusNode) -> None:
596
+ self._accept('right', node.value)
597
+ self.setbase(node)
598
+
599
+ def visit_IfNode(self, node: mparser.IfNode) -> None:
600
+ self._accept('condition', node.condition)
601
+ self._accept('block', node.block)
602
+ self.setbase(node)
603
+
604
+ def visit_TernaryNode(self, node: mparser.TernaryNode) -> None:
605
+ self._accept('condition', node.condition)
606
+ self._accept('true', node.trueblock)
607
+ self._accept('false', node.falseblock)
608
+ self.setbase(node)
609
+
610
+ def visit_ArgumentNode(self, node: mparser.ArgumentNode) -> None:
611
+ self._accept_list('positional', node.arguments)
612
+ kwargs_list: T.List[T.Dict[str, T.Dict[str, T.Any]]] = []
613
+ for key, val in node.kwargs.items():
614
+ key_res: T.Dict[str, T.Any] = {}
615
+ val_res: T.Dict[str, T.Any] = {}
616
+ self._raw_accept(key, key_res)
617
+ self._raw_accept(val, val_res)
618
+ kwargs_list += [{'key': key_res, 'val': val_res}]
619
+ self.current['kwargs'] = kwargs_list
620
+ self.setbase(node)