diff --git a/Cargo.lock b/Cargo.lock index bc1bb9d48..24da500a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,32 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli 0.28.1", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "1.0.1" @@ -17,6 +43,12 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0224938f92e7aef515fac2ff2d18bd1115c1394ddf4a092e0c87e8be9499ee5" +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + [[package]] name = "ascii" version = "1.1.0" @@ -52,6 +84,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.21.2" @@ -123,11 +170,45 @@ dependencies = [ "wyz", ] +[[package]] +name = "bumpalo" +version = "3.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" -version = "1.2.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "candy_backend_inkwell" @@ -296,6 +377,7 @@ dependencies = [ "tracing-subscriber", "unicode-segmentation", "walkdir", + "wasmer", ] [[package]] @@ -311,11 +393,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.74" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -417,14 +500,135 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] -name = "crossbeam-utils" -version = "0.8.12" +name = "corosensei" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" dependencies = [ + "autocfg", "cfg-if", + "libc", + "scopeguard", + "windows-sys 0.33.0", ] +[[package]] +name = "cranelift-bforest" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc" +dependencies = [ + "arrayvec", + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-egraph", + "cranelift-entity", + "cranelift-isle", + "gimli 0.26.2", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7" + +[[package]] +name = "cranelift-egraph" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73" +dependencies = [ + "cranelift-entity", + "fxhash", + "hashbrown 0.12.3", + "indexmap 1.9.1", + "log", + "smallvec", +] + +[[package]] +name = "cranelift-entity" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c" + +[[package]] +name = "cranelift-frontend" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb" + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + [[package]] name = "dap" version = "0.2.0-alpha1" @@ -441,9 +645,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ "darling_core", "darling_macro", @@ -451,26 +655,26 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.48", ] [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 1.0.107", + "syn 2.0.48", ] [[package]] @@ -480,12 +684,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.12.3", "lock_api", "once_cell", "parking_lot_core 0.9.4", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -546,6 +761,26 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +[[package]] +name = "enum-iterator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + [[package]] name = "enum_dispatch" version = "0.3.11" @@ -560,25 +795,31 @@ dependencies = [ [[package]] name = "enumset" -version = "1.0.12" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753" +checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0" +checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.48", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" version = "0.3.8" @@ -600,6 +841,12 @@ dependencies = [ "syn 1.0.107", ] +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + [[package]] name = "fnv" version = "1.0.7" @@ -698,6 +945,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "getrandom" version = "0.2.10" @@ -709,6 +965,23 @@ dependencies = [ "wasi", ] +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.1", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + [[package]] name = "glob" version = "0.3.1" @@ -720,6 +993,15 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -855,7 +1137,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", ] [[package]] @@ -960,6 +1252,15 @@ dependencies = [ "libc", ] +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -972,6 +1273,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + [[package]] name = "libc" version = "0.2.153" @@ -1062,18 +1369,63 @@ dependencies = [ "url", ] +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + [[package]] name = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.11" @@ -1086,6 +1438,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + [[package]] name = "nom" version = "7.1.3" @@ -1147,6 +1505,15 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.17.1" @@ -1327,6 +1694,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + [[package]] name = "quote" version = "1.0.35" @@ -1381,6 +1768,26 @@ dependencies = [ "rand_core", ] +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -1401,6 +1808,18 @@ dependencies = [ "thiserror", ] +[[package]] +name = "regalloc2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + [[package]] name = "regex" version = "1.9.1" @@ -1430,6 +1849,63 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +[[package]] +name = "region" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" +dependencies = [ + "bitflags 1.3.2", + "libc", + "mach", + "winapi", +] + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rkyv" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "indexmap 1.9.1", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -1491,7 +1967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b84d9f96071f3f3be0dc818eae3327625d8ebc95b58da37d6850724f31d3403" dependencies = [ "crossbeam-utils", - "indexmap", + "indexmap 1.9.1", "lock_api", "log", "oorandom", @@ -1528,6 +2004,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "self_cell" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba" + [[package]] name = "semver" version = "1.0.16" @@ -1543,6 +2031,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_derive" version = "1.0.152" @@ -1585,6 +2084,16 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared-buffer" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16" +dependencies = [ + "bytes", + "memmap2 0.6.2", +] + [[package]] name = "shellexpand" version = "3.1.0" @@ -1609,6 +2118,12 @@ dependencies = [ "libc", ] +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "similar" version = "2.4.0" @@ -1634,6 +2149,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + [[package]] name = "smallvec" version = "1.10.0" @@ -1650,6 +2171,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.10.0" @@ -1706,6 +2233,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + [[package]] name = "termcolor" version = "1.2.0" @@ -1997,6 +2530,12 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" + [[package]] name = "valuable" version = "0.1.0" @@ -2025,6 +2564,232 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-encoder" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmer" +version = "4.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c15724dc25d1ee57962334aea8e41ade2675e5ea2ac6b8d42da6051b0face66" +dependencies = [ + "bytes", + "cfg-if", + "derivative", + "indexmap 1.9.1", + "js-sys", + "more-asserts", + "rustc-demangle", + "serde", + "serde-wasm-bindgen", + "shared-buffer", + "target-lexicon", + "thiserror", + "tracing", + "wasm-bindgen", + "wasmer-compiler", + "wasmer-compiler-cranelift", + "wasmer-derive", + "wasmer-types", + "wasmer-vm", + "wat", + "winapi", +] + +[[package]] +name = "wasmer-compiler" +version = "4.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a7f3b3a96f8d844c25e2c032af9572306dd63fa93dc17bcca4c5458ac569bd" +dependencies = [ + "backtrace", + "bytes", + "cfg-if", + "enum-iterator", + "enumset", + "lazy_static", + "leb128", + "memmap2 0.5.10", + "more-asserts", + "region", + "rkyv", + "self_cell", + "shared-buffer", + "smallvec", + "thiserror", + "wasmer-types", + "wasmer-vm", + "wasmparser", + "winapi", +] + +[[package]] +name = "wasmer-compiler-cranelift" +version = "4.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102e2c5bacac69495c4025767e2fa26797ffb27f242dccb7cf57d9cefd944386" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "gimli 0.26.2", + "more-asserts", + "rayon", + "smallvec", + "target-lexicon", + "tracing", + "wasmer-compiler", + "wasmer-types", +] + +[[package]] +name = "wasmer-derive" +version = "4.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea737fa08f95d6abc4459f42a70a9833e8974b814e74971d77ef473814f4d4c" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "wasmer-types" +version = "4.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0689110e291b0f07fc665f2824e5ff81df120848e8a9acfbf1a9bf7990773f9" +dependencies = [ + "bytecheck", + "enum-iterator", + "enumset", + "indexmap 1.9.1", + "more-asserts", + "rkyv", + "target-lexicon", + "thiserror", +] + +[[package]] +name = "wasmer-vm" +version = "4.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd41f822a1ac4242d478754e8ceba2806a00ea5072803622e1fe91e8e28b2a1" +dependencies = [ + "backtrace", + "cc", + "cfg-if", + "corosensei", + "crossbeam-queue", + "dashmap", + "derivative", + "enum-iterator", + "fnv", + "indexmap 1.9.1", + "lazy_static", + "libc", + "mach", + "memoffset", + "more-asserts", + "region", + "scopeguard", + "thiserror", + "wasmer-types", + "winapi", +] + +[[package]] +name = "wasmparser" +version = "0.121.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" +dependencies = [ + "bitflags 2.4.2", + "indexmap 2.2.6", + "semver", +] + +[[package]] +name = "wast" +version = "64.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" +dependencies = [ + "wast", +] + [[package]] name = "which" version = "4.4.2" @@ -2068,6 +2833,19 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" +dependencies = [ + "windows_aarch64_msvc 0.33.0", + "windows_i686_gnu 0.33.0", + "windows_i686_msvc 0.33.0", + "windows_x86_64_gnu 0.33.0", + "windows_x86_64_msvc 0.33.0", +] + [[package]] name = "windows-sys" version = "0.42.0" @@ -2173,6 +2951,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +[[package]] +name = "windows_aarch64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -2191,6 +2975,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +[[package]] +name = "windows_i686_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -2209,6 +2999,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +[[package]] +name = "windows_i686_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -2227,6 +3023,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +[[package]] +name = "windows_x86_64_gnu" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -2263,6 +3065,12 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +[[package]] +name = "windows_x86_64_msvc" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" diff --git a/compiler/vm/Cargo.toml b/compiler/vm/Cargo.toml index 2c7de6e5a..1fccda217 100644 --- a/compiler/vm/Cargo.toml +++ b/compiler/vm/Cargo.toml @@ -29,6 +29,7 @@ tiny_http = "0.12.0" tracing = { version = "0.1", features = ["release_max_level_debug"] } unicode-segmentation = "1.9.0" walkdir = "2.3.3" +wasmer = "4.2.6" [dev-dependencies] iai-callgrind = "0.10.2" diff --git a/compiler/vm/src/environment.rs b/compiler/vm/src/environment.rs index 4a38a1beb..8f2415ed7 100644 --- a/compiler/vm/src/environment.rs +++ b/compiler/vm/src/environment.rs @@ -19,6 +19,7 @@ use std::{ }; use tiny_http::{Request, Response, Server}; use tracing::info; +use wasmer::{Function, Instance, Module, Store, Type, Value}; pub trait Environment { fn handle, T: Tracer>( @@ -79,6 +80,10 @@ pub struct DefaultEnvironment { stdin_handle: Handle, stdout_handle: Handle, + // WASM + wasm_compile_handle: Handle, + wasm_store: Store, + dynamic_handles: FxHashMap, } #[derive(Debug)] @@ -88,6 +93,8 @@ enum DynamicHandle { HttpServerGetNextRequest(HttpServerIndex), HttpServerSendResponse(HttpServerIndex, HttpRequestId), HttpServerClose(HttpServerIndex), + WasmInstantiateModule(Module), + WasmCallFunction(Function), } struct HttpServerState { server: Server, @@ -135,6 +142,13 @@ impl DefaultEnvironment { let stdin_handle = Handle::new(heap, 0); let stdout_handle = Handle::new(heap, 1); + let wasm_compile_handle = Handle::new(heap, 1); + let wasm_object = Struct::create_with_symbol_keys( + heap, + true, + [(heap.default_symbols().compile, **wasm_compile_handle)], + ); + let environment_object = Struct::create_with_symbol_keys( heap, true, @@ -152,6 +166,8 @@ impl DefaultEnvironment { ), (heap.default_symbols().stdin, **stdin_handle), (heap.default_symbols().stdout, **stdout_handle), + (heap.default_symbols().wasm, wasm_object.into()), + (heap.default_symbols().stdout, **stdout_handle), ], ); let environment = Self { @@ -164,6 +180,8 @@ impl DefaultEnvironment { get_random_bytes_handle, stdin_handle, stdout_handle, + wasm_compile_handle, + wasm_store: Store::default(), dynamic_handles: FxHashMap::default(), }; (environment_object, environment) @@ -191,13 +209,17 @@ impl Environment for DefaultEnvironment { Self::stdin(heap, &call.arguments) } else if call.handle == self.stdout_handle { Self::stdout(heap, &call.arguments) + } else if call.handle == self.wasm_compile_handle { + Self::wasm_compile(self, heap, &call.arguments) } else { - let dynamic_handle = self.dynamic_handles.get(&call.handle).unwrap_or_else(|| { - panic!( - "A handle was called that doesn't exist: {handle:?}", - handle = call.handle, - ) - }); + let dynamic_handle = { + self.dynamic_handles.get(&call.handle).unwrap_or_else(|| { + panic!( + "A handle was called that doesn't exist: {handle:?}", + handle = call.handle, + ) + }) + }; match dynamic_handle { DynamicHandle::File(_) => { // TODO: Panic @@ -218,6 +240,12 @@ impl Environment for DefaultEnvironment { DynamicHandle::HttpServerClose(server_index) => { self.http_server_close(heap, *server_index, &call.arguments) } + DynamicHandle::WasmInstantiateModule(module) => { + self.wasm_instantiate_module(heap, &module.clone(), &call.arguments) + } + DynamicHandle::WasmCallFunction(func) => { + self.wasm_call_function(heap, &func.clone(), &call.arguments) + } } }; call.complete(heap, result) @@ -586,6 +614,154 @@ impl DefaultEnvironment { Tag::create_nothing(heap).into() } + // WASM + + fn wasm_compile(&mut self, heap: &mut Heap, arguments: &[InlineObject]) -> InlineObject { + let [wat] = arguments else { unreachable!() }; + let Data::Text(wat) = (*wat).into() else { + // TODO: Panic + let message = Text::create( + heap, + true, + "Handle `wasm.compile` was called with a non-text.", + ); + return Tag::create_result(heap, true, Err(message.into())).into(); + }; + + let module = match Module::new(&self.wasm_store, wat.get()) { + Ok(module) => module, + Err(error) => { + let message = Text::create(heap, true, &error.to_string()); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + }; + + let instantiate_handle = + self.create_dynamic_handle(heap, DynamicHandle::WasmInstantiateModule(module), 1); + let module = Struct::create_with_symbol_keys( + heap, + true, + [(heap.default_symbols().instantiate, **instantiate_handle)], + ); + Tag::create_result(heap, true, Ok(module.into())).into() + } + fn wasm_instantiate_module( + &mut self, + heap: &mut Heap, + module: &Module, + arguments: &[InlineObject], + ) -> InlineObject { + let [imports] = arguments else { unreachable!() }; + let Data::Struct(imports) = (*imports).into() else { + // TODO: Panic + let message = Text::create( + heap, + true, + "Handle `module.instantiate` was called with a non-struct.", + ); + return Tag::create_result(heap, true, Err(message.into())).into(); + }; + if imports.len() > 0 { + let message = Text::create(heap, true, "Non-empty imports are not supported yet."); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + + let import_object = wasmer::imports! {}; + let instance = match Instance::new(&mut self.wasm_store, module, &import_object) { + Ok(instance) => instance, + Err(error) => { + let message = Text::create(heap, true, &error.to_string()); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + }; + + let fields: Vec<(InlineObject, InlineObject)> = match instance + .exports + .iter() + .map(|(name, value)| match value { + wasmer::Extern::Function(func) => Ok(( + Text::create(heap, true, name).into(), + self.create_dynamic_handle( + heap, + DynamicHandle::WasmCallFunction(func.clone()), + func.param_arity(&self.wasm_store), + ) + .into(), + )), + _ => Err("Non-function exports are not supported yet."), + }) + .collect() + { + Ok(fields) => fields, + Err(error_message) => { + // TODO: Panic + let message = Text::create(heap, true, error_message); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + }; + let module = Struct::create(heap, true, &FxHashMap::from_iter(fields)); + Tag::create_result(heap, true, Ok(module.into())).into() + } + fn wasm_call_function( + &mut self, + heap: &mut Heap, + func: &Function, + arguments: &[InlineObject], + ) -> InlineObject { + let expected_parameter_types = func.ty(&self.wasm_store); + if arguments.len() != expected_parameter_types.params().len() { + unreachable!() + }; + + let params: Vec<_> = match arguments + .iter() + .enumerate() + .map(|(index, argument)| match (*argument).into() { + Data::Int(i) => match *expected_parameter_types.params().get(index).unwrap() { + Type::I32 => i.try_get::().map(Value::from), + Type::I64 => i.try_get::().map(Value::from), + _ => return Err("Passed integer to non-integer parameter."), + } + .ok_or("Integer doesn't fit into parameter type"), + _ => Err("Non-integer parameters are not supported yet."), + }) + .collect() + { + Ok(params) => params, + Err(error_message) => { + // TODO: Panic + let message = Text::create(heap, true, error_message); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + }; + let results = match func.call(&mut self.wasm_store, params.as_slice()) { + Ok(result) => result, + Err(error) => { + let message = Text::create(heap, true, &error.to_string()); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + }; + + let results: Vec<_> = match results + .iter() + .map(|result| match result { + Value::I32(i) => Ok(Int::create(heap, true, *i).into()), + Value::I64(i) => Ok(Int::create(heap, true, *i).into()), + _ => Err("Non-integer results are not supported yet."), + }) + .collect() + { + Ok(params) => params, + Err(error_message) => { + // TODO: Panic + let message = Text::create(heap, true, error_message); + return Tag::create_result(heap, true, Err(message.into())).into(); + } + }; + let results = List::create(heap, true, results.as_slice()); + Tag::create_result(heap, true, Ok(results.into())).into() + } + fn create_dynamic_handle( &mut self, heap: &mut Heap, diff --git a/compiler/vm/src/heap/mod.rs b/compiler/vm/src/heap/mod.rs index c5235c1ff..6580bfafd 100644 --- a/compiler/vm/src/heap/mod.rs +++ b/compiler/vm/src/heap/mod.rs @@ -233,6 +233,7 @@ pub struct DefaultSymbols { pub arguments: Text, pub builtin: Text, pub close: Text, + pub compile: Text, pub equal: Text, pub error: Text, pub false_: Text, @@ -243,6 +244,7 @@ pub struct DefaultSymbols { pub get_next_request: Text, pub greater: Text, pub http_server: Text, + pub instantiate: Text, pub int: Text, pub less: Text, pub list: Text, @@ -261,6 +263,7 @@ pub struct DefaultSymbols { pub tag: Text, pub text: Text, pub true_: Text, + pub wasm: Text, } impl DefaultSymbols { pub fn new(heap: &mut Heap) -> Self { @@ -268,6 +271,7 @@ impl DefaultSymbols { arguments: Text::create(heap, false, "Arguments"), builtin: Text::create(heap, false, "Builtin"), close: Text::create(heap, false, "Close"), + compile: Text::create(heap, false, "Compile"), equal: Text::create(heap, false, "Equal"), error: Text::create(heap, false, "Error"), false_: Text::create(heap, false, "False"), @@ -279,6 +283,7 @@ impl DefaultSymbols { greater: Text::create(heap, false, "Greater"), http_server: Text::create(heap, false, "HttpServer"), int: Text::create(heap, false, "Int"), + instantiate: Text::create(heap, false, "Instantiate"), less: Text::create(heap, false, "Less"), list: Text::create(heap, false, "List"), not_an_integer: Text::create(heap, false, "NotAnInteger"), @@ -296,6 +301,7 @@ impl DefaultSymbols { tag: Text::create(heap, false, "Tag"), text: Text::create(heap, false, "Text"), true_: Text::create(heap, false, "True"), + wasm: Text::create(heap, false, "Wasm"), } } fn clone_to_heap_with_mapping( @@ -316,6 +322,7 @@ impl DefaultSymbols { arguments: clone_to_heap(heap, address_map, self.arguments), builtin: clone_to_heap(heap, address_map, self.builtin), close: clone_to_heap(heap, address_map, self.close), + compile: clone_to_heap(heap, address_map, self.compile), equal: clone_to_heap(heap, address_map, self.equal), error: clone_to_heap(heap, address_map, self.error), false_: clone_to_heap(heap, address_map, self.false_), @@ -327,6 +334,7 @@ impl DefaultSymbols { greater: clone_to_heap(heap, address_map, self.greater), http_server: clone_to_heap(heap, address_map, self.http_server), int: clone_to_heap(heap, address_map, self.int), + instantiate: clone_to_heap(heap, address_map, self.instantiate), less: clone_to_heap(heap, address_map, self.less), list: clone_to_heap(heap, address_map, self.list), not_an_integer: clone_to_heap(heap, address_map, self.not_an_integer), @@ -344,6 +352,7 @@ impl DefaultSymbols { tag: clone_to_heap(heap, address_map, self.tag), text: clone_to_heap(heap, address_map, self.text), true_: clone_to_heap(heap, address_map, self.true_), + wasm: clone_to_heap(heap, address_map, self.wasm), } } diff --git a/packages/Wasm/_.candy b/packages/Wasm/_.candy new file mode 100644 index 000000000..e69de29bb diff --git a/packages/Wasm/_package.candy b/packages/Wasm/_package.candy new file mode 100644 index 000000000..e69de29bb diff --git a/packages/Wasm/example.candy b/packages/Wasm/example.candy new file mode 100644 index 000000000..44c107f30 --- /dev/null +++ b/packages/Wasm/example.candy @@ -0,0 +1,22 @@ +[print] = use "Builtins" +[struct, result] = use "Core" + +main := { environment -> + wat = '" + (module + (type $t0 (func (param i32) (result i32))) + (func $add_one (export "add_one") (type $t0) (param $p0 i32) (result i32) + get_local $p0 + i32.const 1 + i32.add)) + "' + + module = wat | environment.wasm.compile | result.unwrap + instance = [] | module.instantiate | result.unwrap + add_one = instance | struct.get "add_one" | result.unwrap + + num = 42 + res = add_one num + (res,) = res | result.unwrap + print "{num} + 1 = {res}" +}