mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 13:29:12 +00:00
keep track of offset in expect repl
This commit is contained in:
parent
63b2b060c9
commit
02e842cda7
2 changed files with 15 additions and 11 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue