6 Commits

10 changed files with 202 additions and 161 deletions

217
Cargo.lock generated
View File

@@ -2,22 +2,13 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "addr2line"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
dependencies = [
"gimli 0.25.0",
]
[[package]]
name = "addr2line"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
dependencies = [
"gimli 0.26.1",
"gimli",
]
[[package]]
@@ -68,6 +59,17 @@ dependencies = [
"yansi",
]
[[package]]
name = "async-trait"
version = "0.1.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "atty"
version = "0.2.14"
@@ -91,12 +93,12 @@ version = "0.3.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6"
dependencies = [
"addr2line 0.17.0",
"addr2line",
"cc",
"cfg-if 1.0.0",
"libc",
"miniz_oxide",
"object 0.27.1",
"object",
"rustc-demangle",
]
@@ -332,24 +334,24 @@ dependencies = [
[[package]]
name = "cranelift-bforest"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15013642ddda44eebcf61365b2052a23fd8b7314f90ba44aa059ec02643c5139"
checksum = "32f027f29ace03752bb83c112eb4f53744bc4baadf19955e67fcde1d71d2f39d"
dependencies = [
"cranelift-entity",
]
[[package]]
name = "cranelift-codegen"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "298f2a7ed5fdcb062d8e78b7496b0f4b95265d20245f2d0ca88f846dd192a3a3"
checksum = "6c10af69cbf4e228c11bdc26d8f9d5276773909152a769649a160571b282f92f"
dependencies = [
"cranelift-bforest",
"cranelift-codegen-meta",
"cranelift-codegen-shared",
"cranelift-entity",
"gimli 0.25.0",
"gimli",
"log",
"regalloc",
"smallvec",
@@ -358,34 +360,33 @@ dependencies = [
[[package]]
name = "cranelift-codegen-meta"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cf504261ac62dfaf4ffb3f41d88fd885e81aba947c1241275043885bc5f0bac"
checksum = "290ac14d2cef43cbf1b53ad5c1b34216c9e32e00fa9b6ac57b5e5a2064369e02"
dependencies = [
"cranelift-codegen-shared",
"cranelift-entity",
]
[[package]]
name = "cranelift-codegen-shared"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cd2a72db4301dbe7e5a4499035eedc1e82720009fb60603e20504d8691fa9cd"
checksum = "beb9142d134a03d01e3995e6d8dd3aecf16312261d0cb0c5dcd73d5be2528c1c"
[[package]]
name = "cranelift-entity"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48868faa07cacf948dc4a1773648813c0e453ff9467e800ff10f6a78c021b546"
checksum = "1268a50b7cbbfee8514d417fc031cedd9965b15fa9e5ed1d4bc16de86f76765e"
dependencies = [
"serde",
]
[[package]]
name = "cranelift-frontend"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "351c9d13b4ecd1a536215ec2fd1c3ee9ee8bc31af172abf1e45ed0adb7a931df"
checksum = "97ac0d440469e19ab12183e31a9e41b4efd8a4ca5fbde2a10c78c7bb857cc2a4"
dependencies = [
"cranelift-codegen",
"log",
@@ -395,9 +396,9 @@ dependencies = [
[[package]]
name = "cranelift-native"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6df8b556663d7611b137b24db7f6c8d9a8a27d7f29c7ea7835795152c94c1b75"
checksum = "794cd1a5694a01c68957f9cfdc5ac092cf8b4e9c2d1697c4a5100f90103e9e9e"
dependencies = [
"cranelift-codegen",
"libc",
@@ -406,9 +407,9 @@ dependencies = [
[[package]]
name = "cranelift-wasm"
version = "0.77.0"
version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a69816d90db694fa79aa39b89dda7208a4ac74b6f2b8f3c4da26ee1c8bdfc5e"
checksum = "f2ddd4ca6963f6e94d00e8935986411953581ac893587ab1f0eb4f0b5a40ae65"
dependencies = [
"cranelift-codegen",
"cranelift-entity",
@@ -416,7 +417,7 @@ dependencies = [
"itertools",
"log",
"smallvec",
"wasmparser 0.80.2",
"wasmparser 0.82.0",
"wasmtime-types",
]
@@ -498,7 +499,7 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
[[package]]
name = "curlywas"
version = "0.1.0"
source = "git+https://github.com/exoticorn/curlywas.git?rev=89638565#896385654ab2c089200920b6dea4abec641c88d6"
source = "git+https://github.com/exoticorn/curlywas.git?rev=557c3a84#557c3a842675a1ebd77e84021f9f5236d4fa5648"
dependencies = [
"anyhow",
"ariadne",
@@ -810,21 +811,15 @@ dependencies = [
[[package]]
name = "gimli"
version = "0.25.0"
version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
dependencies = [
"fallible-iterator",
"indexmap",
"stable_deref_trait",
]
[[package]]
name = "gimli"
version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
[[package]]
name = "glob"
version = "0.3.0"
@@ -1035,6 +1030,12 @@ dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "io-lifetimes"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6"
[[package]]
name = "iovec"
version = "0.1.4"
@@ -1141,6 +1142,12 @@ dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "linux-raw-sys"
version = "0.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7"
[[package]]
name = "log"
version = "0.4.14"
@@ -1456,9 +1463,9 @@ dependencies = [
[[package]]
name = "object"
version = "0.26.2"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2"
checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9"
dependencies = [
"crc32fast",
"indexmap",
@@ -1466,13 +1473,10 @@ dependencies = [
]
[[package]]
name = "object"
version = "0.27.1"
name = "once_cell"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9"
dependencies = [
"memchr",
]
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
[[package]]
name = "opaque-debug"
@@ -1729,9 +1733,9 @@ dependencies = [
[[package]]
name = "regalloc"
version = "0.0.31"
version = "0.0.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "571f7f397d61c4755285cd37853fe8e03271c243424a907415909379659381c5"
checksum = "62446b1d3ebf980bdc68837700af1d77b37bc430e524bf95319c6eada2a4cc02"
dependencies = [
"log",
"rustc-hash",
@@ -1788,6 +1792,20 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustix"
version = "0.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9466f25b92a648960ac1042fd3baa6b0bf285e60f754d7e5070770c813a177a"
dependencies = [
"bitflags",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys",
"winapi 0.3.9",
]
[[package]]
name = "ryu"
version = "1.0.9"
@@ -2314,6 +2332,7 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
name = "uw8"
version = "0.1.2"
dependencies = [
"ansi_term",
"anyhow",
"curlywas",
"minifb",
@@ -2521,18 +2540,18 @@ version = "0.77.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6"
[[package]]
name = "wasmparser"
version = "0.80.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "449167e2832691a1bff24cde28d2804e90e09586a448c8e76984792c44334a6b"
[[package]]
name = "wasmparser"
version = "0.81.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc"
[[package]]
name = "wasmparser"
version = "0.82.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0559cc0f1779240d6f894933498877ea94f693d84f3ee39c9a9932c6c312bd70"
[[package]]
name = "wasmparser"
version = "0.83.0"
@@ -2541,28 +2560,28 @@ checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a"
[[package]]
name = "wasmtime"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899b1e5261e3d3420860dacfb952871ace9d7ba9f953b314f67aaf9f8e2a4d89"
checksum = "4882e78d9daceeaff656d82869f298fd472ea8d8ccf96fbd310da5c1687773ac"
dependencies = [
"anyhow",
"async-trait",
"backtrace",
"bincode",
"cfg-if 1.0.0",
"cpp_demangle",
"indexmap",
"lazy_static",
"libc",
"log",
"object 0.26.2",
"object",
"once_cell",
"paste",
"psm",
"rayon",
"region",
"rustc-demangle",
"serde",
"target-lexicon",
"wasmparser 0.80.2",
"wasmparser 0.82.0",
"wasmtime-cache",
"wasmtime-cranelift",
"wasmtime-environ",
@@ -2575,18 +2594,17 @@ dependencies = [
[[package]]
name = "wasmtime-cache"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2493b81d7a9935f7af15e06beec806f256bc974a90a843685f3d61f2fc97058"
checksum = "cf5b9af2d970624455f9ea109acc60cc477afe097f86c190eb519a8b7d6646cd"
dependencies = [
"anyhow",
"base64",
"bincode",
"directories-next",
"errno",
"file-per-thread-logger",
"libc",
"log",
"rustix",
"serde",
"sha2",
"toml",
@@ -2596,9 +2614,9 @@ dependencies = [
[[package]]
name = "wasmtime-cranelift"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99706bacdf5143f7f967d417f0437cce83a724cf4518cb1a3ff40e519d793021"
checksum = "1ed6ff21d2dbfe568af483f0c508e049fc6a497c73635e2c50c9b1baf3a93ed8"
dependencies = [
"anyhow",
"cranelift-codegen",
@@ -2606,67 +2624,67 @@ dependencies = [
"cranelift-frontend",
"cranelift-native",
"cranelift-wasm",
"gimli 0.25.0",
"gimli",
"log",
"more-asserts",
"object 0.26.2",
"object",
"target-lexicon",
"thiserror",
"wasmparser 0.80.2",
"wasmparser 0.82.0",
"wasmtime-environ",
]
[[package]]
name = "wasmtime-environ"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac42cb562a2f98163857605f02581d719a410c5abe93606128c59a10e84de85b"
checksum = "860936d38df423b4291b3e31bc28d4895e2208f9daba351c2397d18a0a10e0bf"
dependencies = [
"anyhow",
"cfg-if 1.0.0",
"cranelift-entity",
"gimli 0.25.0",
"gimli",
"indexmap",
"log",
"more-asserts",
"object 0.26.2",
"object",
"serde",
"target-lexicon",
"thiserror",
"wasmparser 0.80.2",
"wasmparser 0.82.0",
"wasmtime-types",
]
[[package]]
name = "wasmtime-fiber"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8779dd78755a248512233df4f6eaa6ba075c41bea2085fec750ed2926897bf95"
checksum = "67e285306aa274d85a22753bef826226e1cc473bac0b541523f46dccf80751cc"
dependencies = [
"cc",
"libc",
"rustix",
"winapi 0.3.9",
]
[[package]]
name = "wasmtime-jit"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24f46dd757225f29a419be415ea6fb8558df9b0194f07e3a6a9c99d0e14dd534"
checksum = "e794310a0df5266c7ac73e8211a024a49e3860ac0ca2af5db8527be942ad063e"
dependencies = [
"addr2line 0.16.0",
"addr2line",
"anyhow",
"bincode",
"cfg-if 1.0.0",
"gimli 0.25.0",
"libc",
"cpp_demangle",
"gimli",
"log",
"more-asserts",
"object 0.26.2",
"object",
"region",
"rustc-demangle",
"rustix",
"serde",
"target-lexicon",
"thiserror",
"wasmparser 0.80.2",
"wasmtime-environ",
"wasmtime-runtime",
"winapi 0.3.9",
@@ -2674,9 +2692,9 @@ dependencies = [
[[package]]
name = "wasmtime-runtime"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0122215a44923f395487048cb0a1d60b5b32c73aab15cf9364b798dbaff0996f"
checksum = "90ffe5cb3db705ea43fcf37475a79891a3ada754c1cbe333540879649de943d5"
dependencies = [
"anyhow",
"backtrace",
@@ -2691,6 +2709,7 @@ dependencies = [
"more-asserts",
"rand",
"region",
"rustix",
"thiserror",
"wasmtime-environ",
"wasmtime-fiber",
@@ -2699,14 +2718,14 @@ dependencies = [
[[package]]
name = "wasmtime-types"
version = "0.30.0"
version = "0.34.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9b01caf8a204ef634ebac99700e77ba716d3ebbb68a1abbc2ceb6b16dbec9e4"
checksum = "70a5b60d70c1927c5a403f7c751de179414b6b91da75b2312c3ae78196cf9dc3"
dependencies = [
"cranelift-entity",
"serde",
"thiserror",
"wasmparser 0.80.2",
"wasmparser 0.82.0",
]
[[package]]
@@ -2871,18 +2890,18 @@ checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71"
[[package]]
name = "zstd"
version = "0.9.2+zstd.1.5.1"
version = "0.10.0+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54"
checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd"
dependencies = [
"zstd-safe",
]
[[package]]
name = "zstd-safe"
version = "4.1.3+zstd.1.5.1"
version = "4.1.4+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79"
checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee"
dependencies = [
"libc",
"zstd-sys",
@@ -2890,9 +2909,9 @@ dependencies = [
[[package]]
name = "zstd-sys"
version = "1.6.2+zstd.1.5.1"
version = "1.6.3+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f"
checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8"
dependencies = [
"cc",
"libc",

View File

@@ -11,12 +11,12 @@ native = ["wasmtime"]
browser = ["warp", "tokio", "tokio-stream", "webbrowser"]
[dependencies]
wasmtime = { version = "0.30", optional = true }
wasmtime = { version = "0.34", optional = true }
anyhow = "1"
minifb = { version = "0.20", default-features = false, features = ["x11"] }
notify = "4"
pico-args = "0.4"
curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "89638565" }
curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "557c3a84" }
wat = "1"
uw8-tool = { path = "uw8-tool" }
same-file = "1"
@@ -24,3 +24,4 @@ warp = { version = "0.3.2", optional = true }
tokio = { version = "1.17.0", features = ["sync", "rt"], optional = true }
tokio-stream = { version = "0.1.8", features = ["sync"], optional = true }
webbrowser = { version = "0.6.0", optional = true }
ansi_term = "0.12.1"

2
platform/Cargo.lock generated
View File

@@ -146,7 +146,7 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]]
name = "curlywas"
version = "0.1.0"
source = "git+https://github.com/exoticorn/curlywas.git?rev=89638565#896385654ab2c089200920b6dea4abec641c88d6"
source = "git+https://github.com/exoticorn/curlywas.git?rev=557c3a84#557c3a842675a1ebd77e84021f9f5236d4fa5648"
dependencies = [
"anyhow",
"ariadne",

View File

@@ -6,7 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="89638565" }
curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="557c3a84" }
uw8-tool = { path="../uw8-tool" }
anyhow = "1"
lodepng = "3.4"

View File

@@ -11,16 +11,16 @@ fn main() -> Result<()> {
convert_font()?;
println!("Compiling loader module");
let loader = curlywas::compile_file("src/loader.cwa", curlywas::Options::default())?;
File::create("bin/loader.wasm")?.write_all(&loader.wasm)?;
let loader = curlywas::compile_file("src/loader.cwa", curlywas::Options::default()).0?;
File::create("bin/loader.wasm")?.write_all(&loader)?;
println!("Loader (including base module): {} bytes", loader.wasm.len());
println!("Loader (including base module): {} bytes", loader.len());
println!("Compiling platform module");
let platform = curlywas::compile_file("src/platform.cwa", curlywas::Options::default())?;
let platform = curlywas::compile_file("src/platform.cwa", curlywas::Options::default()).0?;
println!("Compressing platform module");
let platform = uw8_tool::pack(
&platform.wasm,
&platform,
&uw8_tool::PackConfig::default().with_compression_level(4),
)?;
File::create("bin/platform.uw8")?.write_all(&platform)?;

View File

@@ -4,7 +4,7 @@
<section>
<h1 class="text-center heading-text">A WebAssembly based fantasy console</h1>
</section>
<a href="v0.1.1">
<a href="v0.1.2">
<img class="demonstration-gif" style="width:640px;height:480px;image-rendering:pixelated" src="img/technotunnel.png"></img>
</a>
</div>

View File

@@ -15,6 +15,10 @@ use uw8::Runtime;
fn main() -> Result<()> {
let mut args = Arguments::from_env();
// try to enable ansi support in win10 cmd shell
#[cfg(target_os="windows")]
let _ = ansi_term::enable_ansi_support();
match args.subcommand()?.as_deref() {
Some("version") => {
println!("{}", env!("CARGO_PKG_VERSION"));
@@ -101,21 +105,18 @@ fn run(mut args: Arguments) -> Result<()> {
while runtime.is_open() {
if first_run || watcher.poll_changed_file()?.is_some() {
match start_cart(&filename, &mut *runtime, &config) {
Ok(dependencies) => {
let (result, dependencies) = start_cart(&filename, &mut *runtime, &config);
if watch_mode {
for dep in dependencies {
watcher.add_file(dep)?;
}
}
}
Err(err) => {
if let Err(err) = result {
eprintln!("Load error: {}", err);
if !watch_mode {
exit(1);
}
}
}
first_run = false;
}
@@ -136,24 +137,23 @@ struct Config {
output_path: Option<PathBuf>,
}
fn load_cart(filename: &Path, config: &Config) -> Result<(Vec<u8>, Vec<PathBuf>)> {
fn load_cart(filename: &Path, config: &Config) -> (Result<Vec<u8>>, Vec<PathBuf>) {
let mut dependencies = Vec::new();
fn inner(filename: &Path, config: &Config, dependencies: &mut Vec<PathBuf>) -> Result<Vec<u8>> {
let mut cart = match SourceType::of_file(filename)? {
SourceType::Binary => {
let mut cart = vec![];
File::open(filename)?.read_to_end(&mut cart)?;
dependencies.push(filename.to_path_buf());
cart
}
SourceType::Wat => {
let cart = wat::parse_file(filename)?;
dependencies.push(filename.to_path_buf());
cart
}
SourceType::CurlyWas => {
let module = curlywas::compile_file(filename, curlywas::Options::default())?;
dependencies = module.dependencies;
module.wasm
let (module, deps) = curlywas::compile_file(filename, curlywas::Options::default());
*dependencies = deps;
module?
}
};
@@ -166,7 +166,16 @@ fn load_cart(filename: &Path, config: &Config) -> Result<(Vec<u8>, Vec<PathBuf>)
File::create(path)?.write_all(&cart)?;
}
Ok((cart, dependencies))
Ok(cart)
}
let result = inner(filename, config, &mut dependencies);
if dependencies.is_empty() {
dependencies.push(filename.to_path_buf());
}
(result, dependencies)
}
enum SourceType {
@@ -205,14 +214,22 @@ impl SourceType {
}
#[cfg(any(feature = "native", feature = "browser"))]
fn start_cart(filename: &Path, runtime: &mut dyn Runtime, config: &Config) -> Result<Vec<PathBuf>> {
let cart = load_cart(filename, config)?;
fn start_cart(
filename: &Path,
runtime: &mut dyn Runtime,
config: &Config,
) -> (Result<()>, Vec<PathBuf>) {
let (cart, dependencies) = load_cart(filename, config);
let cart = match cart {
Ok(cart) => cart,
Err(err) => return (Err(err), dependencies),
};
if let Err(err) = runtime.load(&cart.0) {
if let Err(err) = runtime.load(&cart) {
eprintln!("Load error: {}", err);
Err(err)
(Err(err), dependencies)
} else {
Ok(cart.1)
(Ok(()), dependencies)
}
}
@@ -231,13 +248,14 @@ fn pack(mut args: Arguments) -> Result<()> {
let out_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?;
let (cart, _) = load_cart(
let cart = load_cart(
&in_file,
&Config {
pack: Some(pack_config),
output_path: None,
},
)?;
)
.0?;
File::create(out_file)?.write_all(&cart)?;
@@ -260,8 +278,8 @@ fn compile(mut args: Arguments) -> Result<()> {
let in_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?;
let out_file = args.free_from_os_str::<PathBuf, bool>(|s| Ok(s.into()))?;
let module = curlywas::compile_file(in_file, options)?;
File::create(out_file)?.write_all(&module.wasm)?;
let module = curlywas::compile_file(in_file, options).0?;
File::create(out_file)?.write_all(&module)?;
Ok(())
}

View File

@@ -79,7 +79,9 @@ if(location.hash.length != 0) {
url += 'cart.uw8';
}
try {
await uw8.runModuleFromURL(url, true);
if(!await uw8.runModuleFromURL(url, true)) {
setupLoad();
}
} catch(e) {
setupLoad();
}

View File

@@ -305,10 +305,11 @@ export default function MicroW8(screen, config = {}) {
async function runModuleFromURL(url, keepUrl) {
let response = await fetch(url);
let type = response.headers.get('Content-Type');
if(type && type.includes('html')) {
throw false;
if((type && type.includes('html')) || response.status != 200) {
return false;
}
runModule(await response.arrayBuffer(), keepUrl || devkitMode);
return true;
}
return {