39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
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<EqRef>) {
|
|
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! ("#<procedure>"),
|
|
}
|
|
}
|
|
|
|
pub fn truthy_p (caller : Caller<'_, u32>, x : Rooted<EqRef>,) -> u32 {
|
|
let r = scm::interpret (&caller, x).unwrap ().unwrap ();
|
|
if let Scm::Immediate (Immediate::Bool (false)) = r {
|
|
0
|
|
} else {
|
|
1
|
|
}
|
|
}
|