fix(tvix/eval): OpAdd must weakly stringify if either arg is string
Tests included. Change-Id: I7a4905d6103813373e383e2e8629c5fd243d6bca Reviewed-on: https://cl.tvl.fyi/c/depot/+/7377 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: Adam Joseph <adam@westernsemico.com>
This commit is contained in:
parent
f93944a799
commit
4b09f01571
3 changed files with 20 additions and 1 deletions
|
@ -0,0 +1 @@
|
|||
[ "lordnikon" "zerocool" /tmp/31337h4x0r "fooblah" "blahfoo" ]
|
|
@ -0,0 +1,7 @@
|
|||
[
|
||||
({ __toString = _: "lord"; } + "nikon")
|
||||
("zero" + { __toString = _: "cool"; })
|
||||
(/tmp/31337 + "h4x0r")
|
||||
("foo" + { outPath="blah"; })
|
||||
({ outPath="blah"; } + "foo")
|
||||
]
|
|
@ -399,7 +399,6 @@ impl<'o> VM<'o> {
|
|||
let a = self.pop();
|
||||
|
||||
let result = match (&a, &b) {
|
||||
(Value::String(s1), Value::String(s2)) => Value::String(s1.concat(s2)),
|
||||
(Value::Path(p), v) => {
|
||||
let mut path = p.to_string_lossy().into_owned();
|
||||
path.push_str(
|
||||
|
@ -408,6 +407,18 @@ impl<'o> VM<'o> {
|
|||
);
|
||||
crate::value::canon_path(PathBuf::from(path)).into()
|
||||
}
|
||||
(Value::String(s1), Value::String(s2)) => Value::String(s1.concat(s2)),
|
||||
(Value::String(s1), v) => Value::String(
|
||||
s1.concat(
|
||||
&v.coerce_to_string(CoercionKind::Weak, self)
|
||||
.map_err(|ek| self.error(ek))?,
|
||||
),
|
||||
),
|
||||
(v, Value::String(s2)) => Value::String(
|
||||
v.coerce_to_string(CoercionKind::Weak, self)
|
||||
.map_err(|ek| self.error(ek))?
|
||||
.concat(s2),
|
||||
),
|
||||
_ => fallible!(self, arithmetic_op!(&a, &b, +)),
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue