blr-lang 0.1.0

A language implementation that provides type safe dataframes
Documentation
//! Implementation of the blr runtime.

use crate::compiler::nucleus;
pub mod binary;
pub mod conv;

const RUNTIME_NAME: &str = "blr_runtime";

pub fn register_runtime(data_size: u32, modules: &mut Vec<(String, String, nucleus::Module)>) {
    let module = wat::parse_str(RUNTIME_WAT.replace("DATA_SIZE", &data_size.to_string()))
        .expect("blr_runtime should be a valid wat module");
    modules.push((
        RUNTIME_NAME.to_string(),
        //TODO
        "".to_string(),
        nucleus::Module {
            module,
            imports: Default::default(),
            externals: Default::default(),
            exports: Default::default(),
        },
    ));
}
// TODO add alloc
const RUNTIME_WAT: &str = r#"
(module
  (memory 100)
  (export "mem" (memory 0))
  (table $func_tbl 1000 funcref)
  (export "func_tbl" (table $func_tbl))
  (global $bump (mut i32) (i32.const DATA_SIZE))
  (func $alloc (param $align i32) (param $size i32) (result i32)
      (local $ptr i32)
      global.get $bump
      local.get $align
      i32.add
      i32.const 1
      i32.sub
      local.get $align
      i32.const 1
      i32.sub
      i32.const -1
      i32.xor
      i32.and
      local.tee $ptr
      local.get $size
      i32.add
      global.set $bump
      local.get $ptr)
  ;; Define realloc that performs a new allocation
  (func $realloc (param $old_ptr i32) (param $old_size i32) (param $align i32) (param $size i32) (result i32)
      local.get $align
      local.get $size
      call $alloc)
  (export "alloc" (func $alloc))
  (export "realloc" (func $realloc))
)"#;