three_em 0.1.0

A blazingly fast, secure, reliable, multi-language execution machine for Smart Contracts.
Documentation
use std::panic;
pub use three_em_macro::*;

pub mod alloc;

#[link(wasm_import_module = "3em")]
extern "C" {
  fn throw_error(ptr: *const u8, len: usize);
}

#[no_mangle]
pub fn panic_hook(info: &panic::PanicInfo) {
  let payload = info.payload();
  let payload_str = match payload.downcast_ref::<&str>() {
    Some(s) => s,
    None => match payload.downcast_ref::<String>() {
      Some(s) => s,
      None => "Box<Any>",
    },
  };
  let msg = format!("{}", payload_str);
  let msg_ptr = msg.as_ptr();
  let msg_len = msg.len();
  unsafe {
    throw_error(msg_ptr, msg_len);
  }
  std::mem::forget(msg);
}