aver-lang 0.15.0

VM and transpiler for Aver, a statically-typed language designed for AI-assisted development
Documentation
;; Heap-object header inspection + field access. Every aver heap value
;; carries an 8-byte header at offset 0:
;;   bits 56..63   kind   (u8)   - OBJ_* tag (string, list cons, tuple, etc.)
;;   bits 48..55   tag    (u8)   - variant tag for sum types
;;   bits 32..47   meta   (u16)  - type id / namespace meta
;;   bits  0..31   fields (u32)  - field count / byte length
;; Field cells live at ptr + 8 + idx*8 (8-byte slots regardless of width).

(func $rt_obj_kind (param $ptr i32) (result i32)
  local.get $ptr
  i64.load
  i64.const 56
  i64.shr_u
  i32.wrap_i64
  i32.const 0xFF
  i32.and
)
(export "rt_obj_kind" (func $rt_obj_kind))

(func $rt_obj_tag (param $ptr i32) (result i32)
  local.get $ptr
  i64.load
  i64.const 48
  i64.shr_u
  i32.wrap_i64
  i32.const 0xFF
  i32.and
)
(export "rt_obj_tag" (func $rt_obj_tag))

(func $rt_obj_meta (param $ptr i32) (result i32)
  local.get $ptr
  i64.load
  i64.const 32
  i64.shr_u
  i32.wrap_i64
  i32.const 0xFFFF
  i32.and
)
(export "rt_obj_meta" (func $rt_obj_meta))

(func $rt_obj_field (param $ptr i32) (param $idx i32) (result i64)
  local.get $ptr
  i32.const 8
  i32.add
  local.get $idx
  i32.const 8
  i32.mul
  i32.add
  i64.load
)
(export "rt_obj_field" (func $rt_obj_field))

(func $rt_obj_field_f64 (param $ptr i32) (param $idx i32) (result f64)
  local.get $ptr
  i32.const 8
  i32.add
  local.get $idx
  i32.const 8
  i32.mul
  i32.add
  f64.load
)
(export "rt_obj_field_f64" (func $rt_obj_field_f64))

(func $rt_obj_field_i32 (param $ptr i32) (param $idx i32) (result i32)
  local.get $ptr
  i32.const 8
  i32.add
  local.get $idx
  i32.const 8
  i32.mul
  i32.add
  i64.load
  i32.wrap_i64
)
(export "rt_obj_field_i32" (func $rt_obj_field_i32))