diff --git a/rust/nix-expr/src/eval_state.rs b/rust/nix-expr/src/eval_state.rs index a45c75f..833a366 100644 --- a/rust/nix-expr/src/eval_state.rs +++ b/rust/nix-expr/src/eval_state.rs @@ -223,9 +223,9 @@ impl EvalState { .with_context(|| "require_attrs_select_opt: attrName contains null byte")?; let v2 = unsafe { check_call_opt_key!(raw::get_attr_byname[ - self.context, + &mut self.context, v.raw_ptr(), - self.raw_ptr(), + self.eval_state.as_ptr(), attr_name.as_ptr() ]) }?; diff --git a/rust/nix-util/src/context.rs b/rust/nix-util/src/context.rs index cec4063..e838cc6 100644 --- a/rust/nix-util/src/context.rs +++ b/rust/nix-util/src/context.rs @@ -107,15 +107,16 @@ pub use check_call; macro_rules! check_call_opt_key { ($f:path[$ctx:expr, $($arg:expr),*]) => { { - let ret = $f($ctx.ptr(), $($arg,)*); - if unsafe { raw::err_code($ctx.ptr()) == raw::NIX_ERR_KEY } { - $ctx.clear(); + let ctx : &mut $crate::context::Context = $ctx; + let ret = $f(ctx.ptr(), $($arg,)*); + if unsafe { raw::err_code(ctx.ptr()) == raw::NIX_ERR_KEY } { + ctx.clear(); return Ok(None); } - match $ctx.check_err() { + match ctx.check_err() { Ok(_) => Ok(Some(ret)), Err(e) => { - $ctx.clear(); + ctx.clear(); Err(e) } }