pub(in crate::vm::dump) mod classic;
mod lower;
pub(in crate::vm::dump) mod modern;
pub(in crate::vm::dump) mod puc_51;
pub(in crate::vm::dump) mod puc_52;
pub(in crate::vm::dump) mod puc_53;
pub(in crate::vm::dump) mod puc_54;
pub(in crate::vm::dump) mod puc_55;
use super::error::Bad;
use crate::runtime::function::Proto;
use crate::runtime::heap::{Gc, Heap};
pub(super) fn undump_puc(bytes: &[u8], heap: &mut Heap) -> Result<Gc<Proto>, Bad> {
match bytes.get(4) {
Some(0x51) => puc_51::undump(bytes, heap),
Some(0x52) => puc_52::undump(bytes, heap),
Some(0x53) => puc_53::undump_puc_53(bytes, heap),
Some(0x54) => puc_54::undump(bytes, heap),
Some(0x55) => puc_55::undump_puc_55(bytes, heap),
Some(_) => Err(Bad::Version),
None => Err(Bad::Truncated),
}
}