use wasmtime::*; use crate::internal as scm; use crate::internal::{Scm,Immediate,HeapObject}; // pub fn small_fixnum_p (_) // pub fn immediate_p (caller : Caller<'_, u32>, x : EqRef) -> EqRef { // x.is_i31 () // } fn write_immediate (_caller : Caller<'_, u32>, imm : Immediate) { match imm { Immediate::SmallFixnum (n) => print! ("{}", n), Immediate::Bool (b) => print! ("{}", if b { "#t" } else { "#f" }), } } pub fn write (caller : Caller<'_, u32>, x : Rooted) { match scm::interpret (&caller, x).unwrap ().unwrap () { Scm::Immediate (x) => write_immediate (caller, x), Scm::HeapObject (x) => write_heap_object (caller, x), } } fn write_heap_object (_caller : Caller<'_, u32>, x : HeapObject) { match x { HeapObject::Procedure => print! ("#"), } } pub fn truthy_p (caller : Caller<'_, u32>, x : Rooted,) -> u32 { let r = scm::interpret (&caller, x).unwrap ().unwrap (); if let Scm::Immediate (Immediate::Bool (false)) = r { 0 } else { 1 } }