diff --git a/.cspell.dict/python-more.txt b/.cspell.dict/python-more.txt
index 2edfe95bd..32d13f59b 100644
--- a/.cspell.dict/python-more.txt
+++ b/.cspell.dict/python-more.txt
@@ -224,6 +224,7 @@ sysvars
teedata
thisclass
titlecased
+tkapp
tobytes
tolist
toreadonly
diff --git a/Cargo.lock b/Cargo.lock
index 706f70f2d..f3a8f59af 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -59,9 +59,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.96"
+version = "1.0.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
+checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
[[package]]
name = "approx"
@@ -116,37 +116,24 @@ version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-[[package]]
-name = "bind_syn"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d6608ba072b4bc847774fac76963956592b5cdfa3751afcefa252fb61cb85b9"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.98",
-]
-
[[package]]
name = "bindgen"
-version = "0.64.0"
+version = "0.71.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
+checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.9.0",
"cexpr",
"clang-sys",
- "lazy_static 1.5.0",
- "lazycell",
+ "itertools 0.11.0",
"log",
- "peeking_take_while",
+ "prettyplease",
"proc-macro2",
"quote",
"regex",
- "rustc-hash 1.1.0",
+ "rustc-hash",
"shlex",
- "syn 1.0.109",
- "which 4.4.2",
+ "syn 2.0.100",
]
[[package]]
@@ -157,9 +144,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
[[package]]
name = "blake2"
@@ -201,15 +188,9 @@ dependencies = [
[[package]]
name = "bytemuck"
-version = "1.21.0"
+version = "1.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
-
-[[package]]
-name = "byteorder"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540"
[[package]]
name = "bzip2"
@@ -223,12 +204,11 @@ dependencies = [
[[package]]
name = "bzip2-sys"
-version = "0.1.12+1.0.8"
+version = "0.1.13+1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72ebc2f1a417f01e1da30ef264ee86ae31d2dcd2d603ea283d3c244a883ca2a9"
+checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14"
dependencies = [
"cc",
- "libc",
"pkg-config",
]
@@ -258,35 +238,13 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.14"
+version = "1.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9"
+checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
dependencies = [
"shlex",
]
-[[package]]
-name = "cex"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b0114a3f232423fadbbdbb692688e3e68c3b58b4b063ac3a7d0190d561080da"
-dependencies = [
- "cex_derive",
- "enumx",
-]
-
-[[package]]
-name = "cex_derive"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b5048cd656d7d2e739960fa33d9f95693005792dc8aad0af8b8f0b7d76c938d"
-dependencies = [
- "indexmap 1.9.3",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "cexpr"
version = "0.6.0"
@@ -310,16 +268,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chrono"
-version = "0.4.39"
+version = "0.4.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"wasm-bindgen",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
@@ -344,19 +302,6 @@ dependencies = [
"unicode-width 0.1.14",
]
-[[package]]
-name = "clib"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda1a698cd341f055d3ae1fdbfb1cc441e7f9bacce795356ecc685e69134e957"
-dependencies = [
- "anyhow",
- "bindgen",
- "inwelling",
- "pkg-config",
- "toml",
-]
-
[[package]]
name = "clipboard-win"
version = "5.4.0"
@@ -382,9 +327,9 @@ dependencies = [
[[package]]
name = "console"
-version = "0.15.10"
+version = "0.15.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b"
+checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
dependencies = [
"encode_unicode",
"libc",
@@ -484,10 +429,10 @@ dependencies = [
"cranelift-entity",
"cranelift-isle",
"gimli",
- "hashbrown 0.15.2",
+ "hashbrown",
"log",
"regalloc2",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"serde",
"smallvec",
"target-lexicon 0.13.2",
@@ -711,7 +656,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
"unicode-xid",
]
@@ -761,15 +706,15 @@ dependencies = [
[[package]]
name = "dyn-clone"
-version = "1.0.18"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35"
+checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005"
[[package]]
name = "either"
-version = "1.13.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "encode_unicode"
@@ -783,27 +728,6 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
-[[package]]
-name = "enumx"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32875abeb14f7fe2c2b8ad15e58f41701f455d124d0a03bc88132d5face2663f"
-dependencies = [
- "enumx_derive",
-]
-
-[[package]]
-name = "enumx_derive"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa5d66efdd1eab6ea85ba31bdb58bed1e4ce218c1361061384ece88f40ebeb49"
-dependencies = [
- "indexmap 1.9.3",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "env_logger"
version = "0.9.3"
@@ -851,13 +775,13 @@ checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
[[package]]
name = "fd-lock"
-version = "4.0.2"
+version = "4.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947"
+checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78"
dependencies = [
"cfg-if",
- "rustix",
- "windows-sys 0.52.0",
+ "rustix 1.0.3",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -891,7 +815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8168cbad48fdda10be94de9c6319f9e8ac5d3cf0a1abda1864269dfcca3d302a"
dependencies = [
"flame",
- "indexmap 2.7.1",
+ "indexmap",
"serde",
"serde_json",
]
@@ -946,11 +870,11 @@ dependencies = [
[[package]]
name = "gethostname"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fd4b8790c0792e3b11895efdf5f289ebe8b59107a6624f1cce68f24ff8c7035"
+checksum = "ed7131e57abbde63513e0e6636f76668a1ca9798dcae2df4e283cae9ee83859e"
dependencies = [
- "rustix",
+ "rustix 1.0.3",
"windows-targets 0.52.6",
]
@@ -978,16 +902,16 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
+checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
dependencies = [
"cfg-if",
"js-sys",
"libc",
- "wasi 0.13.3+wasi-0.2.2",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
"wasm-bindgen",
- "windows-targets 0.52.6",
]
[[package]]
@@ -997,7 +921,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
dependencies = [
"fallible-iterator",
- "indexmap 2.7.1",
+ "indexmap",
"stable_deref_trait",
]
@@ -1015,20 +939,14 @@ checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403"
[[package]]
name = "half"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
+checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1"
dependencies = [
"cfg-if",
"crunchy",
]
-[[package]]
-name = "hashbrown"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-
[[package]]
name = "hashbrown"
version = "0.15.2"
@@ -1038,30 +956,12 @@ dependencies = [
"foldhash",
]
-[[package]]
-name = "heck"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
-
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-[[package]]
-name = "heredom"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a7a4d76fa670b51cfb56e908ad8bfd44a14fee853ea764790e46634d3fcdf4d"
-dependencies = [
- "tuplex",
-]
-
[[package]]
name = "hermit-abi"
version = "0.1.19"
@@ -1100,16 +1000,17 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.61"
+version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
+ "log",
"wasm-bindgen",
- "windows-core",
+ "windows-core 0.61.0",
]
[[package]]
@@ -1123,35 +1024,25 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "1.9.3"
+version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
-dependencies = [
- "autocfg",
- "hashbrown 0.12.3",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
+checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
dependencies = [
"equivalent",
- "hashbrown 0.15.2",
+ "hashbrown",
]
[[package]]
name = "indoc"
-version = "2.0.5"
+version = "2.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
+checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
[[package]]
name = "insta"
-version = "1.42.1"
+version = "1.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71c1b125e30d93896b365e156c33dadfffab45ee8400afcbba4752f59de08a86"
+checksum = "50259abbaa67d11d2bcafc7ba1d094ed7a0c70e3ce893f0d0997f73558cb3084"
dependencies = [
"console",
"linked-hash-map",
@@ -1160,26 +1051,16 @@ dependencies = [
"similar",
]
-[[package]]
-name = "inwelling"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f6292c68ffca1fa94ca8f95ca5ad2885d79d96377f1d37ced6a47cd26cfaf8c"
-dependencies = [
- "toml",
- "walkdir",
-]
-
[[package]]
name = "is-macro"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d57a3e447e24c22647738e4607f1df1e0ec6f72e16182c4cd199f647cdfb0e4"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -1211,9 +1092,9 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.14"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "js-sys"
@@ -1246,9 +1127,13 @@ dependencies = [
[[package]]
name = "lambert_w"
-version = "1.0.17"
+version = "1.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45bf98425154bfe790a47b72ac452914f6df9ebfb202bc59e089e29db00258cf"
+checksum = "0eeec1be8d026f51b1cf70ed28442b9f0ece61ff196cd3a99d8b4492a83a864b"
+dependencies = [
+ "num-complex",
+ "num-traits",
+]
[[package]]
name = "lazy_static"
@@ -1262,12 +1147,6 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-[[package]]
-name = "lazycell"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-
[[package]]
name = "lexical-parse-float"
version = "1.0.5"
@@ -1300,15 +1179,15 @@ dependencies = [
[[package]]
name = "lexopt"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401"
+checksum = "9fa0e2a1fcbe2f6be6c42e342259976206b383122fc152e872795338b5a3f3a7"
[[package]]
name = "libc"
-version = "0.2.169"
+version = "0.2.171"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
[[package]]
name = "libffi"
@@ -1351,7 +1230,7 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"libc",
]
@@ -1387,6 +1266,12 @@ version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
+[[package]]
+name = "linux-raw-sys"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413"
+
[[package]]
name = "lock_api"
version = "0.4.12"
@@ -1399,9 +1284,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.25"
+version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
name = "lz4_flex"
@@ -1437,7 +1322,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5063891d2cec8fd20cabccbd3fc277bf8d5666f481fb3f79d999559b39a62713"
dependencies = [
- "hashbrown 0.15.2",
+ "hashbrown",
"itertools 0.11.0",
"libm",
"ryu",
@@ -1533,9 +1418,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
-version = "0.8.4"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b"
+checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
dependencies = [
"adler2",
]
@@ -1549,12 +1434,6 @@ dependencies = [
"rand_core 0.9.3",
]
-[[package]]
-name = "mutf8"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97b444426a4c188e9ad33560853ebd52309ab72811f536a9e6f37907fd12cf45"
-
[[package]]
name = "nibble_vec"
version = "0.1.0"
@@ -1570,7 +1449,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"cfg-if",
"cfg_aliases",
"libc",
@@ -1639,23 +1518,22 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
dependencies = [
- "proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "once_cell"
-version = "1.20.3"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "oorandom"
-version = "11.1.4"
+version = "11.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
+checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
[[package]]
name = "openssl"
@@ -1663,7 +1541,7 @@ version = "0.10.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"cfg-if",
"foreign-types",
"libc",
@@ -1680,7 +1558,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -1745,7 +1623,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.5.8",
+ "redox_syscall 0.5.10",
"smallvec",
"windows-targets 0.52.6",
]
@@ -1756,12 +1634,6 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
-[[package]]
-name = "peeking_take_while"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
-
[[package]]
name = "phf"
version = "0.11.3"
@@ -1802,29 +1674,29 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.1.9"
+version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d"
+checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.9"
+version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67"
+checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "pkg-config"
-version = "0.3.31"
+version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "plotters"
@@ -1862,38 +1734,39 @@ checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "portable-atomic"
-version = "1.10.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
[[package]]
name = "ppv-lite86"
-version = "0.2.20"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
- "zerocopy 0.7.35",
+ "zerocopy 0.8.24",
]
[[package]]
-name = "proc-macro-crate"
-version = "3.3.0"
+name = "prettyplease"
+version = "0.2.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
+checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb"
dependencies = [
- "toml_edit 0.22.24",
+ "proc-macro2",
+ "syn 2.0.100",
]
[[package]]
name = "proc-macro2"
-version = "1.0.93"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
dependencies = [
"unicode-ident",
]
@@ -1955,7 +1828,7 @@ dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -1964,22 +1837,28 @@ version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"pyo3-build-config",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "quote"
-version = "1.0.38"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r-efi"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
+
[[package]]
name = "radium"
version = "0.7.0"
@@ -2015,7 +1894,7 @@ checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
dependencies = [
"rand_chacha 0.9.0",
"rand_core 0.9.3",
- "zerocopy 0.8.20",
+ "zerocopy 0.8.24",
]
[[package]]
@@ -2053,7 +1932,7 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
- "getrandom 0.3.1",
+ "getrandom 0.3.2",
]
[[package]]
@@ -2084,11 +1963,11 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]]
name = "redox_syscall"
-version = "0.5.8"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
+checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
]
[[package]]
@@ -2110,9 +1989,9 @@ checksum = "145c1c267e14f20fb0f88aa76a1c5ffec42d592c1d28b3cd9148ae35916158d3"
dependencies = [
"allocator-api2",
"bumpalo",
- "hashbrown 0.15.2",
+ "hashbrown",
"log",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"smallvec",
]
@@ -2175,7 +2054,7 @@ dependencies = [
"pmutil",
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -2184,7 +2063,7 @@ version = "0.0.0"
source = "git+https://github.com/astral-sh/ruff.git?tag=0.11.0#2cd25ef6410fb5fca96af1578728a3d828d2d53a"
dependencies = [
"aho-corasick",
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"compact_str",
"is-macro",
"itertools 0.14.0",
@@ -2192,7 +2071,7 @@ dependencies = [
"ruff_python_trivia",
"ruff_source_file",
"ruff_text_size",
- "rustc-hash 2.1.1",
+ "rustc-hash",
]
[[package]]
@@ -2200,14 +2079,14 @@ name = "ruff_python_parser"
version = "0.0.0"
source = "git+https://github.com/astral-sh/ruff.git?tag=0.11.0#2cd25ef6410fb5fca96af1578728a3d828d2d53a"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"bstr",
"compact_str",
"memchr",
"ruff_python_ast",
"ruff_python_trivia",
"ruff_text_size",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"static_assertions",
"unicode-ident",
"unicode-normalization",
@@ -2239,12 +2118,6 @@ name = "ruff_text_size"
version = "0.0.0"
source = "git+https://github.com/astral-sh/ruff.git?tag=0.11.0#2cd25ef6410fb5fca96af1578728a3d828d2d53a"
-[[package]]
-name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
[[package]]
name = "rustc-hash"
version = "2.1.1"
@@ -2257,10 +2130,23 @@ version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"errno",
"libc",
- "linux-raw-sys",
+ "linux-raw-sys 0.4.15",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "rustix"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96"
+dependencies = [
+ "bitflags 2.9.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.9.3",
"windows-sys 0.59.0",
]
@@ -2291,8 +2177,8 @@ name = "rustpython-codegen"
version = "0.4.0"
dependencies = [
"ahash",
- "bitflags 2.8.0",
- "indexmap 2.7.1",
+ "bitflags 2.9.0",
+ "indexmap",
"insta",
"itertools 0.14.0",
"log",
@@ -2307,7 +2193,7 @@ dependencies = [
"rustpython-compiler-source",
"rustpython-literal",
"rustpython-wtf8",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
"unicode_names2",
]
@@ -2316,10 +2202,10 @@ name = "rustpython-common"
version = "0.4.0"
dependencies = [
"ascii",
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"bstr",
"cfg-if",
- "getrandom 0.3.1",
+ "getrandom 0.3.2",
"itertools 0.14.0",
"libc",
"lock_api",
@@ -2352,14 +2238,14 @@ dependencies = [
"rustpython-codegen",
"rustpython-compiler-core",
"rustpython-compiler-source",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
]
[[package]]
name = "rustpython-compiler-core"
version = "0.4.0"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"itertools 0.14.0",
"lz4_flex",
"malachite-bigint",
@@ -2384,7 +2270,7 @@ dependencies = [
"proc-macro2",
"rustpython-compiler",
"rustpython-derive-impl",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -2397,9 +2283,9 @@ dependencies = [
"quote",
"rustpython-compiler-core",
"rustpython-doc",
- "syn 2.0.98",
+ "syn 2.0.100",
"syn-ext",
- "textwrap 0.16.1",
+ "textwrap 0.16.2",
]
[[package]]
@@ -2422,7 +2308,7 @@ dependencies = [
"num-traits",
"rustpython-compiler-core",
"rustpython-derive",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
]
[[package]]
@@ -2451,7 +2337,7 @@ dependencies = [
name = "rustpython-sre_engine"
version = "0.4.0"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"criterion",
"num_enum",
"optional",
@@ -2479,7 +2365,7 @@ dependencies = [
"foreign-types-shared",
"gethostname",
"hex",
- "indexmap 2.7.1",
+ "indexmap",
"itertools 0.14.0",
"junction",
"libc",
@@ -2504,7 +2390,7 @@ dependencies = [
"paste",
"puruspe",
"rand_core 0.9.3",
- "rustix",
+ "rustix 0.38.44",
"rustpython-common",
"rustpython-derive",
"rustpython-vm",
@@ -2514,9 +2400,9 @@ dependencies = [
"sha3",
"socket2",
"system-configuration",
- "tcl",
+ "tcl-sys",
"termios",
- "tk",
+ "tk-sys",
"ucd",
"unic-char-property",
"unic-normal",
@@ -2538,7 +2424,7 @@ version = "0.4.0"
dependencies = [
"ahash",
"ascii",
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"bstr",
"caseless",
"cfg-if",
@@ -2548,11 +2434,11 @@ dependencies = [
"exitcode",
"flame",
"flamer",
- "getrandom 0.3.1",
+ "getrandom 0.3.2",
"glob",
- "half 2.4.1",
+ "half 2.5.0",
"hex",
- "indexmap 2.7.1",
+ "indexmap",
"is-macro",
"itertools 0.14.0",
"junction",
@@ -2578,7 +2464,7 @@ dependencies = [
"ruff_python_parser",
"ruff_source_file",
"ruff_text_size",
- "rustix",
+ "rustix 0.38.44",
"rustpython-codegen",
"rustpython-common",
"rustpython-compiler",
@@ -2592,9 +2478,9 @@ dependencies = [
"schannel",
"serde",
"static_assertions",
- "strum 0.27.1",
- "strum_macros 0.27.1",
- "thiserror 2.0.11",
+ "strum",
+ "strum_macros",
+ "thiserror 2.0.12",
"thread_local",
"timsort",
"uname",
@@ -2604,7 +2490,7 @@ dependencies = [
"unicode-casing",
"unicode_names2",
"wasm-bindgen",
- "which 6.0.3",
+ "which",
"widestring",
"windows",
"windows-sys 0.59.0",
@@ -2642,9 +2528,9 @@ dependencies = [
[[package]]
name = "rustversion"
-version = "1.0.19"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
[[package]]
name = "rustyline"
@@ -2652,7 +2538,7 @@ version = "15.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
"cfg-if",
"clipboard-win",
"fd-lock",
@@ -2670,9 +2556,9 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.19"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "same-file"
@@ -2700,9 +2586,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
-version = "1.0.218"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
@@ -2731,20 +2617,20 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.218"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "serde_json"
-version = "1.0.139"
+version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
"itoa",
"memchr",
@@ -2752,15 +2638,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "serde_spanned"
-version = "0.6.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
-dependencies = [
- "serde",
-]
-
[[package]]
name = "sha-1"
version = "0.10.1"
@@ -2819,9 +2696,9 @@ checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
[[package]]
name = "socket2"
-version = "0.5.8"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
dependencies = [
"libc",
"windows-sys 0.52.0",
@@ -2839,41 +2716,23 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-[[package]]
-name = "strum"
-version = "0.19.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5"
-
[[package]]
name = "strum"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32"
-[[package]]
-name = "strum_macros"
-version = "0.19.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e61bb0be289045cb80bfce000512e32d09f8337e54c186725da381377ad1f8d5"
-dependencies = [
- "heck 0.3.3",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "strum_macros"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8"
dependencies = [
- "heck 0.5.0",
+ "heck",
"proc-macro2",
"quote",
"rustversion",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -2895,9 +2754,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.98"
+version = "2.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
dependencies = [
"proc-macro2",
"quote",
@@ -2912,7 +2771,7 @@ checksum = "b126de4ef6c2a628a68609dd00733766c3b015894698a438ebdf374933fc31d1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -2949,33 +2808,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a"
[[package]]
-name = "tcl"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e0d0928e8b4dca8ebd485f687f725bb34e454c7a28c1d353bf7d1b8060581bf"
+name = "tcl-sys"
+version = "0.1.0"
+source = "git+https://github.com/arihant2math/tkinter.git?tag=v0.1.0#09a4f62e894df64692b34e6c7f81af1e1ae376dd"
dependencies = [
- "cex",
- "clib",
- "enumx",
- "inwelling",
- "mutf8",
- "serde",
- "serde_derive",
- "tcl_derive",
- "tuplex",
-]
-
-[[package]]
-name = "tcl_derive"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "625d95e672231bbf31dead6861b0ad72bcb71a2891b26b0c4924cd1cc9687b93"
-dependencies = [
- "bind_syn",
- "proc-macro2",
- "quote",
- "syn 2.0.98",
- "uuid",
+ "bindgen",
+ "pkg-config",
]
[[package]]
@@ -3007,9 +2845,9 @@ dependencies = [
[[package]]
name = "textwrap"
-version = "0.16.1"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
+checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
[[package]]
name = "thiserror"
@@ -3022,11 +2860,11 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.11"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
dependencies = [
- "thiserror-impl 2.0.11",
+ "thiserror-impl 2.0.12",
]
[[package]]
@@ -3037,18 +2875,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "thiserror-impl"
-version = "2.0.11"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
@@ -3090,9 +2928,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.8.1"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8"
+checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
dependencies = [
"tinyvec_macros",
]
@@ -3104,78 +2942,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
-name = "tk"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6fbe29c813c9eee5e0d4d996a4a615f6538220f0ad181269a413f21c13eb077"
+name = "tk-sys"
+version = "0.1.0"
+source = "git+https://github.com/arihant2math/tkinter.git?tag=v0.1.0#09a4f62e894df64692b34e6c7f81af1e1ae376dd"
dependencies = [
- "bitflags 1.3.2",
- "cex",
- "clib",
- "enumx",
- "heredom",
- "inwelling",
- "num_enum",
- "once_cell",
- "serde",
- "strum 0.19.5",
- "strum_macros 0.19.4",
- "tcl",
- "tcl_derive",
- "tuplex",
+ "bindgen",
+ "pkg-config",
]
-[[package]]
-name = "toml"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
-dependencies = [
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit 0.19.15",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.19.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
-dependencies = [
- "indexmap 2.7.1",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "winnow 0.5.40",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.22.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
-dependencies = [
- "indexmap 2.7.1",
- "toml_datetime",
- "winnow 0.7.4",
-]
-
-[[package]]
-name = "tuplex"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "676ac81d5454c4dcf37955d34fa8626ede3490f744b86ca14a7b90168d2a08aa"
-
[[package]]
name = "twox-hash"
version = "1.6.3"
@@ -3320,9 +3094,9 @@ checksum = "623f59e6af2a98bdafeb93fa277ac8e1e40440973001ca15cf4ae1541cd16d56"
[[package]]
name = "unicode-ident"
-version = "1.0.17"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-normalization"
@@ -3381,9 +3155,9 @@ dependencies = [
[[package]]
name = "unindent"
-version = "0.2.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
+checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
[[package]]
name = "utf8parse"
@@ -3393,12 +3167,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.13.2"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c1f41ffb7cf259f1ecc2876861a17e7142e63ead296f671f81f6ae85903e0d6"
+checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
dependencies = [
"atomic",
- "getrandom 0.3.1",
]
[[package]]
@@ -3437,9 +3210,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasi"
-version = "0.13.3+wasi-0.2.2"
+version = "0.14.2+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
dependencies = [
"wit-bindgen-rt",
]
@@ -3466,7 +3239,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
"wasm-bindgen-shared",
]
@@ -3501,7 +3274,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3537,18 +3310,6 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "which"
-version = "4.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
-dependencies = [
- "either",
- "home",
- "once_cell",
- "rustix",
-]
-
[[package]]
name = "which"
version = "6.0.3"
@@ -3557,15 +3318,15 @@ checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f"
dependencies = [
"either",
"home",
- "rustix",
+ "rustix 0.38.44",
"winsafe",
]
[[package]]
name = "widestring"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311"
+checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"
[[package]]
name = "winapi"
@@ -3604,7 +3365,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
dependencies = [
- "windows-core",
+ "windows-core 0.52.0",
"windows-targets 0.52.6",
]
@@ -3617,6 +3378,65 @@ dependencies = [
"windows-targets 0.52.6",
]
+[[package]]
+name = "windows-core"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+
+[[package]]
+name = "windows-result"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
+dependencies = [
+ "windows-link",
+]
+
[[package]]
name = "windows-sys"
version = "0.48.0"
@@ -3765,24 +3585,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
-[[package]]
-name = "winnow"
-version = "0.5.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "winnow"
-version = "0.7.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "winreg"
version = "0.55.0"
@@ -3801,11 +3603,11 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
[[package]]
name = "wit-bindgen-rt"
-version = "0.33.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
- "bitflags 2.8.0",
+ "bitflags 2.9.0",
]
[[package]]
@@ -3820,17 +3622,16 @@ version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
- "byteorder",
"zerocopy-derive 0.7.35",
]
[[package]]
name = "zerocopy"
-version = "0.8.20"
+version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
dependencies = [
- "zerocopy-derive 0.8.20",
+ "zerocopy-derive 0.8.24",
]
[[package]]
@@ -3841,18 +3642,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.20"
+version = "0.8.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.98",
+ "syn 2.0.100",
]
[[package]]
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 8b2502b4c..df3b936cc 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -2451,7 +2451,9 @@ class Tk(Misc, Wm):
self.tk = None
if baseName is None:
import os
- baseName = os.path.basename(sys.argv[0])
+ # TODO: RUSTPYTHON
+ # baseName = os.path.basename(sys.argv[0])
+ baseName = "" # sys.argv[0]
baseName, ext = os.path.splitext(baseName)
if ext not in ('.py', '.pyc'):
baseName = baseName + ext
diff --git a/flamegraph.svg b/flamegraph.svg
new file mode 100644
index 000000000..a19606892
--- /dev/null
+++ b/flamegraph.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/stdlib/Cargo.toml b/stdlib/Cargo.toml
index a8393206d..26c85103e 100644
--- a/stdlib/Cargo.toml
+++ b/stdlib/Cargo.toml
@@ -18,7 +18,7 @@ bz2 = ["bzip2"]
sqlite = ["dep:libsqlite3-sys"]
ssl = ["openssl", "openssl-sys", "foreign-types-shared", "openssl-probe"]
ssl-vendor = ["ssl", "openssl/vendored"]
-tkinter = ["dep:tk", "dep:tcl"]
+tkinter = ["dep:tk-sys", "dep:tcl-sys"]
[dependencies]
# rustpython crates
@@ -83,8 +83,8 @@ libz-sys = { package = "libz-rs-sys", version = "0.4" }
bzip2 = { version = "0.4", optional = true }
# tkinter
-tk = { version = "0.1.10", optional = true }
-tcl = { version = "0.1.9", optional = true }
+tk-sys = { git = "https://github.com/arihant2math/tkinter.git", tag = "v0.1.0", optional = true }
+tcl-sys = { git = "https://github.com/arihant2math/tkinter.git", tag = "v0.1.0", optional = true }
# uuid
[target.'cfg(not(any(target_os = "ios", target_os = "android", target_os = "windows", target_arch = "wasm32", target_os = "redox")))'.dependencies]
diff --git a/stdlib/src/tkinter.rs b/stdlib/src/tkinter.rs
index 907dc5500..242570b41 100644
--- a/stdlib/src/tkinter.rs
+++ b/stdlib/src/tkinter.rs
@@ -4,83 +4,478 @@ pub(crate) use self::_tkinter::make_module;
#[pymodule]
mod _tkinter {
+ use rustpython_vm::types::Constructor;
+ use rustpython_vm::{PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine};
+
+ use rustpython_vm::builtins::{PyInt, PyStr, PyType};
+ use std::{ffi, ptr};
+
use crate::builtins::PyTypeRef;
- use rustpython_vm::function::{Either, FuncArgs};
- use rustpython_vm::{PyResult, VirtualMachine, function::OptionalArg};
+ use rustpython_common::atomic::AtomicBool;
+ use rustpython_common::atomic::Ordering;
- use crate::common::lock::PyRwLock;
- use std::sync::Arc;
- use tk::cmd::*;
- use tk::*;
-
- #[pyattr]
- const TK_VERSION: &str = "8.6";
- #[pyattr]
- const TCL_VERSION: &str = "8.6";
- #[pyattr]
- const READABLE: i32 = 2;
- #[pyattr]
- const WRITABLE: i32 = 4;
- #[pyattr]
- const EXCEPTION: i32 = 8;
-
- fn demo() -> tk::TkResult<()> {
- let tk = make_tk!()?;
- let root = tk.root();
- root.add_label(-text("constructs widgets and layout step by step"))?
- .pack(())?;
- let f = root.add_frame(())?.pack(())?;
- let _btn = f
- .add_button("btn" - text("quit") - command("destroy ."))?
- .pack(())?;
- Ok(main_loop())
+ #[cfg(windows)]
+ fn _get_tcl_lib_path() -> String {
+ // TODO: fix packaging
+ String::from(r"C:\ActiveTcl\lib")
}
- #[pyattr(once, name = "TclError")]
+ #[pyattr(name = "TclError", once)]
fn tcl_error(vm: &VirtualMachine) -> PyTypeRef {
vm.ctx.new_exception_type(
- "zlib",
+ "_tkinter",
"TclError",
Some(vec![vm.ctx.exceptions.exception_type.to_owned()]),
)
}
- #[pyfunction]
- fn create(args: FuncArgs, _vm: &VirtualMachine) -> PyResult {
- // TODO: handle arguments
- // TODO: this means creating 2 tk instances is not possible.
- let tk = Tk::new(()).unwrap();
- Ok(TkApp {
- tk: Arc::new(PyRwLock::new(tk)),
- })
+ #[pyattr(name = "TkError", once)]
+ fn tk_error(vm: &VirtualMachine) -> PyTypeRef {
+ vm.ctx.new_exception_type(
+ "_tkinter",
+ "TkError",
+ Some(vec![vm.ctx.exceptions.exception_type.to_owned()]),
+ )
}
+ #[pyattr(once, name = "TK_VERSION")]
+ fn tk_version(_vm: &VirtualMachine) -> String {
+ format!("{}.{}", 8, 6)
+ }
+
+ #[pyattr(once, name = "TCL_VERSION")]
+ fn tcl_version(_vm: &VirtualMachine) -> String {
+ format!(
+ "{}.{}",
+ tk_sys::TCL_MAJOR_VERSION,
+ tk_sys::TCL_MINOR_VERSION
+ )
+ }
+
+ #[pyattr]
+ #[pyclass(name = "TclObject")]
+ #[derive(PyPayload)]
+ struct TclObject {
+ value: *mut tk_sys::Tcl_Obj,
+ }
+
+ impl std::fmt::Debug for TclObject {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "TclObject")
+ }
+ }
+
+ unsafe impl Send for TclObject {}
+ unsafe impl Sync for TclObject {}
+
+ #[pyclass]
+ impl TclObject {}
+
+ static QUIT_MAIN_LOOP: AtomicBool = AtomicBool::new(false);
+
#[pyattr]
#[pyclass(name = "tkapp")]
#[derive(PyPayload)]
struct TkApp {
- tk: Arc>>,
+ // Tcl_Interp *interp;
+ interpreter: *mut tk_sys::Tcl_Interp,
+ // int wantobjects;
+ want_objects: bool,
+ // int threaded; /* True if tcl_platform[threaded] */
+ threaded: bool,
+ // Tcl_ThreadId thread_id;
+ thread_id: Option,
+ // int dispatching;
+ dispatching: bool,
+ // PyObject *trace;
+ trace: Option<()>,
+ // /* We cannot include tclInt.h, as this is internal.
+ // So we cache interesting types here. */
+ old_boolean_type: *const tk_sys::Tcl_ObjType,
+ boolean_type: *const tk_sys::Tcl_ObjType,
+ byte_array_type: *const tk_sys::Tcl_ObjType,
+ double_type: *const tk_sys::Tcl_ObjType,
+ int_type: *const tk_sys::Tcl_ObjType,
+ wide_int_type: *const tk_sys::Tcl_ObjType,
+ bignum_type: *const tk_sys::Tcl_ObjType,
+ list_type: *const tk_sys::Tcl_ObjType,
+ string_type: *const tk_sys::Tcl_ObjType,
+ utf32_string_type: *const tk_sys::Tcl_ObjType,
+ pixel_type: *const tk_sys::Tcl_ObjType,
}
unsafe impl Send for TkApp {}
-
unsafe impl Sync for TkApp {}
impl std::fmt::Debug for TkApp {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- f.debug_struct("TkApp").finish()
+ write!(f, "TkApp")
}
}
- #[pyclass]
+ #[derive(FromArgs, Debug)]
+ struct TkAppConstructorArgs {
+ #[pyarg(any)]
+ screen_name: Option,
+ #[pyarg(any)]
+ _base_name: Option,
+ #[pyarg(any)]
+ class_name: String,
+ #[pyarg(any)]
+ interactive: i32,
+ #[pyarg(any)]
+ wantobjects: i32,
+ #[pyarg(any, default = "true")]
+ want_tk: bool,
+ #[pyarg(any)]
+ sync: i32,
+ #[pyarg(any)]
+ use_: Option,
+ }
+
+ impl Constructor for TkApp {
+ type Args = TkAppConstructorArgs;
+
+ fn py_new(
+ _zelf: PyRef,
+ args: Self::Args,
+ vm: &VirtualMachine,
+ ) -> PyResult {
+ create(args, vm)
+ }
+ }
+
+ fn varname_converter(obj: PyObjectRef, vm: &VirtualMachine) -> PyResult {
+ // if let Ok(bytes) = obj.bytes(vm) {
+ // todo!()
+ // }
+
+ // str
+ if let Some(str) = obj.downcast_ref::() {
+ return Ok(str.as_str().to_string());
+ }
+
+ if let Some(_tcl_obj) = obj.downcast_ref::() {
+ // Assume that the Tcl object has a method to retrieve a string.
+ // return tcl_obj.
+ todo!();
+ }
+
+ // Construct an error message using the type name (truncated to 50 characters).
+ Err(vm.new_type_error(format!(
+ "must be str, bytes or Tcl_Obj, not {:.50}",
+ obj.obj_type().str(vm)?.as_str()
+ )))
+ }
+
+ // TODO: DISALLOW_INSTANTIATION
+ #[pyclass(with(Constructor))]
impl TkApp {
- #[pymethod]
- fn getvar(&self, name: &str) -> PyResult {
- let tk = self.tk.read().unwrap();
- Ok(tk.getvar(name).unwrap())
+ fn from_bool(&self, obj: *mut tk_sys::Tcl_Obj) -> bool {
+ let mut res = -1;
+ unsafe {
+ if tk_sys::Tcl_GetBooleanFromObj(self.interpreter, obj, &mut res)
+ != tk_sys::TCL_OK as i32
+ {
+ panic!("Tcl_GetBooleanFromObj failed");
+ }
+ }
+ assert!(res == 0 || res == 1);
+ res != 0
+ }
+
+ fn from_object(
+ &self,
+ obj: *mut tk_sys::Tcl_Obj,
+ vm: &VirtualMachine,
+ ) -> PyResult {
+ let type_ptr = unsafe { (*obj).typePtr };
+ if type_ptr == ptr::null() {
+ return self.unicode_from_object(obj, vm);
+ } else if type_ptr == self.old_boolean_type || type_ptr == self.boolean_type {
+ return Ok(vm.ctx.new_bool(self.from_bool(obj)).into());
+ } else if type_ptr == self.string_type
+ || type_ptr == self.utf32_string_type
+ || type_ptr == self.pixel_type
+ {
+ return self.unicode_from_object(obj, vm);
+ }
+ // TODO: handle other types
+
+ return Ok(TclObject { value: obj }.into_pyobject(vm));
+ }
+
+ fn unicode_from_string(
+ s: *mut ffi::c_char,
+ size: usize,
+ vm: &VirtualMachine,
+ ) -> PyResult {
+ // terribly unsafe
+ let s = unsafe { std::slice::from_raw_parts(s, size) }
+ .to_vec()
+ .into_iter()
+ .map(|c| c as u8)
+ .collect::>();
+ let s = String::from_utf8(s).unwrap();
+ Ok(PyObjectRef::from(vm.ctx.new_str(s)))
+ }
+
+ fn unicode_from_object(
+ &self,
+ obj: *mut tk_sys::Tcl_Obj,
+ vm: &VirtualMachine,
+ ) -> PyResult {
+ let type_ptr = unsafe { (*obj).typePtr };
+ if type_ptr != ptr::null()
+ && self.interpreter != ptr::null_mut()
+ && (type_ptr == self.string_type || type_ptr == self.utf32_string_type)
+ {
+ let len = ptr::null_mut();
+ let data = unsafe { tk_sys::Tcl_GetUnicodeFromObj(obj, len) };
+ return if size_of::() == 2 {
+ let v = unsafe { std::slice::from_raw_parts(data as *const u16, len as usize) };
+ let s = String::from_utf16(v).unwrap();
+ Ok(PyObjectRef::from(vm.ctx.new_str(s)))
+ } else {
+ let v = unsafe { std::slice::from_raw_parts(data as *const u32, len as usize) };
+ let s = widestring::U32String::from_vec(v).to_string_lossy();
+ Ok(PyObjectRef::from(vm.ctx.new_str(s)))
+ };
+ }
+ let len = ptr::null_mut();
+ let s = unsafe { tk_sys::Tcl_GetStringFromObj(obj, len) };
+ Self::unicode_from_string(s, len as _, vm)
}
#[pymethod]
- fn createcommand(&self, name: String, callback: PyObjectRef) {}
+ fn getvar(&self, arg: PyObjectRef, vm: &VirtualMachine) -> PyResult {
+ // TODO: technically not thread safe
+ let name = varname_converter(arg, vm)?;
+
+ let res = unsafe {
+ tk_sys::Tcl_GetVar2Ex(
+ self.interpreter,
+ ptr::null(),
+ name.as_ptr() as _,
+ tk_sys::TCL_LEAVE_ERR_MSG as _,
+ )
+ };
+ if res == ptr::null_mut() {
+ todo!();
+ }
+ let res = if self.want_objects {
+ self.from_object(res, vm)
+ } else {
+ self.unicode_from_object(res, vm)
+ }?;
+ Ok(res)
+ }
+
+ #[pymethod]
+ fn getint(&self, arg: PyObjectRef, vm: &VirtualMachine) -> PyResult {
+ if let Some(int) = arg.downcast_ref::() {
+ return Ok(PyObjectRef::from(vm.ctx.new_int(int.as_bigint().clone())));
+ }
+
+ if let Some(obj) = arg.downcast_ref::() {
+ let value = obj.value;
+ unsafe { tk_sys::Tcl_IncrRefCount(value) };
+ } else {
+ todo!();
+ }
+ todo!();
+ }
+ // TODO: Fix arguments
+ #[pymethod]
+ fn mainloop(&self, threshold: Option) -> PyResult<()> {
+ let threshold = threshold.unwrap_or(0);
+ todo!();
+ }
+
+ #[pymethod]
+ fn quit(&self) {
+ QUIT_MAIN_LOOP.store(true, Ordering::Relaxed);
+ }
}
+
+ #[pyfunction]
+ fn create(args: TkAppConstructorArgs, vm: &VirtualMachine) -> PyResult {
+ unsafe {
+ let interp = tk_sys::Tcl_CreateInterp();
+ let want_objects = args.wantobjects != 0;
+ let threaded = {
+ let part1 = String::from("tcl_platform");
+ let part2 = String::from("threaded");
+ let part1_ptr = part1.as_ptr();
+ let part2_ptr = part2.as_ptr();
+ tk_sys::Tcl_GetVar2Ex(
+ interp,
+ part1_ptr as _,
+ part2_ptr as _,
+ tk_sys::TCL_GLOBAL_ONLY as ffi::c_int,
+ )
+ } != ptr::null_mut();
+ let thread_id = tk_sys::Tcl_GetCurrentThread();
+ let dispatching = false;
+ let trace = None;
+ // TODO: Handle threaded build
+ let bool_str = String::from("oldBoolean");
+ let old_boolean_type = tk_sys::Tcl_GetObjType(bool_str.as_ptr() as _);
+ let (boolean_type, byte_array_type) = {
+ let true_str = String::from("true");
+ let mut value = *tk_sys::Tcl_NewStringObj(true_str.as_ptr() as _, -1);
+ let mut bool_value = 0;
+ tk_sys::Tcl_GetBooleanFromObj(interp, &mut value, &mut bool_value);
+ let boolean_type = value.typePtr;
+ tk_sys::Tcl_DecrRefCount(&mut value);
+
+ let mut value =
+ *tk_sys::Tcl_NewByteArrayObj(&bool_value as *const i32 as *const u8, 1);
+ let byte_array_type = value.typePtr;
+ tk_sys::Tcl_DecrRefCount(&mut value);
+ (boolean_type, byte_array_type)
+ };
+ let double_str = String::from("double");
+ let double_type = tk_sys::Tcl_GetObjType(double_str.as_ptr() as _);
+ let int_str = String::from("int");
+ let int_type = tk_sys::Tcl_GetObjType(int_str.as_ptr() as _);
+ let int_type = if int_type == ptr::null() {
+ let mut value = *tk_sys::Tcl_NewIntObj(0);
+ let res = value.typePtr;
+ tk_sys::Tcl_DecrRefCount(&mut value);
+ res
+ } else {
+ int_type
+ };
+ let wide_int_str = String::from("wideInt");
+ let wide_int_type = tk_sys::Tcl_GetObjType(wide_int_str.as_ptr() as _);
+ let bignum_str = String::from("bignum");
+ let bignum_type = tk_sys::Tcl_GetObjType(bignum_str.as_ptr() as _);
+ let list_str = String::from("list");
+ let list_type = tk_sys::Tcl_GetObjType(list_str.as_ptr() as _);
+ let string_str = String::from("string");
+ let string_type = tk_sys::Tcl_GetObjType(string_str.as_ptr() as _);
+ let utf32_str = String::from("utf32");
+ let utf32_string_type = tk_sys::Tcl_GetObjType(utf32_str.as_ptr() as _);
+ let pixel_str = String::from("pixel");
+ let pixel_type = tk_sys::Tcl_GetObjType(pixel_str.as_ptr() as _);
+
+ let exit_str = String::from("exit");
+ tk_sys::Tcl_DeleteCommand(interp, exit_str.as_ptr() as _);
+
+ if let Some(name) = args.screen_name {
+ tk_sys::Tcl_SetVar2(
+ interp,
+ "env".as_ptr() as _,
+ "DISPLAY".as_ptr() as _,
+ name.as_ptr() as _,
+ tk_sys::TCL_GLOBAL_ONLY as i32,
+ );
+ }
+
+ if args.interactive != 0 {
+ tk_sys::Tcl_SetVar(
+ interp,
+ "tcl_interactive".as_ptr() as _,
+ "1".as_ptr() as _,
+ tk_sys::TCL_GLOBAL_ONLY as i32,
+ );
+ } else {
+ tk_sys::Tcl_SetVar(
+ interp,
+ "tcl_interactive".as_ptr() as _,
+ "0".as_ptr() as _,
+ tk_sys::TCL_GLOBAL_ONLY as i32,
+ );
+ }
+
+ let argv0 = args.class_name.clone().to_lowercase();
+ tk_sys::Tcl_SetVar(
+ interp,
+ "argv0".as_ptr() as _,
+ argv0.as_ptr() as _,
+ tk_sys::TCL_GLOBAL_ONLY as i32,
+ );
+
+ if !args.want_tk {
+ tk_sys::Tcl_SetVar(
+ interp,
+ "_tkinter_skip_tk_init".as_ptr() as _,
+ "1".as_ptr() as _,
+ tk_sys::TCL_GLOBAL_ONLY as i32,
+ );
+ }
+
+ if args.sync != 0 || args.use_.is_some() {
+ let mut argv = String::with_capacity(4);
+ if args.sync != 0 {
+ argv.push_str("-sync");
+ }
+ if args.use_.is_some() {
+ if args.sync != 0 {
+ argv.push(' ');
+ }
+ argv.push_str("-use ");
+ argv.push_str(&args.use_.unwrap());
+ }
+ argv.push_str("\0");
+ let argv_ptr = argv.as_ptr() as *mut *mut i8;
+ tk_sys::Tcl_SetVar(
+ interp,
+ "argv".as_ptr() as _,
+ argv_ptr as *const i8,
+ tk_sys::TCL_GLOBAL_ONLY as i32,
+ );
+ }
+
+ #[cfg(windows)]
+ {
+ let ret = std::env::var("TCL_LIBRARY");
+ if ret.is_err() {
+ let loc = _get_tcl_lib_path();
+ std::env::set_var("TCL_LIBRARY", loc);
+ }
+ }
+
+ // Bindgen cannot handle Tcl_AppInit
+ if tk_sys::Tcl_Init(interp) != tk_sys::TCL_OK as ffi::c_int {
+ todo!("Tcl_Init failed");
+ }
+
+ Ok(TkApp {
+ interpreter: interp,
+ want_objects,
+ threaded,
+ thread_id: Some(thread_id),
+ dispatching,
+ trace,
+ old_boolean_type,
+ boolean_type,
+ byte_array_type,
+ double_type,
+ int_type,
+ wide_int_type,
+ bignum_type,
+ list_type,
+ string_type,
+ utf32_string_type,
+ pixel_type,
+ }
+ .into_pyobject(vm))
+ }
+ }
+
+ #[pyattr]
+ const READABLE: i32 = tk_sys::TCL_READABLE as i32;
+ #[pyattr]
+ const WRITABLE: i32 = tk_sys::TCL_WRITABLE as i32;
+ #[pyattr]
+ const EXCEPTION: i32 = tk_sys::TCL_EXCEPTION as i32;
+
+ #[pyattr]
+ const TIMER_EVENTS: i32 = tk_sys::TCL_TIMER_EVENTS as i32;
+ #[pyattr]
+ const IDLE_EVENTS: i32 = tk_sys::TCL_IDLE_EVENTS as i32;
+ #[pyattr]
+ const DONT_WAIT: i32 = tk_sys::TCL_DONT_WAIT as i32;
}