patch 8.2.1650: Vim9: result of && and || expression is not bool in script
Problem: Vim9: result of && and || expression cannot be assigned to a bool
at the script level.
Solution: Add the VAR_BOOL_OK flag. Convert to bool when needed.
diff --git a/src/eval.c b/src/eval.c
index 3eb4be4..6283fdf 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2356,6 +2356,9 @@
clear_evalarg(&local_evalarg, NULL);
else
evalarg->eval_flags = orig_flags;
+
+ // Resulting value can be assigned to a bool.
+ rettv->v_lock |= VAR_BOOL_OK;
}
return OK;
@@ -2451,6 +2454,7 @@
*arg = skipwhite_and_linebreak(*arg + 2, evalarg_used);
evalarg_used->eval_flags = result ? orig_flags
: orig_flags & ~EVAL_EVALUATE;
+ CLEAR_FIELD(var2);
if (eval4(arg, &var2, evalarg_used) == FAIL)
return FAIL;
@@ -2487,6 +2491,9 @@
clear_evalarg(&local_evalarg, NULL);
else
evalarg->eval_flags = orig_flags;
+
+ // Resulting value can be assigned to a bool.
+ rettv->v_lock |= VAR_BOOL_OK;
}
return OK;