use crate::webassembly::LinearMemory;

pub fn align_memory(ptr: u32) -> u32 {
    (ptr + 15) & !15
}

// pub fn static_alloc(size: u32, instance: &mut Instance) -> u32 {
//     let static_top = instance.emscripten_data.static_top;
//     let total_memory = instance.memories[0].maximum.unwrap_or(LinearMemory::DEFAULT_HEAP_SIZE as u32);
//     instance.emscripten_data.static_top = (static_top + size + 15) & 4294967280;
//     assert!(static_top < total_memory, "not enough memory for static allocation - increase total_memory!");
//     static_top
// }

pub fn static_alloc(size: u32, static_top: &mut u32, memory: &LinearMemory) -> u32 {
    let old_static_top = *static_top;
    let total_memory = memory.maximum_size() * LinearMemory::PAGE_SIZE;
    // NOTE: The `4294967280` is a u32 conversion of -16 as gotten from emscripten.
    *static_top = (*static_top + size + 15) & 4294967280;
    assert!(
        *static_top < total_memory,
        "not enough memory for static allocation - increase total_memory!"
    );
    old_static_top
}