diff --git a/Cargo.lock b/Cargo.lock index e8ed09d..e17b649 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -499,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", diff --git a/Cargo.toml b/Cargo.toml index 724037e..4ea7539 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ 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" diff --git a/platform/Cargo.lock b/platform/Cargo.lock index 0ef87ce..8168af9 100644 --- a/platform/Cargo.lock +++ b/platform/Cargo.lock @@ -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", diff --git a/platform/Cargo.toml b/platform/Cargo.toml index a840f8d..a3da896 100644 --- a/platform/Cargo.toml +++ b/platform/Cargo.toml @@ -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" \ No newline at end of file diff --git a/platform/src/main.rs b/platform/src/main.rs index 747fa84..cbcdeda 100644 --- a/platform/src/main.rs +++ b/platform/src/main.rs @@ -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)?; diff --git a/src/main.rs b/src/main.rs index bde7202..71d03f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -101,19 +101,16 @@ 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) => { - if watch_mode { - for dep in dependencies { - watcher.add_file(dep)?; - } - } + let (result, dependencies) = start_cart(&filename, &mut *runtime, &config); + if watch_mode { + for dep in dependencies { + watcher.add_file(dep)?; } - Err(err) => { - eprintln!("Load error: {}", err); - if !watch_mode { - exit(1); - } + } + if let Err(err) = result { + eprintln!("Load error: {}", err); + if !watch_mode { + exit(1); } } first_run = false; @@ -136,37 +133,45 @@ struct Config { output_path: Option, } -fn load_cart(filename: &Path, config: &Config) -> Result<(Vec, Vec)> { +fn load_cart(filename: &Path, config: &Config) -> (Result>, Vec) { let mut dependencies = Vec::new(); - 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 - } - }; + fn inner(filename: &Path, config: &Config, dependencies: &mut Vec) -> Result> { + let mut cart = match SourceType::of_file(filename)? { + SourceType::Binary => { + let mut cart = vec![]; + File::open(filename)?.read_to_end(&mut cart)?; + cart + } + SourceType::Wat => { + let cart = wat::parse_file(filename)?; + cart + } + SourceType::CurlyWas => { + let (module, deps) = curlywas::compile_file(filename, curlywas::Options::default()); + *dependencies = deps; + module? + } + }; - if let Some(ref pack_config) = config.pack { - cart = uw8_tool::pack(&cart, pack_config)?; - println!("packed size: {} bytes", cart.len()); + if let Some(ref pack_config) = config.pack { + cart = uw8_tool::pack(&cart, pack_config)?; + println!("packed size: {} bytes", cart.len()); + } + + if let Some(ref path) = config.output_path { + File::create(path)?.write_all(&cart)?; + } + + Ok(cart) } - if let Some(ref path) = config.output_path { - File::create(path)?.write_all(&cart)?; + let result = inner(filename, config, &mut dependencies); + + if dependencies.is_empty() { + dependencies.push(filename.to_path_buf()); } - Ok((cart, dependencies)) + (result, dependencies) } enum SourceType { @@ -205,14 +210,22 @@ impl SourceType { } #[cfg(any(feature = "native", feature = "browser"))] -fn start_cart(filename: &Path, runtime: &mut dyn Runtime, config: &Config) -> Result> { - let cart = load_cart(filename, config)?; +fn start_cart( + filename: &Path, + runtime: &mut dyn Runtime, + config: &Config, +) -> (Result<()>, Vec) { + 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 +244,14 @@ fn pack(mut args: Arguments) -> Result<()> { let out_file = args.free_from_os_str::(|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 +274,8 @@ fn compile(mut args: Arguments) -> Result<()> { let in_file = args.free_from_os_str::(|s| Ok(s.into()))?; let out_file = args.free_from_os_str::(|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(()) } diff --git a/web/src/index.html b/web/src/index.html index 58d3eed..3d4d49e 100644 --- a/web/src/index.html +++ b/web/src/index.html @@ -15,8 +15,8 @@
- -
+ +