fix(tvix/eval): allow use of ? operator on non-set types
Nix allows this, but always returns false. Tvix needs to do the same. Change-Id: Ic9eec90834a0d0969eea5316d5c25032d3691d94 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6209 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
This commit is contained in:
parent
43658a5b90
commit
76846fe220
4 changed files with 14 additions and 4 deletions
|
|
@ -192,9 +192,15 @@ impl VM {
|
|||
|
||||
OpCode::OpAttrsIsSet => {
|
||||
let key = self.pop().to_string()?;
|
||||
let attrs = self.pop().to_attrs()?;
|
||||
let result = Value::Bool(attrs.select(key.as_str()).is_some());
|
||||
self.push(result);
|
||||
let result = match self.pop() {
|
||||
Value::Attrs(attrs) => attrs.select(key.as_str()).is_some(),
|
||||
|
||||
// Nix allows use of `?` on non-set types, but
|
||||
// always returns false in those cases.
|
||||
_ => false,
|
||||
};
|
||||
|
||||
self.push(Value::Bool(result));
|
||||
}
|
||||
|
||||
OpCode::OpList(count) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue