mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 21:39:07 +00:00
put platform functions (roc_alloc etc) in a module
This commit is contained in:
parent
36c8723214
commit
0d8fc5f2da
3 changed files with 60 additions and 54 deletions
|
@ -1,5 +1,7 @@
|
||||||
extern crate bumpalo;
|
extern crate bumpalo;
|
||||||
|
|
||||||
|
pub mod platform_functions;
|
||||||
|
|
||||||
#[cfg(feature = "gen-dev")]
|
#[cfg(feature = "gen-dev")]
|
||||||
pub mod dev;
|
pub mod dev;
|
||||||
pub mod from_wasmer_memory;
|
pub mod from_wasmer_memory;
|
||||||
|
|
57
crates/compiler/test_gen/src/helpers/platform_functions.rs
Normal file
57
crates/compiler/test_gen/src/helpers/platform_functions.rs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
use core::ffi::c_void;
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// The Roc application needs this.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe fn roc_alloc(size: usize, _alignment: u32) -> *mut c_void {
|
||||||
|
let ptr = libc::malloc(size);
|
||||||
|
println!("allocated: {:x?}", ptr);
|
||||||
|
|
||||||
|
ptr
|
||||||
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// The Roc application needs this.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe fn roc_memcpy(dest: *mut c_void, src: *const c_void, bytes: usize) -> *mut c_void {
|
||||||
|
libc::memcpy(dest, src, bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// The Roc application needs this.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe fn roc_realloc(
|
||||||
|
c_ptr: *mut c_void,
|
||||||
|
new_size: usize,
|
||||||
|
_old_size: usize,
|
||||||
|
_alignment: u32,
|
||||||
|
) -> *mut c_void {
|
||||||
|
libc::realloc(c_ptr, new_size)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// The Roc application needs this.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe fn roc_dealloc(c_ptr: *mut c_void, _alignment: u32) {
|
||||||
|
libc::free(c_ptr)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// The Roc application needs this.
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe fn roc_panic(c_ptr: *mut c_void, tag_id: u32) {
|
||||||
|
use roc_gen_llvm::llvm::build::PanicTagId;
|
||||||
|
|
||||||
|
use std::ffi::CStr;
|
||||||
|
use std::os::raw::c_char;
|
||||||
|
|
||||||
|
match PanicTagId::try_from(tag_id) {
|
||||||
|
Ok(PanicTagId::NullTerminatedString) => {
|
||||||
|
let slice = CStr::from_ptr(c_ptr as *const c_char);
|
||||||
|
let string = slice.to_str().unwrap();
|
||||||
|
eprintln!("Roc hit a panic: {}", string);
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
Err(_) => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,57 +22,4 @@ pub mod wasm_str;
|
||||||
#[cfg(feature = "gen-wasm")]
|
#[cfg(feature = "gen-wasm")]
|
||||||
pub mod wasm_linking;
|
pub mod wasm_linking;
|
||||||
|
|
||||||
use core::ffi::c_void;
|
pub use helpers::platform_functions::*;
|
||||||
|
|
||||||
/// # Safety
|
|
||||||
/// The Roc application needs this.
|
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe fn roc_alloc(size: usize, _alignment: u32) -> *mut c_void {
|
|
||||||
libc::malloc(size)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # Safety
|
|
||||||
/// The Roc application needs this.
|
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe fn roc_memcpy(dest: *mut c_void, src: *const c_void, bytes: usize) -> *mut c_void {
|
|
||||||
libc::memcpy(dest, src, bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # Safety
|
|
||||||
/// The Roc application needs this.
|
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe fn roc_realloc(
|
|
||||||
c_ptr: *mut c_void,
|
|
||||||
new_size: usize,
|
|
||||||
_old_size: usize,
|
|
||||||
_alignment: u32,
|
|
||||||
) -> *mut c_void {
|
|
||||||
libc::realloc(c_ptr, new_size)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # Safety
|
|
||||||
/// The Roc application needs this.
|
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe fn roc_dealloc(c_ptr: *mut c_void, _alignment: u32) {
|
|
||||||
libc::free(c_ptr)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # Safety
|
|
||||||
/// The Roc application needs this.
|
|
||||||
#[no_mangle]
|
|
||||||
pub unsafe fn roc_panic(c_ptr: *mut c_void, tag_id: u32) {
|
|
||||||
use roc_gen_llvm::llvm::build::PanicTagId;
|
|
||||||
|
|
||||||
use std::ffi::CStr;
|
|
||||||
use std::os::raw::c_char;
|
|
||||||
|
|
||||||
match PanicTagId::try_from(tag_id) {
|
|
||||||
Ok(PanicTagId::NullTerminatedString) => {
|
|
||||||
let slice = CStr::from_ptr(c_ptr as *const c_char);
|
|
||||||
let string = slice.to_str().unwrap();
|
|
||||||
eprintln!("Roc hit a panic: {}", string);
|
|
||||||
std::process::exit(1);
|
|
||||||
}
|
|
||||||
Err(_) => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue