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.
- package/BSDmakefile +6 -0
- package/Makefile +16 -0
- package/README.md +14 -11
- package/configure +18 -0
- package/configure.bat +22 -0
- package/dist/native.js +0 -8
- package/lib/application.ts +98 -0
- package/lib/authentication.ts +3 -0
- package/lib/build.py +50 -0
- package/lib/bus.ts +30 -0
- package/lib/cancellable.ts +33 -0
- package/lib/child.ts +15 -0
- package/lib/crash.ts +11 -0
- package/lib/device.ts +329 -0
- package/lib/device_manager.ts +69 -0
- package/lib/endpoint_parameters.ts +56 -0
- package/lib/icon.ts +15 -0
- package/lib/index.ts +311 -0
- package/lib/iostream.ts +78 -0
- package/lib/meson.build +53 -0
- package/lib/native.ts +9 -0
- package/lib/portal_membership.ts +10 -0
- package/lib/portal_service.ts +105 -0
- package/lib/process.ts +57 -0
- package/lib/relay.ts +44 -0
- package/lib/script.ts +352 -0
- package/lib/session.ts +113 -0
- package/lib/signals.ts +45 -0
- package/lib/socket_address.ts +35 -0
- package/lib/spawn.ts +4 -0
- package/lib/system_parameters.ts +78 -0
- package/make.bat +23 -0
- package/meson.build +160 -0
- package/meson.options +11 -0
- package/package.json +27 -6
- package/releng/deps.py +1133 -0
- package/releng/deps.toml +391 -0
- package/releng/devkit-assets/frida-core-example-unix.c +188 -0
- package/releng/devkit-assets/frida-core-example-windows.c +197 -0
- package/releng/devkit-assets/frida-core-example.sln +28 -0
- package/releng/devkit-assets/frida-core-example.vcxproj +157 -0
- package/releng/devkit-assets/frida-core-example.vcxproj.filters +27 -0
- package/releng/devkit-assets/frida-gum-example-unix.c +122 -0
- package/releng/devkit-assets/frida-gum-example-windows.c +132 -0
- package/releng/devkit-assets/frida-gum-example.sln +28 -0
- package/releng/devkit-assets/frida-gum-example.vcxproj +157 -0
- package/releng/devkit-assets/frida-gum-example.vcxproj.filters +27 -0
- package/releng/devkit-assets/frida-gumjs-example-unix.c +84 -0
- package/releng/devkit-assets/frida-gumjs-example-windows.c +91 -0
- package/releng/devkit-assets/frida-gumjs-example.sln +28 -0
- package/releng/devkit-assets/frida-gumjs-example.vcxproj +157 -0
- package/releng/devkit-assets/frida-gumjs-example.vcxproj.filters +27 -0
- package/releng/devkit.py +535 -0
- package/releng/env.py +420 -0
- package/releng/env_android.py +150 -0
- package/releng/env_apple.py +176 -0
- package/releng/env_generic.py +373 -0
- package/releng/frida_version.py +69 -0
- package/releng/machine_file.py +44 -0
- package/releng/machine_spec.py +290 -0
- package/releng/meson/meson.py +27 -0
- package/releng/meson/mesonbuild/__init__.py +0 -0
- package/releng/meson/mesonbuild/_pathlib.py +63 -0
- package/releng/meson/mesonbuild/_typing.py +69 -0
- package/releng/meson/mesonbuild/arglist.py +321 -0
- package/releng/meson/mesonbuild/ast/__init__.py +23 -0
- package/releng/meson/mesonbuild/ast/interpreter.py +441 -0
- package/releng/meson/mesonbuild/ast/introspection.py +374 -0
- package/releng/meson/mesonbuild/ast/postprocess.py +109 -0
- package/releng/meson/mesonbuild/ast/printer.py +620 -0
- package/releng/meson/mesonbuild/ast/visitor.py +161 -0
- package/releng/meson/mesonbuild/backend/__init__.py +0 -0
- package/releng/meson/mesonbuild/backend/backends.py +2047 -0
- package/releng/meson/mesonbuild/backend/ninjabackend.py +3808 -0
- package/releng/meson/mesonbuild/backend/nonebackend.py +26 -0
- package/releng/meson/mesonbuild/backend/vs2010backend.py +2078 -0
- package/releng/meson/mesonbuild/backend/vs2012backend.py +35 -0
- package/releng/meson/mesonbuild/backend/vs2013backend.py +34 -0
- package/releng/meson/mesonbuild/backend/vs2015backend.py +35 -0
- package/releng/meson/mesonbuild/backend/vs2017backend.py +59 -0
- package/releng/meson/mesonbuild/backend/vs2019backend.py +54 -0
- package/releng/meson/mesonbuild/backend/vs2022backend.py +54 -0
- package/releng/meson/mesonbuild/backend/xcodebackend.py +1781 -0
- package/releng/meson/mesonbuild/build.py +3249 -0
- package/releng/meson/mesonbuild/cargo/__init__.py +5 -0
- package/releng/meson/mesonbuild/cargo/builder.py +238 -0
- package/releng/meson/mesonbuild/cargo/cfg.py +274 -0
- package/releng/meson/mesonbuild/cargo/interpreter.py +733 -0
- package/releng/meson/mesonbuild/cargo/manifest.py +227 -0
- package/releng/meson/mesonbuild/cargo/version.py +95 -0
- package/releng/meson/mesonbuild/cmake/__init__.py +28 -0
- package/releng/meson/mesonbuild/cmake/common.py +331 -0
- package/releng/meson/mesonbuild/cmake/data/__init__.py +0 -0
- package/releng/meson/mesonbuild/cmake/data/preload.cmake +82 -0
- package/releng/meson/mesonbuild/cmake/executor.py +241 -0
- package/releng/meson/mesonbuild/cmake/fileapi.py +324 -0
- package/releng/meson/mesonbuild/cmake/generator.py +186 -0
- package/releng/meson/mesonbuild/cmake/interpreter.py +1267 -0
- package/releng/meson/mesonbuild/cmake/toolchain.py +248 -0
- package/releng/meson/mesonbuild/cmake/traceparser.py +814 -0
- package/releng/meson/mesonbuild/cmake/tracetargets.py +161 -0
- package/releng/meson/mesonbuild/compilers/__init__.py +86 -0
- package/releng/meson/mesonbuild/compilers/asm.py +307 -0
- package/releng/meson/mesonbuild/compilers/c.py +788 -0
- package/releng/meson/mesonbuild/compilers/c_function_attributes.py +143 -0
- package/releng/meson/mesonbuild/compilers/compilers.py +1388 -0
- package/releng/meson/mesonbuild/compilers/cpp.py +1035 -0
- package/releng/meson/mesonbuild/compilers/cs.py +136 -0
- package/releng/meson/mesonbuild/compilers/cuda.py +806 -0
- package/releng/meson/mesonbuild/compilers/cython.py +91 -0
- package/releng/meson/mesonbuild/compilers/d.py +861 -0
- package/releng/meson/mesonbuild/compilers/detect.py +1396 -0
- package/releng/meson/mesonbuild/compilers/fortran.py +523 -0
- package/releng/meson/mesonbuild/compilers/java.py +113 -0
- package/releng/meson/mesonbuild/compilers/mixins/__init__.py +0 -0
- package/releng/meson/mesonbuild/compilers/mixins/arm.py +167 -0
- package/releng/meson/mesonbuild/compilers/mixins/ccrx.py +113 -0
- package/releng/meson/mesonbuild/compilers/mixins/clang.py +170 -0
- package/releng/meson/mesonbuild/compilers/mixins/clike.py +1330 -0
- package/releng/meson/mesonbuild/compilers/mixins/compcert.py +117 -0
- package/releng/meson/mesonbuild/compilers/mixins/elbrus.py +93 -0
- package/releng/meson/mesonbuild/compilers/mixins/emscripten.py +89 -0
- package/releng/meson/mesonbuild/compilers/mixins/gnu.py +629 -0
- package/releng/meson/mesonbuild/compilers/mixins/intel.py +167 -0
- package/releng/meson/mesonbuild/compilers/mixins/islinker.py +120 -0
- package/releng/meson/mesonbuild/compilers/mixins/metrowerks.py +279 -0
- package/releng/meson/mesonbuild/compilers/mixins/pgi.py +88 -0
- package/releng/meson/mesonbuild/compilers/mixins/ti.py +130 -0
- package/releng/meson/mesonbuild/compilers/mixins/visualstudio.py +458 -0
- package/releng/meson/mesonbuild/compilers/mixins/xc16.py +111 -0
- package/releng/meson/mesonbuild/compilers/objc.py +120 -0
- package/releng/meson/mesonbuild/compilers/objcpp.py +102 -0
- package/releng/meson/mesonbuild/compilers/rust.py +230 -0
- package/releng/meson/mesonbuild/compilers/swift.py +131 -0
- package/releng/meson/mesonbuild/compilers/vala.py +121 -0
- package/releng/meson/mesonbuild/coredata.py +1532 -0
- package/releng/meson/mesonbuild/dependencies/__init__.py +252 -0
- package/releng/meson/mesonbuild/dependencies/base.py +663 -0
- package/releng/meson/mesonbuild/dependencies/boost.py +1083 -0
- package/releng/meson/mesonbuild/dependencies/cmake.py +656 -0
- package/releng/meson/mesonbuild/dependencies/coarrays.py +80 -0
- package/releng/meson/mesonbuild/dependencies/configtool.py +163 -0
- package/releng/meson/mesonbuild/dependencies/cuda.py +295 -0
- package/releng/meson/mesonbuild/dependencies/data/CMakeLists.txt +102 -0
- package/releng/meson/mesonbuild/dependencies/data/CMakeListsLLVM.txt +204 -0
- package/releng/meson/mesonbuild/dependencies/data/CMakePathInfo.txt +31 -0
- package/releng/meson/mesonbuild/dependencies/data/__init__.py +0 -0
- package/releng/meson/mesonbuild/dependencies/detect.py +225 -0
- package/releng/meson/mesonbuild/dependencies/dev.py +707 -0
- package/releng/meson/mesonbuild/dependencies/dub.py +424 -0
- package/releng/meson/mesonbuild/dependencies/factory.py +146 -0
- package/releng/meson/mesonbuild/dependencies/framework.py +111 -0
- package/releng/meson/mesonbuild/dependencies/hdf5.py +168 -0
- package/releng/meson/mesonbuild/dependencies/misc.py +618 -0
- package/releng/meson/mesonbuild/dependencies/mpi.py +231 -0
- package/releng/meson/mesonbuild/dependencies/pkgconfig.py +570 -0
- package/releng/meson/mesonbuild/dependencies/platform.py +52 -0
- package/releng/meson/mesonbuild/dependencies/python.py +431 -0
- package/releng/meson/mesonbuild/dependencies/qt.py +484 -0
- package/releng/meson/mesonbuild/dependencies/scalapack.py +142 -0
- package/releng/meson/mesonbuild/dependencies/ui.py +281 -0
- package/releng/meson/mesonbuild/depfile.py +82 -0
- package/releng/meson/mesonbuild/envconfig.py +480 -0
- package/releng/meson/mesonbuild/environment.py +987 -0
- package/releng/meson/mesonbuild/interpreter/__init__.py +47 -0
- package/releng/meson/mesonbuild/interpreter/compiler.py +900 -0
- package/releng/meson/mesonbuild/interpreter/dependencyfallbacks.py +386 -0
- package/releng/meson/mesonbuild/interpreter/interpreter.py +3595 -0
- package/releng/meson/mesonbuild/interpreter/interpreterobjects.py +1096 -0
- package/releng/meson/mesonbuild/interpreter/kwargs.py +479 -0
- package/releng/meson/mesonbuild/interpreter/mesonmain.py +487 -0
- package/releng/meson/mesonbuild/interpreter/primitives/__init__.py +29 -0
- package/releng/meson/mesonbuild/interpreter/primitives/array.py +108 -0
- package/releng/meson/mesonbuild/interpreter/primitives/boolean.py +52 -0
- package/releng/meson/mesonbuild/interpreter/primitives/dict.py +88 -0
- package/releng/meson/mesonbuild/interpreter/primitives/integer.py +86 -0
- package/releng/meson/mesonbuild/interpreter/primitives/range.py +38 -0
- package/releng/meson/mesonbuild/interpreter/primitives/string.py +247 -0
- package/releng/meson/mesonbuild/interpreter/type_checking.py +853 -0
- package/releng/meson/mesonbuild/interpreterbase/__init__.py +126 -0
- package/releng/meson/mesonbuild/interpreterbase/_unholder.py +25 -0
- package/releng/meson/mesonbuild/interpreterbase/baseobjects.py +174 -0
- package/releng/meson/mesonbuild/interpreterbase/decorators.py +806 -0
- package/releng/meson/mesonbuild/interpreterbase/disabler.py +35 -0
- package/releng/meson/mesonbuild/interpreterbase/exceptions.py +22 -0
- package/releng/meson/mesonbuild/interpreterbase/helpers.py +67 -0
- package/releng/meson/mesonbuild/interpreterbase/interpreterbase.py +665 -0
- package/releng/meson/mesonbuild/interpreterbase/operator.py +32 -0
- package/releng/meson/mesonbuild/linkers/__init__.py +20 -0
- package/releng/meson/mesonbuild/linkers/base.py +39 -0
- package/releng/meson/mesonbuild/linkers/detect.py +229 -0
- package/releng/meson/mesonbuild/linkers/linkers.py +1614 -0
- package/releng/meson/mesonbuild/mcompile.py +380 -0
- package/releng/meson/mesonbuild/mconf.py +368 -0
- package/releng/meson/mesonbuild/mdevenv.py +234 -0
- package/releng/meson/mesonbuild/mdist.py +376 -0
- package/releng/meson/mesonbuild/mesondata.py +38 -0
- package/releng/meson/mesonbuild/mesonlib.py +23 -0
- package/releng/meson/mesonbuild/mesonmain.py +289 -0
- package/releng/meson/mesonbuild/minit.py +204 -0
- package/releng/meson/mesonbuild/minstall.py +864 -0
- package/releng/meson/mesonbuild/mintro.py +667 -0
- package/releng/meson/mesonbuild/mlog.py +542 -0
- package/releng/meson/mesonbuild/modules/__init__.py +270 -0
- package/releng/meson/mesonbuild/modules/cmake.py +442 -0
- package/releng/meson/mesonbuild/modules/cuda.py +377 -0
- package/releng/meson/mesonbuild/modules/dlang.py +117 -0
- package/releng/meson/mesonbuild/modules/external_project.py +306 -0
- package/releng/meson/mesonbuild/modules/fs.py +323 -0
- package/releng/meson/mesonbuild/modules/gnome.py +2215 -0
- package/releng/meson/mesonbuild/modules/hotdoc.py +487 -0
- package/releng/meson/mesonbuild/modules/i18n.py +405 -0
- package/releng/meson/mesonbuild/modules/icestorm.py +123 -0
- package/releng/meson/mesonbuild/modules/java.py +112 -0
- package/releng/meson/mesonbuild/modules/keyval.py +65 -0
- package/releng/meson/mesonbuild/modules/modtest.py +33 -0
- package/releng/meson/mesonbuild/modules/pkgconfig.py +744 -0
- package/releng/meson/mesonbuild/modules/python.py +556 -0
- package/releng/meson/mesonbuild/modules/python3.py +85 -0
- package/releng/meson/mesonbuild/modules/qt.py +621 -0
- package/releng/meson/mesonbuild/modules/qt4.py +23 -0
- package/releng/meson/mesonbuild/modules/qt5.py +23 -0
- package/releng/meson/mesonbuild/modules/qt6.py +22 -0
- package/releng/meson/mesonbuild/modules/rust.py +355 -0
- package/releng/meson/mesonbuild/modules/simd.py +114 -0
- package/releng/meson/mesonbuild/modules/sourceset.py +291 -0
- package/releng/meson/mesonbuild/modules/wayland.py +151 -0
- package/releng/meson/mesonbuild/modules/windows.py +207 -0
- package/releng/meson/mesonbuild/mparser.py +1114 -0
- package/releng/meson/mesonbuild/msetup.py +365 -0
- package/releng/meson/mesonbuild/msubprojects.py +764 -0
- package/releng/meson/mesonbuild/mtest.py +2201 -0
- package/releng/meson/mesonbuild/munstable_coredata.py +107 -0
- package/releng/meson/mesonbuild/optinterpreter.py +276 -0
- package/releng/meson/mesonbuild/programs.py +367 -0
- package/releng/meson/mesonbuild/rewriter.py +1075 -0
- package/releng/meson/mesonbuild/scripts/__init__.py +10 -0
- package/releng/meson/mesonbuild/scripts/clangformat.py +55 -0
- package/releng/meson/mesonbuild/scripts/clangtidy.py +30 -0
- package/releng/meson/mesonbuild/scripts/cleantrees.py +35 -0
- package/releng/meson/mesonbuild/scripts/cmake_run_ctgt.py +103 -0
- package/releng/meson/mesonbuild/scripts/cmd_or_ps.ps1 +17 -0
- package/releng/meson/mesonbuild/scripts/copy.py +19 -0
- package/releng/meson/mesonbuild/scripts/coverage.py +214 -0
- package/releng/meson/mesonbuild/scripts/delwithsuffix.py +27 -0
- package/releng/meson/mesonbuild/scripts/depfixer.py +495 -0
- package/releng/meson/mesonbuild/scripts/depscan.py +198 -0
- package/releng/meson/mesonbuild/scripts/dirchanger.py +20 -0
- package/releng/meson/mesonbuild/scripts/env2mfile.py +402 -0
- package/releng/meson/mesonbuild/scripts/externalproject.py +106 -0
- package/releng/meson/mesonbuild/scripts/gettext.py +86 -0
- package/releng/meson/mesonbuild/scripts/gtkdochelper.py +286 -0
- package/releng/meson/mesonbuild/scripts/hotdochelper.py +40 -0
- package/releng/meson/mesonbuild/scripts/itstool.py +77 -0
- package/releng/meson/mesonbuild/scripts/meson_exe.py +115 -0
- package/releng/meson/mesonbuild/scripts/msgfmthelper.py +29 -0
- package/releng/meson/mesonbuild/scripts/pycompile.py +54 -0
- package/releng/meson/mesonbuild/scripts/python_info.py +121 -0
- package/releng/meson/mesonbuild/scripts/regen_checker.py +55 -0
- package/releng/meson/mesonbuild/scripts/run_tool.py +58 -0
- package/releng/meson/mesonbuild/scripts/scanbuild.py +57 -0
- package/releng/meson/mesonbuild/scripts/symbolextractor.py +322 -0
- package/releng/meson/mesonbuild/scripts/tags.py +44 -0
- package/releng/meson/mesonbuild/scripts/test_loaded_modules.py +14 -0
- package/releng/meson/mesonbuild/scripts/uninstall.py +41 -0
- package/releng/meson/mesonbuild/scripts/vcstagger.py +35 -0
- package/releng/meson/mesonbuild/scripts/yasm.py +24 -0
- package/releng/meson/mesonbuild/templates/__init__.py +0 -0
- package/releng/meson/mesonbuild/templates/cpptemplates.py +143 -0
- package/releng/meson/mesonbuild/templates/cstemplates.py +90 -0
- package/releng/meson/mesonbuild/templates/ctemplates.py +126 -0
- package/releng/meson/mesonbuild/templates/cudatemplates.py +143 -0
- package/releng/meson/mesonbuild/templates/dlangtemplates.py +109 -0
- package/releng/meson/mesonbuild/templates/fortrantemplates.py +101 -0
- package/releng/meson/mesonbuild/templates/javatemplates.py +94 -0
- package/releng/meson/mesonbuild/templates/mesontemplates.py +70 -0
- package/releng/meson/mesonbuild/templates/objcpptemplates.py +126 -0
- package/releng/meson/mesonbuild/templates/objctemplates.py +126 -0
- package/releng/meson/mesonbuild/templates/rusttemplates.py +79 -0
- package/releng/meson/mesonbuild/templates/samplefactory.py +41 -0
- package/releng/meson/mesonbuild/templates/sampleimpl.py +160 -0
- package/releng/meson/mesonbuild/templates/valatemplates.py +82 -0
- package/releng/meson/mesonbuild/utils/__init__.py +0 -0
- package/releng/meson/mesonbuild/utils/core.py +166 -0
- package/releng/meson/mesonbuild/utils/platform.py +27 -0
- package/releng/meson/mesonbuild/utils/posix.py +32 -0
- package/releng/meson/mesonbuild/utils/universal.py +2445 -0
- package/releng/meson/mesonbuild/utils/vsenv.py +126 -0
- package/releng/meson/mesonbuild/utils/win32.py +29 -0
- package/releng/meson/mesonbuild/wrap/__init__.py +59 -0
- package/releng/meson/mesonbuild/wrap/wrap.py +846 -0
- package/releng/meson/mesonbuild/wrap/wraptool.py +198 -0
- package/releng/meson-scripts/BSDmakefile +6 -0
- package/releng/meson-scripts/Makefile +16 -0
- package/releng/meson-scripts/configure +18 -0
- package/releng/meson-scripts/configure.bat +22 -0
- package/releng/meson-scripts/make.bat +23 -0
- package/releng/meson_configure.py +506 -0
- package/releng/meson_make.py +131 -0
- package/releng/mkdevkit.py +107 -0
- package/releng/mkfatmacho.py +54 -0
- package/releng/post-process-oabi.py +97 -0
- package/releng/progress.py +14 -0
- package/releng/sync-from-upstream.py +185 -0
- package/releng/tomlkit/tomlkit/__init__.py +59 -0
- package/releng/tomlkit/tomlkit/_compat.py +22 -0
- package/releng/tomlkit/tomlkit/_types.py +83 -0
- package/releng/tomlkit/tomlkit/_utils.py +158 -0
- package/releng/tomlkit/tomlkit/api.py +308 -0
- package/releng/tomlkit/tomlkit/container.py +875 -0
- package/releng/tomlkit/tomlkit/exceptions.py +227 -0
- package/releng/tomlkit/tomlkit/items.py +1967 -0
- package/releng/tomlkit/tomlkit/parser.py +1141 -0
- package/releng/tomlkit/tomlkit/py.typed +0 -0
- package/releng/tomlkit/tomlkit/source.py +180 -0
- package/releng/tomlkit/tomlkit/toml_char.py +52 -0
- package/releng/tomlkit/tomlkit/toml_document.py +7 -0
- package/releng/tomlkit/tomlkit/toml_file.py +58 -0
- package/releng/winenv.py +140 -0
- package/scripts/adjust-version.py +19 -0
- package/scripts/detect-version.py +40 -0
- package/scripts/fetch-abi-bits.py +343 -0
- package/scripts/install.js +23 -0
- package/scripts/package.py +15 -0
- package/src/addon.cc +76 -0
- package/src/application.cc +148 -0
- package/src/application.h +31 -0
- package/src/authentication.cc +174 -0
- package/src/authentication.h +24 -0
- package/src/bus.cc +167 -0
- package/src/bus.h +33 -0
- package/src/cancellable.cc +117 -0
- package/src/cancellable.h +31 -0
- package/src/child.cc +150 -0
- package/src/child.h +32 -0
- package/src/crash.cc +122 -0
- package/src/crash.h +30 -0
- package/src/device.cc +1302 -0
- package/src/device.h +55 -0
- package/src/device_manager.cc +362 -0
- package/src/device_manager.h +35 -0
- package/src/endpoint_parameters.cc +171 -0
- package/src/endpoint_parameters.h +28 -0
- package/src/glib_context.cc +62 -0
- package/src/glib_context.h +29 -0
- package/src/glib_object.cc +25 -0
- package/src/glib_object.h +37 -0
- package/src/iostream.cc +247 -0
- package/src/iostream.h +30 -0
- package/src/meson.build +26 -0
- package/src/operation.h +94 -0
- package/src/portal_membership.cc +100 -0
- package/src/portal_membership.h +26 -0
- package/src/portal_service.cc +401 -0
- package/src/portal_service.h +40 -0
- package/src/process.cc +135 -0
- package/src/process.h +30 -0
- package/src/relay.cc +139 -0
- package/src/relay.h +31 -0
- package/src/runtime.cc +443 -0
- package/src/runtime.h +64 -0
- package/src/script.cc +301 -0
- package/src/script.h +36 -0
- package/src/session.cc +860 -0
- package/src/session.h +42 -0
- package/src/signals.cc +334 -0
- package/src/signals.h +47 -0
- package/src/spawn.cc +95 -0
- package/src/spawn.h +27 -0
- package/src/usage_monitor.h +117 -0
- package/src/uv_context.cc +118 -0
- package/src/uv_context.h +40 -0
- package/src/win_delay_load_hook.cc +63 -0
- package/subprojects/frida-core.wrap +8 -0
- package/subprojects/nan.wrap +9 -0
- package/subprojects/packagefiles/nan.patch +13 -0
- package/test/data/index.ts +13 -0
- package/test/data/unixvictim-linux-x86 +0 -0
- package/test/data/unixvictim-linux-x86_64 +0 -0
- package/test/data/unixvictim-macos +0 -0
- package/test/device.ts +27 -0
- package/test/device_manager.ts +16 -0
- package/test/labrat.ts +32 -0
- package/test/script.ts +176 -0
- package/test/session.ts +73 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typing as T
|
|
6
|
+
|
|
7
|
+
from ...interpreterbase import (
|
|
8
|
+
ObjectHolder,
|
|
9
|
+
IterableObject,
|
|
10
|
+
MesonOperator,
|
|
11
|
+
typed_operator,
|
|
12
|
+
noKwargs,
|
|
13
|
+
noPosargs,
|
|
14
|
+
noArgsFlattening,
|
|
15
|
+
typed_pos_args,
|
|
16
|
+
|
|
17
|
+
TYPE_var,
|
|
18
|
+
|
|
19
|
+
InvalidArguments,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
if T.TYPE_CHECKING:
|
|
23
|
+
# Object holders need the actual interpreter
|
|
24
|
+
from ...interpreter import Interpreter
|
|
25
|
+
from ...interpreterbase import TYPE_kwargs
|
|
26
|
+
|
|
27
|
+
class DictHolder(ObjectHolder[T.Dict[str, TYPE_var]], IterableObject):
|
|
28
|
+
def __init__(self, obj: T.Dict[str, TYPE_var], interpreter: 'Interpreter') -> None:
|
|
29
|
+
super().__init__(obj, interpreter)
|
|
30
|
+
self.methods.update({
|
|
31
|
+
'has_key': self.has_key_method,
|
|
32
|
+
'keys': self.keys_method,
|
|
33
|
+
'get': self.get_method,
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
self.trivial_operators.update({
|
|
37
|
+
# Arithmetic
|
|
38
|
+
MesonOperator.PLUS: (dict, lambda x: {**self.held_object, **x}),
|
|
39
|
+
|
|
40
|
+
# Comparison
|
|
41
|
+
MesonOperator.EQUALS: (dict, lambda x: self.held_object == x),
|
|
42
|
+
MesonOperator.NOT_EQUALS: (dict, lambda x: self.held_object != x),
|
|
43
|
+
MesonOperator.IN: (str, lambda x: x in self.held_object),
|
|
44
|
+
MesonOperator.NOT_IN: (str, lambda x: x not in self.held_object),
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
# Use actual methods for functions that require additional checks
|
|
48
|
+
self.operators.update({
|
|
49
|
+
MesonOperator.INDEX: self.op_index,
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
def display_name(self) -> str:
|
|
53
|
+
return 'dict'
|
|
54
|
+
|
|
55
|
+
def iter_tuple_size(self) -> int:
|
|
56
|
+
return 2
|
|
57
|
+
|
|
58
|
+
def iter_self(self) -> T.Iterator[T.Tuple[str, TYPE_var]]:
|
|
59
|
+
return iter(self.held_object.items())
|
|
60
|
+
|
|
61
|
+
def size(self) -> int:
|
|
62
|
+
return len(self.held_object)
|
|
63
|
+
|
|
64
|
+
@noKwargs
|
|
65
|
+
@typed_pos_args('dict.has_key', str)
|
|
66
|
+
def has_key_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) -> bool:
|
|
67
|
+
return args[0] in self.held_object
|
|
68
|
+
|
|
69
|
+
@noKwargs
|
|
70
|
+
@noPosargs
|
|
71
|
+
def keys_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[str]:
|
|
72
|
+
return sorted(self.held_object)
|
|
73
|
+
|
|
74
|
+
@noArgsFlattening
|
|
75
|
+
@noKwargs
|
|
76
|
+
@typed_pos_args('dict.get', str, optargs=[object])
|
|
77
|
+
def get_method(self, args: T.Tuple[str, T.Optional[TYPE_var]], kwargs: TYPE_kwargs) -> TYPE_var:
|
|
78
|
+
if args[0] in self.held_object:
|
|
79
|
+
return self.held_object[args[0]]
|
|
80
|
+
if args[1] is not None:
|
|
81
|
+
return args[1]
|
|
82
|
+
raise InvalidArguments(f'Key {args[0]!r} is not in the dictionary.')
|
|
83
|
+
|
|
84
|
+
@typed_operator(MesonOperator.INDEX, str)
|
|
85
|
+
def op_index(self, other: str) -> TYPE_var:
|
|
86
|
+
if other not in self.held_object:
|
|
87
|
+
raise InvalidArguments(f'Key {other} is not in the dictionary.')
|
|
88
|
+
return self.held_object[other]
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from ...interpreterbase import (
|
|
6
|
+
FeatureBroken, InvalidArguments, MesonOperator, ObjectHolder, KwargInfo,
|
|
7
|
+
noKwargs, noPosargs, typed_operator, typed_kwargs
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
import typing as T
|
|
11
|
+
|
|
12
|
+
if T.TYPE_CHECKING:
|
|
13
|
+
# Object holders need the actual interpreter
|
|
14
|
+
from ...interpreter import Interpreter
|
|
15
|
+
from ...interpreterbase import TYPE_var, TYPE_kwargs
|
|
16
|
+
|
|
17
|
+
class IntegerHolder(ObjectHolder[int]):
|
|
18
|
+
def __init__(self, obj: int, interpreter: 'Interpreter') -> None:
|
|
19
|
+
super().__init__(obj, interpreter)
|
|
20
|
+
self.methods.update({
|
|
21
|
+
'is_even': self.is_even_method,
|
|
22
|
+
'is_odd': self.is_odd_method,
|
|
23
|
+
'to_string': self.to_string_method,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
self.trivial_operators.update({
|
|
27
|
+
# Arithmetic
|
|
28
|
+
MesonOperator.UMINUS: (None, lambda x: -self.held_object),
|
|
29
|
+
MesonOperator.PLUS: (int, lambda x: self.held_object + x),
|
|
30
|
+
MesonOperator.MINUS: (int, lambda x: self.held_object - x),
|
|
31
|
+
MesonOperator.TIMES: (int, lambda x: self.held_object * x),
|
|
32
|
+
|
|
33
|
+
# Comparison
|
|
34
|
+
MesonOperator.EQUALS: (int, lambda x: self.held_object == x),
|
|
35
|
+
MesonOperator.NOT_EQUALS: (int, lambda x: self.held_object != x),
|
|
36
|
+
MesonOperator.GREATER: (int, lambda x: self.held_object > x),
|
|
37
|
+
MesonOperator.LESS: (int, lambda x: self.held_object < x),
|
|
38
|
+
MesonOperator.GREATER_EQUALS: (int, lambda x: self.held_object >= x),
|
|
39
|
+
MesonOperator.LESS_EQUALS: (int, lambda x: self.held_object <= x),
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
# Use actual methods for functions that require additional checks
|
|
43
|
+
self.operators.update({
|
|
44
|
+
MesonOperator.DIV: self.op_div,
|
|
45
|
+
MesonOperator.MOD: self.op_mod,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
def display_name(self) -> str:
|
|
49
|
+
return 'int'
|
|
50
|
+
|
|
51
|
+
def operator_call(self, operator: MesonOperator, other: TYPE_var) -> TYPE_var:
|
|
52
|
+
if isinstance(other, bool):
|
|
53
|
+
FeatureBroken.single_use('int operations with non-int', '1.2.0', self.subproject,
|
|
54
|
+
'It is not commutative and only worked because of leaky Python abstractions.',
|
|
55
|
+
location=self.current_node)
|
|
56
|
+
return super().operator_call(operator, other)
|
|
57
|
+
|
|
58
|
+
@noKwargs
|
|
59
|
+
@noPosargs
|
|
60
|
+
def is_even_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> bool:
|
|
61
|
+
return self.held_object % 2 == 0
|
|
62
|
+
|
|
63
|
+
@noKwargs
|
|
64
|
+
@noPosargs
|
|
65
|
+
def is_odd_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> bool:
|
|
66
|
+
return self.held_object % 2 != 0
|
|
67
|
+
|
|
68
|
+
@typed_kwargs(
|
|
69
|
+
'to_string',
|
|
70
|
+
KwargInfo('fill', int, default=0, since='1.3.0')
|
|
71
|
+
)
|
|
72
|
+
@noPosargs
|
|
73
|
+
def to_string_method(self, args: T.List[TYPE_var], kwargs: T.Dict[str, T.Any]) -> str:
|
|
74
|
+
return str(self.held_object).zfill(kwargs['fill'])
|
|
75
|
+
|
|
76
|
+
@typed_operator(MesonOperator.DIV, int)
|
|
77
|
+
def op_div(self, other: int) -> int:
|
|
78
|
+
if other == 0:
|
|
79
|
+
raise InvalidArguments('Tried to divide by 0')
|
|
80
|
+
return self.held_object // other
|
|
81
|
+
|
|
82
|
+
@typed_operator(MesonOperator.MOD, int)
|
|
83
|
+
def op_mod(self, other: int) -> int:
|
|
84
|
+
if other == 0:
|
|
85
|
+
raise InvalidArguments('Tried to divide by 0')
|
|
86
|
+
return self.held_object % other
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typing as T
|
|
6
|
+
|
|
7
|
+
from ...interpreterbase import (
|
|
8
|
+
MesonInterpreterObject,
|
|
9
|
+
IterableObject,
|
|
10
|
+
MesonOperator,
|
|
11
|
+
InvalidArguments,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
if T.TYPE_CHECKING:
|
|
15
|
+
from ...interpreterbase import SubProject
|
|
16
|
+
|
|
17
|
+
class RangeHolder(MesonInterpreterObject, IterableObject):
|
|
18
|
+
def __init__(self, start: int, stop: int, step: int, *, subproject: 'SubProject') -> None:
|
|
19
|
+
super().__init__(subproject=subproject)
|
|
20
|
+
self.range = range(start, stop, step)
|
|
21
|
+
self.operators.update({
|
|
22
|
+
MesonOperator.INDEX: self.op_index,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
def op_index(self, other: int) -> int:
|
|
26
|
+
try:
|
|
27
|
+
return self.range[other]
|
|
28
|
+
except IndexError:
|
|
29
|
+
raise InvalidArguments(f'Index {other} out of bounds of range.')
|
|
30
|
+
|
|
31
|
+
def iter_tuple_size(self) -> None:
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
def iter_self(self) -> T.Iterator[int]:
|
|
35
|
+
return iter(self.range)
|
|
36
|
+
|
|
37
|
+
def size(self) -> int:
|
|
38
|
+
return len(self.range)
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2021 The Meson development team
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
import typing as T
|
|
9
|
+
|
|
10
|
+
from ...mesonlib import version_compare
|
|
11
|
+
from ...interpreterbase import (
|
|
12
|
+
ObjectHolder,
|
|
13
|
+
MesonOperator,
|
|
14
|
+
FeatureNew,
|
|
15
|
+
typed_operator,
|
|
16
|
+
noArgsFlattening,
|
|
17
|
+
noKwargs,
|
|
18
|
+
noPosargs,
|
|
19
|
+
typed_pos_args,
|
|
20
|
+
InvalidArguments,
|
|
21
|
+
FeatureBroken,
|
|
22
|
+
stringifyUserArguments,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
if T.TYPE_CHECKING:
|
|
27
|
+
# Object holders need the actual interpreter
|
|
28
|
+
from ...interpreter import Interpreter
|
|
29
|
+
from ...interpreterbase import TYPE_var, TYPE_kwargs
|
|
30
|
+
|
|
31
|
+
class StringHolder(ObjectHolder[str]):
|
|
32
|
+
def __init__(self, obj: str, interpreter: 'Interpreter') -> None:
|
|
33
|
+
super().__init__(obj, interpreter)
|
|
34
|
+
self.methods.update({
|
|
35
|
+
'contains': self.contains_method,
|
|
36
|
+
'startswith': self.startswith_method,
|
|
37
|
+
'endswith': self.endswith_method,
|
|
38
|
+
'format': self.format_method,
|
|
39
|
+
'join': self.join_method,
|
|
40
|
+
'replace': self.replace_method,
|
|
41
|
+
'split': self.split_method,
|
|
42
|
+
'splitlines': self.splitlines_method,
|
|
43
|
+
'strip': self.strip_method,
|
|
44
|
+
'substring': self.substring_method,
|
|
45
|
+
'to_int': self.to_int_method,
|
|
46
|
+
'to_lower': self.to_lower_method,
|
|
47
|
+
'to_upper': self.to_upper_method,
|
|
48
|
+
'underscorify': self.underscorify_method,
|
|
49
|
+
'version_compare': self.version_compare_method,
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
self.trivial_operators.update({
|
|
53
|
+
# Arithmetic
|
|
54
|
+
MesonOperator.PLUS: (str, lambda x: self.held_object + x),
|
|
55
|
+
|
|
56
|
+
# Comparison
|
|
57
|
+
MesonOperator.EQUALS: (str, lambda x: self.held_object == x),
|
|
58
|
+
MesonOperator.NOT_EQUALS: (str, lambda x: self.held_object != x),
|
|
59
|
+
MesonOperator.GREATER: (str, lambda x: self.held_object > x),
|
|
60
|
+
MesonOperator.LESS: (str, lambda x: self.held_object < x),
|
|
61
|
+
MesonOperator.GREATER_EQUALS: (str, lambda x: self.held_object >= x),
|
|
62
|
+
MesonOperator.LESS_EQUALS: (str, lambda x: self.held_object <= x),
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
# Use actual methods for functions that require additional checks
|
|
66
|
+
self.operators.update({
|
|
67
|
+
MesonOperator.DIV: self.op_div,
|
|
68
|
+
MesonOperator.INDEX: self.op_index,
|
|
69
|
+
MesonOperator.IN: self.op_in,
|
|
70
|
+
MesonOperator.NOT_IN: self.op_notin,
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
def display_name(self) -> str:
|
|
74
|
+
return 'str'
|
|
75
|
+
|
|
76
|
+
@noKwargs
|
|
77
|
+
@typed_pos_args('str.contains', str)
|
|
78
|
+
def contains_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) -> bool:
|
|
79
|
+
return self.held_object.find(args[0]) >= 0
|
|
80
|
+
|
|
81
|
+
@noKwargs
|
|
82
|
+
@typed_pos_args('str.startswith', str)
|
|
83
|
+
def startswith_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) -> bool:
|
|
84
|
+
return self.held_object.startswith(args[0])
|
|
85
|
+
|
|
86
|
+
@noKwargs
|
|
87
|
+
@typed_pos_args('str.endswith', str)
|
|
88
|
+
def endswith_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) -> bool:
|
|
89
|
+
return self.held_object.endswith(args[0])
|
|
90
|
+
|
|
91
|
+
@noArgsFlattening
|
|
92
|
+
@noKwargs
|
|
93
|
+
@typed_pos_args('str.format', varargs=object)
|
|
94
|
+
def format_method(self, args: T.Tuple[T.List[TYPE_var]], kwargs: TYPE_kwargs) -> str:
|
|
95
|
+
arg_strings: T.List[str] = []
|
|
96
|
+
for arg in args[0]:
|
|
97
|
+
try:
|
|
98
|
+
arg_strings.append(stringifyUserArguments(arg, self.subproject))
|
|
99
|
+
except InvalidArguments as e:
|
|
100
|
+
FeatureBroken.single_use(f'str.format: {str(e)}', '1.3.0', self.subproject, location=self.current_node)
|
|
101
|
+
arg_strings.append(str(arg))
|
|
102
|
+
|
|
103
|
+
def arg_replace(match: T.Match[str]) -> str:
|
|
104
|
+
idx = int(match.group(1))
|
|
105
|
+
if idx >= len(arg_strings):
|
|
106
|
+
raise InvalidArguments(f'Format placeholder @{idx}@ out of range.')
|
|
107
|
+
return arg_strings[idx]
|
|
108
|
+
|
|
109
|
+
return re.sub(r'@(\d+)@', arg_replace, self.held_object)
|
|
110
|
+
|
|
111
|
+
@noKwargs
|
|
112
|
+
@noPosargs
|
|
113
|
+
@FeatureNew('str.splitlines', '1.2.0')
|
|
114
|
+
def splitlines_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> T.List[str]:
|
|
115
|
+
return self.held_object.splitlines()
|
|
116
|
+
|
|
117
|
+
@noKwargs
|
|
118
|
+
@typed_pos_args('str.join', varargs=str)
|
|
119
|
+
def join_method(self, args: T.Tuple[T.List[str]], kwargs: TYPE_kwargs) -> str:
|
|
120
|
+
return self.held_object.join(args[0])
|
|
121
|
+
|
|
122
|
+
@noKwargs
|
|
123
|
+
@FeatureNew('str.replace', '0.58.0')
|
|
124
|
+
@typed_pos_args('str.replace', str, str)
|
|
125
|
+
def replace_method(self, args: T.Tuple[str, str], kwargs: TYPE_kwargs) -> str:
|
|
126
|
+
return self.held_object.replace(args[0], args[1])
|
|
127
|
+
|
|
128
|
+
@noKwargs
|
|
129
|
+
@typed_pos_args('str.split', optargs=[str])
|
|
130
|
+
def split_method(self, args: T.Tuple[T.Optional[str]], kwargs: TYPE_kwargs) -> T.List[str]:
|
|
131
|
+
return self.held_object.split(args[0])
|
|
132
|
+
|
|
133
|
+
@noKwargs
|
|
134
|
+
@typed_pos_args('str.strip', optargs=[str])
|
|
135
|
+
def strip_method(self, args: T.Tuple[T.Optional[str]], kwargs: TYPE_kwargs) -> str:
|
|
136
|
+
if args[0]:
|
|
137
|
+
FeatureNew.single_use('str.strip with a positional argument', '0.43.0', self.subproject, location=self.current_node)
|
|
138
|
+
return self.held_object.strip(args[0])
|
|
139
|
+
|
|
140
|
+
@noKwargs
|
|
141
|
+
@FeatureNew('str.substring', '0.56.0')
|
|
142
|
+
@typed_pos_args('str.substring', optargs=[int, int])
|
|
143
|
+
def substring_method(self, args: T.Tuple[T.Optional[int], T.Optional[int]], kwargs: TYPE_kwargs) -> str:
|
|
144
|
+
start = args[0] if args[0] is not None else 0
|
|
145
|
+
end = args[1] if args[1] is not None else len(self.held_object)
|
|
146
|
+
return self.held_object[start:end]
|
|
147
|
+
|
|
148
|
+
@noKwargs
|
|
149
|
+
@noPosargs
|
|
150
|
+
def to_int_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> int:
|
|
151
|
+
try:
|
|
152
|
+
return int(self.held_object)
|
|
153
|
+
except ValueError:
|
|
154
|
+
raise InvalidArguments(f'String {self.held_object!r} cannot be converted to int')
|
|
155
|
+
|
|
156
|
+
@noKwargs
|
|
157
|
+
@noPosargs
|
|
158
|
+
def to_lower_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str:
|
|
159
|
+
return self.held_object.lower()
|
|
160
|
+
|
|
161
|
+
@noKwargs
|
|
162
|
+
@noPosargs
|
|
163
|
+
def to_upper_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str:
|
|
164
|
+
return self.held_object.upper()
|
|
165
|
+
|
|
166
|
+
@noKwargs
|
|
167
|
+
@noPosargs
|
|
168
|
+
def underscorify_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str:
|
|
169
|
+
return re.sub(r'[^a-zA-Z0-9]', '_', self.held_object)
|
|
170
|
+
|
|
171
|
+
@noKwargs
|
|
172
|
+
@typed_pos_args('str.version_compare', str)
|
|
173
|
+
def version_compare_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) -> bool:
|
|
174
|
+
return version_compare(self.held_object, args[0])
|
|
175
|
+
|
|
176
|
+
@staticmethod
|
|
177
|
+
def _op_div(this: str, other: str) -> str:
|
|
178
|
+
return os.path.join(this, other).replace('\\', '/')
|
|
179
|
+
|
|
180
|
+
@FeatureNew('/ with string arguments', '0.49.0')
|
|
181
|
+
@typed_operator(MesonOperator.DIV, str)
|
|
182
|
+
def op_div(self, other: str) -> str:
|
|
183
|
+
return self._op_div(self.held_object, other)
|
|
184
|
+
|
|
185
|
+
@typed_operator(MesonOperator.INDEX, int)
|
|
186
|
+
def op_index(self, other: int) -> str:
|
|
187
|
+
try:
|
|
188
|
+
return self.held_object[other]
|
|
189
|
+
except IndexError:
|
|
190
|
+
raise InvalidArguments(f'Index {other} out of bounds of string of size {len(self.held_object)}.')
|
|
191
|
+
|
|
192
|
+
@FeatureNew('"in" string operator', '1.0.0')
|
|
193
|
+
@typed_operator(MesonOperator.IN, str)
|
|
194
|
+
def op_in(self, other: str) -> bool:
|
|
195
|
+
return other in self.held_object
|
|
196
|
+
|
|
197
|
+
@FeatureNew('"not in" string operator', '1.0.0')
|
|
198
|
+
@typed_operator(MesonOperator.NOT_IN, str)
|
|
199
|
+
def op_notin(self, other: str) -> bool:
|
|
200
|
+
return other not in self.held_object
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class MesonVersionString(str):
|
|
204
|
+
pass
|
|
205
|
+
|
|
206
|
+
class MesonVersionStringHolder(StringHolder):
|
|
207
|
+
@noKwargs
|
|
208
|
+
@typed_pos_args('str.version_compare', str)
|
|
209
|
+
def version_compare_method(self, args: T.Tuple[str], kwargs: TYPE_kwargs) -> bool:
|
|
210
|
+
self.interpreter.tmp_meson_version = args[0]
|
|
211
|
+
return version_compare(self.held_object, args[0])
|
|
212
|
+
|
|
213
|
+
# These special subclasses of string exist to cover the case where a dependency
|
|
214
|
+
# exports a string variable interchangeable with a system dependency. This
|
|
215
|
+
# matters because a dependency can only have string-type get_variable() return
|
|
216
|
+
# values. If at any time dependencies start supporting additional variable
|
|
217
|
+
# types, this class could be deprecated.
|
|
218
|
+
class DependencyVariableString(str):
|
|
219
|
+
pass
|
|
220
|
+
|
|
221
|
+
class DependencyVariableStringHolder(StringHolder):
|
|
222
|
+
def op_div(self, other: str) -> T.Union[str, DependencyVariableString]:
|
|
223
|
+
ret = super().op_div(other)
|
|
224
|
+
if '..' in other:
|
|
225
|
+
return ret
|
|
226
|
+
return DependencyVariableString(ret)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
class OptionString(str):
|
|
230
|
+
optname: str
|
|
231
|
+
|
|
232
|
+
def __new__(cls, value: str, name: str) -> 'OptionString':
|
|
233
|
+
obj = str.__new__(cls, value)
|
|
234
|
+
obj.optname = name
|
|
235
|
+
return obj
|
|
236
|
+
|
|
237
|
+
def __getnewargs__(self) -> T.Tuple[str, str]: # type: ignore # because the entire point of this is to diverge
|
|
238
|
+
return (str(self), self.optname)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
class OptionStringHolder(StringHolder):
|
|
242
|
+
held_object: OptionString
|
|
243
|
+
|
|
244
|
+
def op_div(self, other: str) -> T.Union[str, OptionString]:
|
|
245
|
+
ret = super().op_div(other)
|
|
246
|
+
name = self._op_div(self.held_object.optname, other)
|
|
247
|
+
return OptionString(ret, name)
|