patch 8.2.2389: test failure on a few systems
Problem: Test failure on a few systems.
Solution: Avoid that "char" value is negative.
diff --git a/src/version.c b/src/version.c
index 6d99990..568756b8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2389,
+/**/
2388,
/**/
2387,
diff --git a/src/vim9.h b/src/vim9.h
index c51be8e..e6c4087 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -224,7 +224,7 @@
// arguments to ISN_CHECKTYPE
typedef struct {
type_T *ct_type;
- char ct_off; // offset in stack, -1 is bottom
+ char ct_off; // offset in stack (positive), 1 is bottom
char ct_arg_idx; // argument index or zero
} checktype_T;
diff --git a/src/vim9compile.c b/src/vim9compile.c
index ead971f..2fad4ac 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -826,7 +826,9 @@
if ((isn = generate_instr(cctx, ISN_CHECKTYPE)) == NULL)
return FAIL;
isn->isn_arg.type.ct_type = alloc_type(expected);
- isn->isn_arg.type.ct_off = offset;
+ // Use the negated offset so that it's always positive. Some systems don't
+ // support negative numbers for "char".
+ isn->isn_arg.type.ct_off = (char)-offset;
isn->isn_arg.type.ct_arg_idx = argidx;
// type becomes expected
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 7d1d079..b5f4be3 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -3240,7 +3240,7 @@
{
checktype_T *ct = &iptr->isn_arg.type;
- tv = STACK_TV_BOT(ct->ct_off);
+ tv = STACK_TV_BOT(-(int)ct->ct_off);
SOURCING_LNUM = iptr->isn_lnum;
if (check_typval_type(ct->ct_type, tv, ct->ct_arg_idx)
== FAIL)
@@ -4242,11 +4242,11 @@
if (ct->ct_arg_idx == 0)
smsg("%4d CHECKTYPE %s stack[%d]", current,
type_name(ct->ct_type, &tofree),
- (int)ct->ct_off);
+ -(int)ct->ct_off);
else
smsg("%4d CHECKTYPE %s stack[%d] arg %d", current,
type_name(ct->ct_type, &tofree),
- (int)ct->ct_off,
+ -(int)ct->ct_off,
(int)ct->ct_arg_idx);
vim_free(tofree);
break;