1
0
Fork 0
mirror of https://github.com/imjasonh/nescript synced 2026-07-08 08:55:38 +00:00
nescript/fuzz/fuzz_targets/fuzz_compile.rs

34 lines
1.1 KiB
Rust
Raw Normal View History

#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
// The full compilation pipeline must never panic — errors are reported
// via diagnostics, not panics.
if let Ok(source) = std::str::from_utf8(data) {
let (program, parse_diags) = nescript::parser::parse(source);
if parse_diags.iter().any(|d| d.is_error()) {
return;
}
let Some(program) = program else { return };
let analysis = nescript::analyzer::analyze(&program);
if analysis.diagnostics.iter().any(|d| d.is_error()) {
return;
}
// IR lowering + optimization
let mut ir = nescript::ir::lower(&program, &analysis);
nescript::optimizer::optimize(&mut ir);
// Codegen + assembly
let codegen =
nescript::codegen::CodeGen::new(&analysis.var_allocations, &program.constants);
let instructions = codegen.generate(&program);
// Linking
let linker = nescript::linker::Linker::new(program.game.mirroring);
let _rom = linker.link(&instructions);
}
});