mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.0035: saving and restoring called_emsg is clumsy
Problem: Saving and restoring called_emsg is clumsy. Solution: Count the number of error messages.
This commit is contained in:
parent
70188f5b23
commit
53989554a4
12
src/buffer.c
12
src/buffer.c
@ -3746,19 +3746,17 @@ maketitle(void)
|
|||||||
if (stl_syntax & STL_IN_TITLE)
|
if (stl_syntax & STL_IN_TITLE)
|
||||||
{
|
{
|
||||||
int use_sandbox = FALSE;
|
int use_sandbox = FALSE;
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
|
|
||||||
# ifdef FEAT_EVAL
|
# ifdef FEAT_EVAL
|
||||||
use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
|
use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
|
||||||
# endif
|
# endif
|
||||||
called_emsg = FALSE;
|
|
||||||
build_stl_str_hl(curwin, title_str, sizeof(buf),
|
build_stl_str_hl(curwin, title_str, sizeof(buf),
|
||||||
p_titlestring, use_sandbox,
|
p_titlestring, use_sandbox,
|
||||||
0, maxlen, NULL, NULL);
|
0, maxlen, NULL, NULL);
|
||||||
if (called_emsg)
|
if (called_emsg > called_emsg_before)
|
||||||
set_string_option_direct((char_u *)"titlestring", -1,
|
set_string_option_direct((char_u *)"titlestring", -1,
|
||||||
(char_u *)"", OPT_FREE, SID_ERROR);
|
(char_u *)"", OPT_FREE, SID_ERROR);
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@ -3879,19 +3877,17 @@ maketitle(void)
|
|||||||
if (stl_syntax & STL_IN_ICON)
|
if (stl_syntax & STL_IN_ICON)
|
||||||
{
|
{
|
||||||
int use_sandbox = FALSE;
|
int use_sandbox = FALSE;
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
|
|
||||||
# ifdef FEAT_EVAL
|
# ifdef FEAT_EVAL
|
||||||
use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
|
use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
|
||||||
# endif
|
# endif
|
||||||
called_emsg = FALSE;
|
|
||||||
build_stl_str_hl(curwin, icon_str, sizeof(buf),
|
build_stl_str_hl(curwin, icon_str, sizeof(buf),
|
||||||
p_iconstring, use_sandbox,
|
p_iconstring, use_sandbox,
|
||||||
0, 0, NULL, NULL);
|
0, 0, NULL, NULL);
|
||||||
if (called_emsg)
|
if (called_emsg > called_emsg_before)
|
||||||
set_string_option_direct((char_u *)"iconstring", -1,
|
set_string_option_direct((char_u *)"iconstring", -1,
|
||||||
(char_u *)"", OPT_FREE, SID_ERROR);
|
(char_u *)"", OPT_FREE, SID_ERROR);
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -2370,17 +2370,15 @@ channel_exe_cmd(channel_T *channel, ch_part_T part, typval_T *argv)
|
|||||||
|
|
||||||
if (STRCMP(cmd, "ex") == 0)
|
if (STRCMP(cmd, "ex") == 0)
|
||||||
{
|
{
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
|
|
||||||
called_emsg = FALSE;
|
|
||||||
ch_log(channel, "Executing ex command '%s'", (char *)arg);
|
ch_log(channel, "Executing ex command '%s'", (char *)arg);
|
||||||
++emsg_silent;
|
++emsg_silent;
|
||||||
do_cmdline_cmd(arg);
|
do_cmdline_cmd(arg);
|
||||||
--emsg_silent;
|
--emsg_silent;
|
||||||
if (called_emsg)
|
if (called_emsg > called_emsg_before)
|
||||||
ch_log(channel, "Ex command error: '%s'",
|
ch_log(channel, "Ex command error: '%s'",
|
||||||
(char *)get_vim_var_str(VV_ERRMSG));
|
(char *)get_vim_var_str(VV_ERRMSG));
|
||||||
called_emsg = save_called_emsg;
|
|
||||||
}
|
}
|
||||||
else if (STRCMP(cmd, "normal") == 0)
|
else if (STRCMP(cmd, "normal") == 0)
|
||||||
{
|
{
|
||||||
|
@ -650,14 +650,12 @@ win_redr_ruler(win_T *wp, int always, int ignore_pum)
|
|||||||
#ifdef FEAT_STL_OPT
|
#ifdef FEAT_STL_OPT
|
||||||
if (*p_ruf)
|
if (*p_ruf)
|
||||||
{
|
{
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
|
|
||||||
called_emsg = FALSE;
|
|
||||||
win_redr_custom(wp, TRUE);
|
win_redr_custom(wp, TRUE);
|
||||||
if (called_emsg)
|
if (called_emsg > called_emsg_before)
|
||||||
set_string_option_direct((char_u *)"rulerformat", -1,
|
set_string_option_direct((char_u *)"rulerformat", -1,
|
||||||
(char_u *)"", OPT_FREE, SID_ERROR);
|
(char_u *)"", OPT_FREE, SID_ERROR);
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -167,7 +167,7 @@ check_due_timer(void)
|
|||||||
// the current scope, such as being inside a try/catch.
|
// the current scope, such as being inside a try/catch.
|
||||||
timer_busy = timer_busy > 0 || vgetc_busy > 0;
|
timer_busy = timer_busy > 0 || vgetc_busy > 0;
|
||||||
vgetc_busy = 0;
|
vgetc_busy = 0;
|
||||||
called_emsg = FALSE;
|
called_emsg = 0;
|
||||||
did_emsg = FALSE;
|
did_emsg = FALSE;
|
||||||
did_uncaught_emsg = FALSE;
|
did_uncaught_emsg = FALSE;
|
||||||
must_redraw = 0;
|
must_redraw = 0;
|
||||||
|
@ -226,7 +226,7 @@ EXTERN int did_uncaught_emsg; // emsg() was called and did not
|
|||||||
#endif
|
#endif
|
||||||
EXTERN int did_emsg_syntax; // did_emsg set because of a
|
EXTERN int did_emsg_syntax; // did_emsg set because of a
|
||||||
// syntax error
|
// syntax error
|
||||||
EXTERN int called_emsg; // always set by emsg()
|
EXTERN int called_emsg; // always incremented by emsg()
|
||||||
EXTERN int ex_exitval INIT(= 0); // exit value for ex mode
|
EXTERN int ex_exitval INIT(= 0); // exit value for ex mode
|
||||||
EXTERN int emsg_on_display INIT(= FALSE); // there is an error message
|
EXTERN int emsg_on_display INIT(= FALSE); // there is an error message
|
||||||
EXTERN int rc_did_emsg INIT(= FALSE); // vim_regcomp() called emsg()
|
EXTERN int rc_did_emsg INIT(= FALSE); // vim_regcomp() called emsg()
|
||||||
|
@ -3704,14 +3704,12 @@ get_tabline_label(
|
|||||||
if (**opt != NUL)
|
if (**opt != NUL)
|
||||||
{
|
{
|
||||||
int use_sandbox = FALSE;
|
int use_sandbox = FALSE;
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
char_u res[MAXPATHL];
|
char_u res[MAXPATHL];
|
||||||
tabpage_T *save_curtab;
|
tabpage_T *save_curtab;
|
||||||
char_u *opt_name = (char_u *)(tooltip ? "guitabtooltip"
|
char_u *opt_name = (char_u *)(tooltip ? "guitabtooltip"
|
||||||
: "guitablabel");
|
: "guitablabel");
|
||||||
|
|
||||||
called_emsg = FALSE;
|
|
||||||
|
|
||||||
printer_page_num = tabpage_index(tp);
|
printer_page_num = tabpage_index(tp);
|
||||||
# ifdef FEAT_EVAL
|
# ifdef FEAT_EVAL
|
||||||
set_vim_var_nr(VV_LNUM, printer_page_num);
|
set_vim_var_nr(VV_LNUM, printer_page_num);
|
||||||
@ -3742,10 +3740,9 @@ get_tabline_label(
|
|||||||
curwin = curtab->tp_curwin;
|
curwin = curtab->tp_curwin;
|
||||||
curbuf = curwin->w_buffer;
|
curbuf = curwin->w_buffer;
|
||||||
|
|
||||||
if (called_emsg)
|
if (called_emsg > called_emsg_before)
|
||||||
set_string_option_direct(opt_name, -1,
|
set_string_option_direct(opt_name, -1,
|
||||||
(char_u *)"", OPT_FREE, SID_ERROR);
|
(char_u *)"", OPT_FREE, SID_ERROR);
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If 'guitablabel'/'guitabtooltip' is not set or the result is empty then
|
// If 'guitablabel'/'guitabtooltip' is not set or the result is empty then
|
||||||
|
@ -4055,7 +4055,7 @@ next_search_hl(
|
|||||||
linenr_T l;
|
linenr_T l;
|
||||||
colnr_T matchcol;
|
colnr_T matchcol;
|
||||||
long nmatched;
|
long nmatched;
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
|
|
||||||
// for :{range}s/pat only highlight inside the range
|
// for :{range}s/pat only highlight inside the range
|
||||||
if (lnum < search_first_line || lnum > search_last_line)
|
if (lnum < search_first_line || lnum > search_last_line)
|
||||||
@ -4081,7 +4081,6 @@ next_search_hl(
|
|||||||
* Repeat searching for a match until one is found that includes "mincol"
|
* Repeat searching for a match until one is found that includes "mincol"
|
||||||
* or none is found in this line.
|
* or none is found in this line.
|
||||||
*/
|
*/
|
||||||
called_emsg = FALSE;
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
# ifdef FEAT_RELTIME
|
# ifdef FEAT_RELTIME
|
||||||
@ -4143,7 +4142,7 @@ next_search_hl(
|
|||||||
if (regprog_is_copy)
|
if (regprog_is_copy)
|
||||||
cur->match.regprog = cur->hl.rm.regprog;
|
cur->match.regprog = cur->hl.rm.regprog;
|
||||||
|
|
||||||
if (called_emsg || got_int || timed_out)
|
if (called_emsg > called_emsg_before || got_int || timed_out)
|
||||||
{
|
{
|
||||||
// Error while handling regexp: stop using this regexp.
|
// Error while handling regexp: stop using this regexp.
|
||||||
if (shl == search_hl)
|
if (shl == search_hl)
|
||||||
@ -4176,9 +4175,6 @@ next_search_hl(
|
|||||||
break; // useful match found
|
break; // useful match found
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore called_emsg for assert_fails().
|
|
||||||
called_emsg = save_called_emsg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4140,7 +4140,7 @@ cmdsrv_main(
|
|||||||
if (xterm_dpy != NULL)
|
if (xterm_dpy != NULL)
|
||||||
res = serverGetVimNames(xterm_dpy);
|
res = serverGetVimNames(xterm_dpy);
|
||||||
# endif
|
# endif
|
||||||
if (called_emsg)
|
if (did_emsg)
|
||||||
mch_errmsg("\n");
|
mch_errmsg("\n");
|
||||||
}
|
}
|
||||||
else if (STRICMP(argv[i], "--servername") == 0)
|
else if (STRICMP(argv[i], "--servername") == 0)
|
||||||
|
@ -581,7 +581,7 @@ ignore_error(char_u *msg)
|
|||||||
#if !defined(HAVE_STRERROR) || defined(PROTO)
|
#if !defined(HAVE_STRERROR) || defined(PROTO)
|
||||||
/*
|
/*
|
||||||
* Replacement for perror() that behaves more or less like emsg() was called.
|
* Replacement for perror() that behaves more or less like emsg() was called.
|
||||||
* v:errmsg will be set and called_emsg will be set.
|
* v:errmsg will be set and called_emsg will be incremented.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
do_perror(char *msg)
|
do_perror(char *msg)
|
||||||
@ -620,7 +620,7 @@ emsg_core(char_u *s)
|
|||||||
return msg_use_printf() ? FALSE : msg((char *)s);
|
return msg_use_printf() ? FALSE : msg((char *)s);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
called_emsg = TRUE;
|
++called_emsg;
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
// If "emsg_severe" is TRUE: When an error exception is to be thrown,
|
// If "emsg_severe" is TRUE: When an error exception is to be thrown,
|
||||||
|
@ -2556,7 +2556,7 @@ vim_regcomp(char_u *expr_arg, int re_flags)
|
|||||||
{
|
{
|
||||||
regprog_T *prog = NULL;
|
regprog_T *prog = NULL;
|
||||||
char_u *expr = expr_arg;
|
char_u *expr = expr_arg;
|
||||||
int save_called_emsg;
|
int called_emsg_before;
|
||||||
|
|
||||||
regexp_engine = p_re;
|
regexp_engine = p_re;
|
||||||
|
|
||||||
@ -2592,8 +2592,7 @@ vim_regcomp(char_u *expr_arg, int re_flags)
|
|||||||
/*
|
/*
|
||||||
* First try the NFA engine, unless backtracking was requested.
|
* First try the NFA engine, unless backtracking was requested.
|
||||||
*/
|
*/
|
||||||
save_called_emsg = called_emsg;
|
called_emsg_before = called_emsg;
|
||||||
called_emsg = FALSE;
|
|
||||||
if (regexp_engine != BACKTRACKING_ENGINE)
|
if (regexp_engine != BACKTRACKING_ENGINE)
|
||||||
prog = nfa_regengine.regcomp(expr,
|
prog = nfa_regengine.regcomp(expr,
|
||||||
re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0));
|
re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0));
|
||||||
@ -2624,13 +2623,13 @@ vim_regcomp(char_u *expr_arg, int re_flags)
|
|||||||
* but are still valid patterns, thus a retry should work.
|
* but are still valid patterns, thus a retry should work.
|
||||||
* But don't try if an error message was given.
|
* But don't try if an error message was given.
|
||||||
*/
|
*/
|
||||||
if (regexp_engine == AUTOMATIC_ENGINE && !called_emsg)
|
if (regexp_engine == AUTOMATIC_ENGINE
|
||||||
|
&& called_emsg == called_emsg_before)
|
||||||
{
|
{
|
||||||
regexp_engine = BACKTRACKING_ENGINE;
|
regexp_engine = BACKTRACKING_ENGINE;
|
||||||
prog = bt_regengine.regcomp(expr, re_flags);
|
prog = bt_regengine.regcomp(expr, re_flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
|
|
||||||
if (prog != NULL)
|
if (prog != NULL)
|
||||||
{
|
{
|
||||||
|
18
src/search.c
18
src/search.c
@ -624,7 +624,7 @@ searchit(
|
|||||||
long nmatched;
|
long nmatched;
|
||||||
int submatch = 0;
|
int submatch = 0;
|
||||||
int first_match = TRUE;
|
int first_match = TRUE;
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
#ifdef FEAT_SEARCH_EXTRA
|
#ifdef FEAT_SEARCH_EXTRA
|
||||||
int break_loop = FALSE;
|
int break_loop = FALSE;
|
||||||
#endif
|
#endif
|
||||||
@ -654,7 +654,6 @@ searchit(
|
|||||||
/*
|
/*
|
||||||
* find the string
|
* find the string
|
||||||
*/
|
*/
|
||||||
called_emsg = FALSE;
|
|
||||||
do // loop for count
|
do // loop for count
|
||||||
{
|
{
|
||||||
// When not accepting a match at the start position set "extra_col" to
|
// When not accepting a match at the start position set "extra_col" to
|
||||||
@ -745,7 +744,7 @@ searchit(
|
|||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
// Abort searching on an error (e.g., out of stack).
|
// Abort searching on an error (e.g., out of stack).
|
||||||
if (called_emsg
|
if (called_emsg > called_emsg_before
|
||||||
#ifdef FEAT_RELTIME
|
#ifdef FEAT_RELTIME
|
||||||
|| (timed_out != NULL && *timed_out)
|
|| (timed_out != NULL && *timed_out)
|
||||||
#endif
|
#endif
|
||||||
@ -1055,7 +1054,8 @@ searchit(
|
|||||||
* specified, after an interrupt, after a match and after looping
|
* specified, after an interrupt, after a match and after looping
|
||||||
* twice.
|
* twice.
|
||||||
*/
|
*/
|
||||||
if (!p_ws || stop_lnum != 0 || got_int || called_emsg
|
if (!p_ws || stop_lnum != 0 || got_int
|
||||||
|
|| called_emsg > called_emsg_before
|
||||||
#ifdef FEAT_RELTIME
|
#ifdef FEAT_RELTIME
|
||||||
|| (timed_out != NULL && *timed_out)
|
|| (timed_out != NULL && *timed_out)
|
||||||
#endif
|
#endif
|
||||||
@ -1082,7 +1082,7 @@ searchit(
|
|||||||
if (extra_arg != NULL)
|
if (extra_arg != NULL)
|
||||||
extra_arg->sa_wrapped = TRUE;
|
extra_arg->sa_wrapped = TRUE;
|
||||||
}
|
}
|
||||||
if (got_int || called_emsg
|
if (got_int || called_emsg > called_emsg_before
|
||||||
#ifdef FEAT_RELTIME
|
#ifdef FEAT_RELTIME
|
||||||
|| (timed_out != NULL && *timed_out)
|
|| (timed_out != NULL && *timed_out)
|
||||||
#endif
|
#endif
|
||||||
@ -1096,8 +1096,6 @@ searchit(
|
|||||||
|
|
||||||
vim_regfree(regmatch.regprog);
|
vim_regfree(regmatch.regprog);
|
||||||
|
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
|
|
||||||
if (!found) // did not find it
|
if (!found) // did not find it
|
||||||
{
|
{
|
||||||
if (got_int)
|
if (got_int)
|
||||||
@ -4799,7 +4797,7 @@ is_zero_width(char_u *pattern, int move, pos_T *cur, int direction)
|
|||||||
int nmatched = 0;
|
int nmatched = 0;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
pos_T pos;
|
pos_T pos;
|
||||||
int save_called_emsg = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
int flag = 0;
|
int flag = 0;
|
||||||
|
|
||||||
if (pattern == NULL)
|
if (pattern == NULL)
|
||||||
@ -4828,7 +4826,6 @@ is_zero_width(char_u *pattern, int move, pos_T *cur, int direction)
|
|||||||
{
|
{
|
||||||
// Zero-width pattern should match somewhere, then we can check if
|
// Zero-width pattern should match somewhere, then we can check if
|
||||||
// start and end are in the same position.
|
// start and end are in the same position.
|
||||||
called_emsg = FALSE;
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
regmatch.startpos[0].col++;
|
regmatch.startpos[0].col++;
|
||||||
@ -4839,7 +4836,7 @@ is_zero_width(char_u *pattern, int move, pos_T *cur, int direction)
|
|||||||
} while (direction == FORWARD ? regmatch.startpos[0].col < pos.col
|
} while (direction == FORWARD ? regmatch.startpos[0].col < pos.col
|
||||||
: regmatch.startpos[0].col > pos.col);
|
: regmatch.startpos[0].col > pos.col);
|
||||||
|
|
||||||
if (!called_emsg)
|
if (called_emsg == called_emsg_before)
|
||||||
{
|
{
|
||||||
result = (nmatched != 0
|
result = (nmatched != 0
|
||||||
&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
|
&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
|
||||||
@ -4847,7 +4844,6 @@ is_zero_width(char_u *pattern, int move, pos_T *cur, int direction)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
called_emsg |= save_called_emsg;
|
|
||||||
vim_regfree(regmatch.regprog);
|
vim_regfree(regmatch.regprog);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -424,15 +424,15 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
|
|||||||
char_u *cmd = tv_get_string_chk(&argvars[0]);
|
char_u *cmd = tv_get_string_chk(&argvars[0]);
|
||||||
garray_T ga;
|
garray_T ga;
|
||||||
int save_trylevel = trylevel;
|
int save_trylevel = trylevel;
|
||||||
|
int called_emsg_before = called_emsg;
|
||||||
|
|
||||||
// trylevel must be zero for a ":throw" command to be considered failed
|
// trylevel must be zero for a ":throw" command to be considered failed
|
||||||
trylevel = 0;
|
trylevel = 0;
|
||||||
called_emsg = FALSE;
|
|
||||||
suppress_errthrow = TRUE;
|
suppress_errthrow = TRUE;
|
||||||
emsg_silent = TRUE;
|
emsg_silent = TRUE;
|
||||||
|
|
||||||
do_cmdline_cmd(cmd);
|
do_cmdline_cmd(cmd);
|
||||||
if (!called_emsg)
|
if (called_emsg == called_emsg_before)
|
||||||
{
|
{
|
||||||
prepare_assert_error(&ga);
|
prepare_assert_error(&ga);
|
||||||
ga_concat(&ga, (char_u *)"command did not fail: ");
|
ga_concat(&ga, (char_u *)"command did not fail: ");
|
||||||
@ -461,7 +461,6 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
trylevel = save_trylevel;
|
trylevel = save_trylevel;
|
||||||
called_emsg = FALSE;
|
|
||||||
suppress_errthrow = FALSE;
|
suppress_errthrow = FALSE;
|
||||||
emsg_silent = FALSE;
|
emsg_silent = FALSE;
|
||||||
emsg_on_display = FALSE;
|
emsg_on_display = FALSE;
|
||||||
|
@ -742,6 +742,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
35,
|
||||||
/**/
|
/**/
|
||||||
34,
|
34,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user