keep track of offset in expect repl

This commit is contained in:
Folkert 2022-07-23 15:43:22 +02:00
parent 63b2b060c9
commit 02e842cda7
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
2 changed files with 15 additions and 11 deletions

View file

@ -356,7 +356,6 @@ fn jit_to_ast_help<'a, A: ReplApp<'a>>(
Ok(app.call_function_returns_roc_list( Ok(app.call_function_returns_roc_list(
main_fn_name, main_fn_name,
|mem: &A::Memory, (addr, len, _cap)| { |mem: &A::Memory, (addr, len, _cap)| {
dbg!(addr, len);
list_to_ast(env, mem, addr, len, elem_layout, raw_content) list_to_ast(env, mem, addr, len, elem_layout, raw_content)
}, },
)) ))
@ -549,9 +548,7 @@ fn addr_to_ast<'a, M: ReplAppMemory>(
(_, Layout::Builtin(Builtin::List(elem_layout))) => { (_, Layout::Builtin(Builtin::List(elem_layout))) => {
let elem_addr = mem.deref_usize(addr); let elem_addr = mem.deref_usize(addr);
let len = mem.deref_usize(addr + env.target_info.ptr_width() as usize); let len = mem.deref_usize(addr + env.target_info.ptr_width() as usize);
let cap = mem.deref_usize(addr + 2 * env.target_info.ptr_width() as usize); let _cap = mem.deref_usize(addr + 2 * env.target_info.ptr_width() as usize);
dbg!(elem_addr, len, cap);
list_to_ast(env, mem, elem_addr, len, elem_layout, raw_content) list_to_ast(env, mem, elem_addr, len, elem_layout, raw_content)
} }

View file

@ -26,7 +26,10 @@ pub fn get_values<'a>(
) -> Result<Vec<Expr<'a>>, ToAstProblem> { ) -> Result<Vec<Expr<'a>>, ToAstProblem> {
let mut result = Vec::with_capacity(variables.len()); let mut result = Vec::with_capacity(variables.len());
let memory = ExpectMemory { start }; let memory = ExpectMemory {
start,
bytes_read: RefCell::new(0),
};
let app = ExpectReplApp { let app = ExpectReplApp {
memory: arena.alloc(memory), memory: arena.alloc(memory),
@ -70,9 +73,9 @@ pub fn get_values<'a>(
Ok(result) Ok(result)
} }
#[derive(Clone)]
struct ExpectMemory { struct ExpectMemory {
start: *const u8, start: *const u8,
bytes_read: RefCell<usize>,
} }
macro_rules! deref_number { macro_rules! deref_number {
@ -80,6 +83,7 @@ macro_rules! deref_number {
fn $name(&self, addr: usize) -> $t { fn $name(&self, addr: usize) -> $t {
// dbg!(std::any::type_name::<$t>(), self.start, addr); // dbg!(std::any::type_name::<$t>(), self.start, addr);
let ptr = unsafe { self.start.add(addr) } as *const _; let ptr = unsafe { self.start.add(addr) } as *const _;
*self.bytes_read.borrow_mut() += std::mem::size_of::<$t>();
unsafe { std::ptr::read_unaligned(ptr) } unsafe { std::ptr::read_unaligned(ptr) }
} }
}; };
@ -158,7 +162,13 @@ impl<'a> ReplApp<'a> for ExpectReplApp<'a> {
self.offset += std::mem::size_of::<Return>(); self.offset += std::mem::size_of::<Return>();
transform(self.memory, result) *self.memory.bytes_read.borrow_mut() = 0;
let transformed = transform(self.memory, result);
self.offset += *self.memory.bytes_read.borrow();
transformed
} }
fn call_function_returns_roc_list<F>(&mut self, main_fn_name: &str, transform: F) -> Expr<'a> fn call_function_returns_roc_list<F>(&mut self, main_fn_name: &str, transform: F) -> Expr<'a>
@ -166,10 +176,7 @@ impl<'a> ReplApp<'a> for ExpectReplApp<'a> {
F: Fn(&'a Self::Memory, (usize, usize, usize)) -> Expr<'a>, F: Fn(&'a Self::Memory, (usize, usize, usize)) -> Expr<'a>,
Self::Memory: 'a, Self::Memory: 'a,
{ {
let result = self.call_function(main_fn_name, transform); self.call_function(main_fn_name, transform)
dbg!(self.offset);
self.offset += 8;
result
} }
fn call_function_returns_roc_str<T, F>( fn call_function_returns_roc_str<T, F>(