Allow primop creation from immutable eval state

This commit is contained in:
2026-06-08 15:44:25 +02:00
parent af04dd9f58
commit f4e2f71de6
2 changed files with 12 additions and 12 deletions
+11 -11
View File
@@ -886,7 +886,7 @@ impl EvalState {
#[doc(alias = "create_thunk")]
#[doc(alias = "lazy_value")]
pub fn new_value_thunk(
&mut self,
&self,
name: &str,
f: Box<dyn Fn(&mut EvalState) -> std::result::Result<Value, Box<dyn std::error::Error>>>,
) -> Result<Value> {
@@ -2282,7 +2282,7 @@ mod tests {
fn eval_state_primop_anon_call() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let bias: Arc<Mutex<Int>> = Arc::new(Mutex::new(0));
let bias_control = bias.clone();
@@ -2301,7 +2301,7 @@ mod tests {
)
.unwrap();
let f = primop.new_value(&mut es).unwrap();
let f = primop.new_value(&es).unwrap();
{
*bias_control.lock().unwrap() = 10;
@@ -2364,7 +2364,7 @@ mod tests {
fn eval_state_primop_anon_call_no_args() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let v = es
.new_value_thunk(
"test_thunk",
@@ -2385,7 +2385,7 @@ mod tests {
fn eval_state_primop_anon_call_no_args_lazy() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let v = es
.new_value_thunk(
"test_thunk",
@@ -2423,7 +2423,7 @@ mod tests {
pub fn eval_state_primop_custom() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let primop = primop::PrimOp::new(
primop::PrimOpMeta {
name: cstr!("frobnicate"),
@@ -2437,7 +2437,7 @@ mod tests {
}),
)
.unwrap();
let f = primop.new_value(&mut es).unwrap();
let f = primop.new_value(&es).unwrap();
let a = es.new_value_int(2).unwrap();
let b = es.new_value_int(3).unwrap();
let fa = es.call(f, a).unwrap();
@@ -2455,7 +2455,7 @@ mod tests {
pub fn eval_state_primop_custom_throw() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let primop = primop::PrimOp::new(
primop::PrimOpMeta {
name: cstr!("frobnicate"),
@@ -2469,7 +2469,7 @@ mod tests {
}),
)
.unwrap();
let f = primop.new_value(&mut es).unwrap();
let f = primop.new_value(&es).unwrap();
let a = es.new_value_int(0).unwrap();
match es.call(f, a) {
Ok(_) => panic!("expected an error"),
@@ -2916,7 +2916,7 @@ mod tests {
fn eval_state_primop_recoverable_error() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let call_count = std::cell::Cell::new(0u32);
let v = es
@@ -2958,7 +2958,7 @@ mod tests {
fn eval_state_primop_recoverable_error_in_chain() {
gc_registering_current_thread(|| {
let store = Store::open(None, []).unwrap();
let mut es = EvalState::new(store, []).unwrap();
let es = EvalState::new(store, []).unwrap();
let call_count = std::cell::Cell::new(0u32);
let v = es
+1 -1
View File
@@ -92,7 +92,7 @@ impl PrimOp {
/// does not affect `builtins`.
#[doc(alias = "make_primop")]
#[doc(alias = "create_function")]
pub fn new_value(self, eval_state: &mut EvalState) -> Result<Value, EvalStateError> {
pub fn new_value(self, eval_state: &EvalState) -> Result<Value, EvalStateError> {
let value = eval_state.new_value_uninitialized()?;
let mut ctx = Context::new();
unsafe {