aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/nasm/src/main.rs35
-rw-r--r--crates/readrom/src/main.rs8
-rw-r--r--crates/runrom/src/main.rs9
-rw-r--r--crates/xa65/src/main.rs31
4 files changed, 28 insertions, 55 deletions
diff --git a/crates/nasm/src/main.rs b/crates/nasm/src/main.rs
index 010e7d5..a5c446f 100644
--- a/crates/nasm/src/main.rs
+++ b/crates/nasm/src/main.rs
@@ -77,7 +77,6 @@ fn parse_define(arg: &str) -> (String, u8) {
let Some(name) = key_value.next() else {
die(format!("bad format for define '{arg}'"));
- return (String::default(), 0);
};
if name
@@ -95,7 +94,6 @@ fn parse_define(arg: &str) -> (String, u8) {
die(format!(
"value for define '{arg}' must be a valid 8-bit integer"
));
- return (String::default(), 0);
}
};
@@ -189,7 +187,7 @@ fn parse_arguments() -> Args {
}
// Print the given `message` and exit(1).
-fn die(message: String) {
+fn die(message: String) -> ! {
eprintln!("error: {message}");
std::process::exit(1);
}
@@ -222,7 +220,7 @@ fn get_directory_from_source(source: &SourceInfo) -> PathBuf {
// Save the `memory` object into the `<source>/.nasm/memory.txt` file.
fn save_memory_stats(source: &SourceInfo, memory: &mut MemoryResult, has_working_ram: bool) {
let Ok(mut file) = File::create(get_directory_from_source(source).join("memory.txt")) else {
- return die("could not write memory.txt file".to_string());
+ die("could not write memory.txt file".to_string());
};
let ranges = &mut memory.memory_ranges;
@@ -231,15 +229,15 @@ fn save_memory_stats(source: &SourceInfo, memory: &mut MemoryResult, has_working
for mr in ranges {
if mr.range.start + 1 == mr.range.end {
if let Err(e) = writeln!(file, "{}: {}", mr.to_human(), mr.name) {
- return die(format!("could not write memory.txt file: {e}"));
+ die(format!("could not write memory.txt file: {e}"));
}
} else if let Err(e) = writeln!(file, "{}: {}", mr.to_human(), mr.name) {
- return die(format!("could not write memory.txt file: {e}"));
+ die(format!("could not write memory.txt file: {e}"));
}
}
if let Err(e) = writeln!(file, "\n--- Summary (in bytes) ---") {
- return die(format!("could not write memory.txt file: {e}"));
+ die(format!("could not write memory.txt file: {e}"));
}
print_memory_summary(Box::new(file), memory, has_working_ram);
}
@@ -255,7 +253,7 @@ fn print_memory_summary(mut output: Box<dyn Write>, memory: &MemoryResult, has_w
"- Internal RAM: {}/2048 ({:.2}%)",
memory.total_internal_ram, perc
) {
- return die(format!("could not write memory summary: {e}"));
+ die(format!("could not write memory summary: {e}"));
}
if has_working_ram {
@@ -273,13 +271,13 @@ fn print_memory_summary(mut output: Box<dyn Write>, memory: &MemoryResult, has_w
// Save the 'addresses' list into the `<source>/.nasm/addresses.txt` file.
fn save_addresses(source: &SourceInfo, mut addresses: Vec<xixanta::assembler::Range>) {
let Ok(mut file) = File::create(get_directory_from_source(source).join("addresses.txt")) else {
- return die("could not write memory.txt file".to_string());
+ die("could not write memory.txt file".to_string());
};
addresses.sort_by_key(|a| a.range.start);
for a in addresses {
if let Err(e) = writeln!(file, "{},{:04X},{:04X}", a.name, a.range.start, a.range.end) {
- return die(format!("could not write addresses.txt file: {e}"));
+ die(format!("could not write addresses.txt file: {e}"));
}
}
}
@@ -296,14 +294,14 @@ fn print_segments_stats(mut output: Box<dyn Write>, mappings: &[Mapping]) {
"- {}: {}/{} ({:.0}%)",
mapping.name, mapping.offset, mapping.size, perc
) {
- return die(format!("could not write segments summary: {e}"));
+ die(format!("could not write segments summary: {e}"));
}
} else if let Err(e) = writeln!(
output,
"- {}: {}/{} ({:.2}%)",
mapping.name, mapping.offset, mapping.size, perc
) {
- return die(format!("could not write segments summary: {e}"));
+ die(format!("could not write segments summary: {e}"));
}
}
}
@@ -315,17 +313,13 @@ fn main() {
let path = Path::new(&args.file);
let Ok(input) = File::open(path) else {
die(format!("failed to open the given file '{}'", args.file));
- return;
};
let source = match path.parent() {
Some(parent) => SourceInfo {
directory: parent.to_path_buf(),
name: path.file_name().unwrap().to_str().unwrap().to_string(),
},
- None => {
- die("failed to find directory for the given file".to_string());
- return;
- }
+ None => die("failed to find directory for the given file".to_string()),
};
// Select the output stream.
@@ -337,10 +331,7 @@ fn main() {
let name = args.out.unwrap_or(String::from("out.nes"));
match File::create(&name) {
Ok(f) => (BufWriter::new(Box::new(f)), args.file.as_str()),
- Err(_) => {
- die(format!("could not create file '{name}'"));
- return;
- }
+ Err(_) => die(format!("could not create file '{name}'")),
}
};
@@ -455,7 +446,7 @@ fn main() {
if args.info {
let Ok(file) = File::create(get_directory_from_source(&source).join("segments.txt"))
else {
- return die("could not write segments.txt file".to_string());
+ die("could not write segments.txt file".to_string());
};
print_segments_stats(Box::new(file), &res.mappings);
}
diff --git a/crates/readrom/src/main.rs b/crates/readrom/src/main.rs
index ef7fa9b..8d70e16 100644
--- a/crates/readrom/src/main.rs
+++ b/crates/readrom/src/main.rs
@@ -175,7 +175,7 @@ fn print_vectors(addrs: &[u8]) {
}
// Print the given `message` and exit(1).
-fn die(message: String) {
+fn die(message: String) -> ! {
println!("error: {message}");
std::process::exit(1);
}
@@ -527,7 +527,6 @@ fn main() {
// Open the ROM file and read it.
let Ok(mut input) = File::open(&args.file) else {
die(format!("failed to open the given file '{}'", args.file));
- return;
};
let mut bytes = Vec::new();
if let Err(e) = input.read_to_end(&mut bytes) {
@@ -553,10 +552,7 @@ fn main() {
let header = match Header::try_from(buf) {
Ok(h) => h,
- Err(e) => {
- die(e.to_string());
- return;
- }
+ Err(e) => die(e.to_string()),
};
print_header(&header);
diff --git a/crates/runrom/src/main.rs b/crates/runrom/src/main.rs
index ab1ea83..1535c94 100644
--- a/crates/runrom/src/main.rs
+++ b/crates/runrom/src/main.rs
@@ -27,7 +27,7 @@ fn print_help() {
}
// Print the given `message` and exit(1).
-fn die(message: String) {
+fn die(message: String) -> ! {
eprintln!("error: {message}");
std::process::exit(1);
}
@@ -123,7 +123,6 @@ fn start_from_reset_vector(file: &String) -> u16 {
let Ok(mut input) = File::open(file) else {
die(format!("failed to open the given file '{file}'"));
- return 0;
};
let mut buf = vec![0u8; 0x10];
@@ -136,10 +135,7 @@ fn start_from_reset_vector(file: &String) -> u16 {
let header = match Header::try_from(buf.as_slice()) {
Ok(h) => h,
- Err(e) => {
- die(e.to_string());
- return 0;
- }
+ Err(e) => die(e.to_string()),
};
// 2. With a known PRG ROM size, fetch the two bytes pertaining to the reset
@@ -155,7 +151,6 @@ fn start_from_reset_vector(file: &String) -> u16 {
if input.seek(SeekFrom::Start(offset)).is_err() {
die("cannot peek into the ROM's reset address".to_string());
- return 0;
};
let mut buf = [0u8; 0x02];
if let Err(e) = input.read_exact(&mut buf) {
diff --git a/crates/xa65/src/main.rs b/crates/xa65/src/main.rs
index 03bdc82..a717ddb 100644
--- a/crates/xa65/src/main.rs
+++ b/crates/xa65/src/main.rs
@@ -28,11 +28,15 @@ fn print_help() {
println!("Options:");
println!(" --allow-unused\tPass the '--allow-unused' flag to 'nasm'.");
println!(" -b, --bin <PROGRAM>\tAlternative to the binary for 'nasm'.");
- println!(" -C, --config <FILE>\tLinker configuration to be used, whether an identifier or a file path.");
+ println!(
+ " -C, --config <FILE>\tLinker configuration to be used, whether an identifier or a file path."
+ );
println!(" -h, --help\t\tPrint this message.");
println!(" -n, --no-errors\tError out if the output differ or 'nasm' has produced an error.");
println!(" -o, --out <FILE>\tFile path where the output should be located after execution.");
- println!(" -s, --strict\t\tBe more strict on 'nasm' by adding the address-sanitizer and writing debug/analysis information.");
+ println!(
+ " -s, --strict\t\tBe more strict on 'nasm' by adding the address-sanitizer and writing debug/analysis information."
+ );
println!(" --stats\t\tPrint statistics to the standard output.");
println!(" --target nes\t\tUsed for compatibility with 'ca65'.");
println!(" -v, --version\t\tPrint the version of this program.");
@@ -123,7 +127,7 @@ fn parse_arguments() -> Args {
}
// Print the given `message` and exit(1).
-fn die(message: String) {
+fn die(message: String) -> ! {
eprintln!("error: {message}");
std::process::exit(1);
}
@@ -234,10 +238,7 @@ fn main() {
// Make sure that the binaries are there.
let (nasm, cl65) = match get_binaries(args.bin.unwrap_or("nasm".to_string())) {
Ok((nasm, cl65)) => (nasm, cl65),
- Err(e) => {
- die(e);
- return;
- }
+ Err(e) => die(e),
};
// Generate a temporary directory in which both binary files will be placed
@@ -245,7 +246,6 @@ fn main() {
let dir = temporary_dir();
if let Err(e) = std::fs::create_dir(&dir) {
die(format!("could not create temporary directory: {}", e));
- return;
}
// Run 'nasm' with the given arguments. We only care about the exit code of
@@ -277,10 +277,7 @@ fn main() {
std::process::exit(cmd.code().unwrap_or(1));
}
}
- Err(e) => {
- die(e.to_string());
- return;
- }
+ Err(e) => die(e.to_string()),
}
// Run 'cl65' with the given arguments.
@@ -303,10 +300,7 @@ fn main() {
std::process::exit(1);
}
}
- Err(e) => {
- die(e.to_string());
- return;
- }
+ Err(e) => die(e.to_string()),
}
// Everything went fine, we should have both binaries available to be
@@ -335,10 +329,7 @@ fn main() {
}
}
}
- Err(e) => {
- die(e.to_string());
- return;
- }
+ Err(e) => die(e.to_string()),
}
// And just copy one of the binaries to where it was originally requested.