summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-10-15 09:44:50 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-15 09:44:50 +0200
commitde3295dd0c68a8d7540a751a99ee056fd5b9a7a4 (patch)
tree4028cf0eca80889cfaccccf7af4c392ba6b4db88 /src/eval.c
parentae3cfa47d3dcee75061db598eb19879693b2393a (diff)
patch 9.0.2027: Vim9: no support for bitwise operators in lambda funcsv9.0.2027
Problem: Vim9: no support for bitwise operators in lambda funcs Solution: move "evaluate" assignment a bit up in order to decide to perform bitwise operations closes: #13342 closes: #13345 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/eval.c b/src/eval.c
index 46eec35572..34502f965b 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3515,7 +3515,8 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
return OK;
// Handle a bitwise left or right shift operator
- if (rettv->v_type != VAR_NUMBER)
+ evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
+ if (evaluate && rettv->v_type != VAR_NUMBER)
{
// left operand should be a number
emsg(_(e_bitshift_ops_must_be_number));
@@ -3523,7 +3524,6 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
return FAIL;
}
- evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
vim9script = in_vim9script();
if (getnext)
{
@@ -3553,20 +3553,20 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
return FAIL;
}
- if (var2.v_type != VAR_NUMBER || var2.vval.v_number < 0)
- {
- // right operand should be a positive number
- if (var2.v_type != VAR_NUMBER)
- emsg(_(e_bitshift_ops_must_be_number));
- else
- emsg(_(e_bitshift_ops_must_be_positive));
- clear_tv(rettv);
- clear_tv(&var2);
- return FAIL;
- }
-
if (evaluate)
{
+ if (var2.v_type != VAR_NUMBER || var2.vval.v_number < 0)
+ {
+ // right operand should be a positive number
+ if (var2.v_type != VAR_NUMBER)
+ emsg(_(e_bitshift_ops_must_be_number));
+ else
+ emsg(_(e_bitshift_ops_must_be_positive));
+ clear_tv(rettv);
+ clear_tv(&var2);
+ return FAIL;
+ }
+
if (var2.vval.v_number > MAX_LSHIFT_BITS)
// shifting more bits than we have always results in zero
rettv->vval.v_number = 0;