mirror of
https://github.com/neovim/neovim.git
synced 2025-09-13 23:08:16 +00:00
vim-patch:7.4.1976
Problem: Number variables are not 64 bits while they could be.
Solution: Add the num64 feature. (Ken Takata)
22fcfad292
This commit is contained in:
@@ -446,7 +446,7 @@ typedef struct {
|
||||
bool rpc;
|
||||
int refcount;
|
||||
Callback on_stdout, on_stderr, on_exit;
|
||||
int *status_ptr;
|
||||
varnumber_T *status_ptr;
|
||||
uint64_t id;
|
||||
MultiQueue *events;
|
||||
} TerminalJobData;
|
||||
@@ -970,7 +970,7 @@ eval_to_bool (
|
||||
emsg_skip--;
|
||||
}
|
||||
|
||||
return retval;
|
||||
return (int)retval;
|
||||
}
|
||||
|
||||
/// Top level evaluation function, returning a string
|
||||
@@ -1081,10 +1081,10 @@ char_u *eval_to_string_safe(char_u *arg, char_u **nextcmd, int use_sandbox)
|
||||
* Evaluates "expr" silently.
|
||||
* Returns -1 for an error.
|
||||
*/
|
||||
int eval_to_number(char_u *expr)
|
||||
varnumber_T eval_to_number(char_u *expr)
|
||||
{
|
||||
typval_T rettv;
|
||||
int retval;
|
||||
varnumber_T retval;
|
||||
char_u *p = skipwhite(expr);
|
||||
|
||||
++emsg_off;
|
||||
@@ -1203,7 +1203,7 @@ int call_vim_function(
|
||||
typval_T *rettv
|
||||
)
|
||||
{
|
||||
long n;
|
||||
varnumber_T n;
|
||||
int len;
|
||||
int doesrange;
|
||||
void *save_funccalp = NULL;
|
||||
@@ -1261,7 +1261,7 @@ int call_vim_function(
|
||||
* Returns -1 when calling the function fails.
|
||||
* Uses argv[argc] for the function arguments.
|
||||
*/
|
||||
long
|
||||
varnumber_T
|
||||
call_func_retnr (
|
||||
char_u *func,
|
||||
int argc,
|
||||
@@ -1270,7 +1270,7 @@ call_func_retnr (
|
||||
)
|
||||
{
|
||||
typval_T rettv;
|
||||
long retval;
|
||||
varnumber_T retval;
|
||||
|
||||
/* All arguments are passed as strings, no conversion to number. */
|
||||
if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
|
||||
@@ -1399,7 +1399,7 @@ void prof_child_exit(proftime_T *tm /* where waittime was stored */
|
||||
int eval_foldexpr(char_u *arg, int *cp)
|
||||
{
|
||||
typval_T tv;
|
||||
int retval;
|
||||
varnumber_T retval;
|
||||
char_u *s;
|
||||
int use_sandbox = was_set_insecurely((char_u *)"foldexpr",
|
||||
OPT_LOCAL);
|
||||
@@ -1432,7 +1432,7 @@ int eval_foldexpr(char_u *arg, int *cp)
|
||||
--sandbox;
|
||||
--textlock;
|
||||
|
||||
return retval;
|
||||
return (int)retval;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2286,7 +2286,7 @@ static char_u *get_lval(char_u *const name, typval_T *const rettv,
|
||||
if (empty1) {
|
||||
lp->ll_n1 = 0;
|
||||
} else {
|
||||
lp->ll_n1 = tv_get_number(&var1); // Is number or string.
|
||||
lp->ll_n1 = (long)tv_get_number(&var1); // Is number or string.
|
||||
tv_clear(&var1);
|
||||
}
|
||||
lp->ll_dict = NULL;
|
||||
@@ -2315,7 +2315,7 @@ static char_u *get_lval(char_u *const name, typval_T *const rettv,
|
||||
* Otherwise "lp->ll_n2" is set to the second index.
|
||||
*/
|
||||
if (lp->ll_range && !lp->ll_empty2) {
|
||||
lp->ll_n2 = tv_get_number(&var2); // Is number or string.
|
||||
lp->ll_n2 = (long)tv_get_number(&var2); // Is number or string.
|
||||
tv_clear(&var2);
|
||||
if (lp->ll_n2 < 0) {
|
||||
ni = tv_list_find(lp->ll_list, lp->ll_n2);
|
||||
@@ -3525,7 +3525,7 @@ static int eval4(char_u **arg, typval_T *rettv, int evaluate)
|
||||
exptype_T type = TYPE_UNKNOWN;
|
||||
int type_is = FALSE; /* TRUE for "is" and "isnot" */
|
||||
int len = 2;
|
||||
long n1, n2;
|
||||
varnumber_T n1, n2;
|
||||
int ic;
|
||||
|
||||
/*
|
||||
@@ -3787,7 +3787,7 @@ static int eval5(char_u **arg, typval_T *rettv, int evaluate)
|
||||
typval_T var2;
|
||||
typval_T var3;
|
||||
int op;
|
||||
long n1, n2;
|
||||
varnumber_T n1, n2;
|
||||
float_T f1 = 0, f2 = 0;
|
||||
char_u *p;
|
||||
|
||||
@@ -3938,7 +3938,7 @@ eval6 (
|
||||
{
|
||||
typval_T var2;
|
||||
int op;
|
||||
long n1, n2;
|
||||
varnumber_T n1, n2;
|
||||
int use_float = FALSE;
|
||||
float_T f1 = 0, f2;
|
||||
bool error = false;
|
||||
@@ -4032,11 +4032,11 @@ eval6 (
|
||||
else if (op == '/') {
|
||||
if (n2 == 0) { /* give an error message? */
|
||||
if (n1 == 0)
|
||||
n1 = -0x7fffffffL - 1L; /* similar to NaN */
|
||||
n1 = -0x7fffffffffffffff - 1; /* similar to NaN */
|
||||
else if (n1 < 0)
|
||||
n1 = -0x7fffffffL;
|
||||
n1 = -0x7fffffffffffffff;
|
||||
else
|
||||
n1 = 0x7fffffffL;
|
||||
n1 = 0x7fffffffffffffff;
|
||||
} else
|
||||
n1 = n1 / n2;
|
||||
} else {
|
||||
@@ -4087,7 +4087,7 @@ static int eval7(
|
||||
int want_string // after "." operator
|
||||
)
|
||||
{
|
||||
long n;
|
||||
varnumber_T n;
|
||||
int len;
|
||||
char_u *s;
|
||||
char_u *start_leader, *end_leader;
|
||||
@@ -4285,7 +4285,7 @@ static int eval7(
|
||||
// Apply logical NOT and unary '-', from right to left, ignore '+'.
|
||||
if (ret == OK && evaluate && end_leader > start_leader) {
|
||||
bool error = false;
|
||||
int val = 0;
|
||||
varnumber_T val = 0;
|
||||
float_T f = 0.0;
|
||||
|
||||
if (rettv->v_type == VAR_FLOAT) {
|
||||
@@ -7614,9 +7614,9 @@ static void f_cursor(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
}
|
||||
} else {
|
||||
line = tv_get_lnum(argvars);
|
||||
col = tv_get_number_chk(&argvars[1], NULL);
|
||||
col = (long)tv_get_number_chk(&argvars[1], NULL);
|
||||
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||
coladd = tv_get_number_chk(&argvars[2], NULL);
|
||||
coladd = (long)tv_get_number_chk(&argvars[2], NULL);
|
||||
}
|
||||
}
|
||||
if (line < 0 || col < 0
|
||||
@@ -8170,7 +8170,7 @@ static void f_extend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
} else if (!tv_check_lock(l1->lv_lock, arg_errmsg, TV_TRANSLATE)) {
|
||||
listitem_T *item;
|
||||
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||
before = tv_get_number_chk(&argvars[2], &error);
|
||||
before = (long)tv_get_number_chk(&argvars[2], &error);
|
||||
if (error) {
|
||||
return; // Type error; errmsg already given.
|
||||
}
|
||||
@@ -10516,6 +10516,7 @@ static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
"mouse",
|
||||
"multi_byte",
|
||||
"multi_lang",
|
||||
"num64",
|
||||
"packages",
|
||||
"path_extra",
|
||||
"persistent_undo",
|
||||
@@ -12945,7 +12946,7 @@ static void f_range(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
varnumber_T start;
|
||||
varnumber_T end;
|
||||
varnumber_T stride = 1;
|
||||
long i;
|
||||
varnumber_T i;
|
||||
bool error = false;
|
||||
|
||||
start = tv_get_number_chk(&argvars[0], &error);
|
||||
@@ -13163,7 +13164,7 @@ static int list2proftime(typval_T *arg, proftime_T *tm) FUNC_ATTR_NONNULL_ALL
|
||||
// in f_reltime() we split up the 64-bit proftime_T into two 32-bit
|
||||
// values, now we combine them again.
|
||||
union {
|
||||
struct { varnumber_T low, high; } split;
|
||||
struct { int32_t low, high; } split;
|
||||
proftime_T prof;
|
||||
} u = { .split.high = n1, .split.low = n2 };
|
||||
|
||||
@@ -13204,7 +13205,7 @@ static void f_reltime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
// (varnumber_T is defined as int). For all our supported platforms, int's
|
||||
// are at least 32-bits wide. So we'll use two 32-bit values to store it.
|
||||
union {
|
||||
struct { varnumber_T low, high; } split;
|
||||
struct { int32_t low, high; } split;
|
||||
proftime_T prof;
|
||||
} u = { .prof = res };
|
||||
|
||||
@@ -15152,8 +15153,8 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)
|
||||
int res;
|
||||
|
||||
if (sortinfo->item_compare_numbers) {
|
||||
const long v1 = tv_get_number(tv1);
|
||||
const long v2 = tv_get_number(tv2);
|
||||
const varnumber_T v1 = tv_get_number(tv1);
|
||||
const varnumber_T v2 = tv_get_number(tv2);
|
||||
|
||||
res = v1 == v2 ? 0 : v1 > v2 ? 1 : -1;
|
||||
goto item_compare_end;
|
||||
@@ -15697,7 +15698,7 @@ static void f_str2float(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
static void f_str2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
int base = 10;
|
||||
long n;
|
||||
varnumber_T n;
|
||||
int what;
|
||||
|
||||
if (argvars[1].v_type != VAR_UNKNOWN) {
|
||||
@@ -18108,7 +18109,7 @@ static int eval_isnamec1(int c)
|
||||
/*
|
||||
* Get number v: variable value.
|
||||
*/
|
||||
long get_vim_var_nr(int idx) FUNC_ATTR_PURE
|
||||
varnumber_T get_vim_var_nr(int idx) FUNC_ATTR_PURE
|
||||
{
|
||||
return vimvars[idx].vv_nr;
|
||||
}
|
||||
|
Reference in New Issue
Block a user