Mercurial > vim
diff src/ex_docmd.c @ 17336:81705f4d9e03 v8.1.1667
patch 8.1.1667: flags for Ex commands may clash with other symbols
commit https://github.com/vim/vim/commit/8071cb2c646c9d38dcd4e3ccd377dce07705f031
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Jul 12 17:58:01 2019 +0200
patch 8.1.1667: flags for Ex commands may clash with other symbols
Problem: Flags for Ex commands may clash with other symbols.
Solution: Prepend with EX_.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 12 Jul 2019 18:00:06 +0200 |
parents | 40c4cb095d53 |
children | ce35cdbe9f74 |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1844,7 +1844,7 @@ do_one_cmd( if (*ea.cmd == '|' || (exmode_active && ea.line1 != ea.line2)) { ea.cmdidx = CMD_print; - ea.argt = RANGE+COUNT+TRLBAR; + ea.argt = EX_RANGE+EX_COUNT+EX_TRLBAR; if ((errormsg = invalid_range(&ea)) == NULL) { correct_range(&ea); @@ -1976,26 +1976,26 @@ do_one_cmd( if (!ea.skip) { #ifdef HAVE_SANDBOX - if (sandbox != 0 && !(ea.argt & SBOXOK)) + if (sandbox != 0 && !(ea.argt & EX_SBOXOK)) { // Command not allowed in sandbox. errormsg = _(e_sandbox); goto doend; } #endif - if (restricted != 0 && (ea.argt & RESTRICT)) + if (restricted != 0 && (ea.argt & EX_RESTRICT)) { errormsg = _("E981: Command not allowed in rvim"); goto doend; } - if (!curbuf->b_p_ma && (ea.argt & MODIFY)) + if (!curbuf->b_p_ma && (ea.argt & EX_MODIFY)) { /* Command not allowed in non-'modifiable' buffer */ errormsg = _(e_modifiable); goto doend; } - if (text_locked() && !(ea.argt & CMDWIN) + if (text_locked() && !(ea.argt & EX_CMDWIN) && !IS_USER_CMDIDX(ea.cmdidx)) { /* Command not allowed when editing the command line. */ @@ -2007,7 +2007,7 @@ do_one_cmd( * Do allow ":checktime" (it is postponed). * Do allow ":edit" (check for an argument later). * Do allow ":file" with no arguments (check for an argument later). */ - if (!(ea.argt & CMDWIN) + if (!(ea.argt & EX_CMDWIN) && ea.cmdidx != CMD_checktime && ea.cmdidx != CMD_edit && ea.cmdidx != CMD_file @@ -2015,7 +2015,7 @@ do_one_cmd( && curbuf_locked()) goto doend; - if (!ni && !(ea.argt & RANGE) && ea.addr_count > 0) + if (!ni && !(ea.argt & EX_RANGE) && ea.addr_count > 0) { /* no range allowed */ errormsg = _(e_norange); @@ -2023,7 +2023,7 @@ do_one_cmd( } } - if (!ni && !(ea.argt & BANG) && ea.forceit) /* no <!> allowed */ + if (!ni && !(ea.argt & EX_BANG) && ea.forceit) // no <!> allowed { errormsg = _(e_nobang); goto doend; @@ -2033,7 +2033,7 @@ do_one_cmd( * Don't complain about the range if it is not used * (could happen if line_count is accidentally set to 0). */ - if (!ea.skip && !ni && (ea.argt & RANGE)) + if (!ea.skip && !ni && (ea.argt & EX_RANGE)) { /* * If the range is backwards, ask for confirmation and, if given, swap @@ -2068,7 +2068,7 @@ do_one_cmd( correct_range(&ea); #ifdef FEAT_FOLDING - if (((ea.argt & WHOLEFOLD) || ea.addr_count >= 2) && !global_busy + if (((ea.argt & EX_WHOLEFOLD) || ea.addr_count >= 2) && !global_busy && ea.addr_type == ADDR_LINES) { /* Put the first line at the start of a closed fold, put the last line @@ -2105,7 +2105,7 @@ do_one_cmd( * Check for "++opt=val" argument. * Must be first, allow ":w ++enc=utf8 !cmd" */ - if (ea.argt & ARGOPT) + if (ea.argt & EX_ARGOPT) while (ea.arg[0] == '+' && ea.arg[1] == '+') if (getargopt(&ea) == FAIL && !ni) { @@ -2161,14 +2161,14 @@ do_one_cmd( * Check for "+command" argument, before checking for next command. * Don't do this for ":read !cmd" and ":write !cmd". */ - if ((ea.argt & EDITCMD) && !ea.usefilter) + if ((ea.argt & EX_CMDARG) && !ea.usefilter) ea.do_ecmd_cmd = getargcmd(&ea.arg); /* * Check for '|' to separate commands and '"' to start comments. * Don't do this for ":read !cmd" and ":write !cmd". */ - if ((ea.argt & TRLBAR) && !ea.usefilter) + if ((ea.argt & EX_TRLBAR) && !ea.usefilter) separate_nextcmd(&ea); /* @@ -2201,7 +2201,7 @@ do_one_cmd( } } - if ((ea.argt & DFLALL) && ea.addr_count == 0) + if ((ea.argt & EX_DFLALL) && ea.addr_count == 0) { buf_T *buf; @@ -2251,17 +2251,17 @@ do_one_cmd( case ADDR_NONE: case ADDR_UNSIGNED: case ADDR_QUICKFIX: - iemsg(_("INTERNAL: Cannot use DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX")); + iemsg(_("INTERNAL: Cannot use EX_DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX")); break; } } /* accept numbered register only when no count allowed (:put) */ - if ( (ea.argt & REGSTR) + if ( (ea.argt & EX_REGSTR) && *ea.arg != NUL /* Do not allow register = for user commands */ && (!IS_USER_CMDIDX(ea.cmdidx) || *ea.arg != '=') - && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg))) + && !((ea.argt & EX_COUNT) && VIM_ISDIGIT(*ea.arg))) { #ifndef FEAT_CLIPBOARD /* check these explicitly for a more specific error message */ @@ -2288,16 +2288,16 @@ do_one_cmd( } /* - * Check for a count. When accepting a BUFNAME, don't use "123foo" as a + * Check for a count. When accepting a EX_BUFNAME, don't use "123foo" as a * count, it's a buffer name. */ - if ((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg) - && (!(ea.argt & BUFNAME) || *(p = skipdigits(ea.arg)) == NUL + if ((ea.argt & EX_COUNT) && VIM_ISDIGIT(*ea.arg) + && (!(ea.argt & EX_BUFNAME) || *(p = skipdigits(ea.arg)) == NUL || VIM_ISWHITE(*p))) { n = getdigits(&ea.arg); ea.arg = skipwhite(ea.arg); - if (n <= 0 && !ni && (ea.argt & ZEROR) == 0) + if (n <= 0 && !ni && (ea.argt & EX_ZEROR) == 0) { errormsg = _(e_zerocount); goto doend; @@ -2324,17 +2324,17 @@ do_one_cmd( /* * Check for flags: 'l', 'p' and '#'. */ - if (ea.argt & EXFLAGS) + if (ea.argt & EX_FLAGS) get_flags(&ea); - /* no arguments allowed */ - if (!ni && !(ea.argt & EXTRA) && *ea.arg != NUL - && *ea.arg != '"' && (*ea.arg != '|' || (ea.argt & TRLBAR) == 0)) - { + if (!ni && !(ea.argt & EX_EXTRA) && *ea.arg != NUL + && *ea.arg != '"' && (*ea.arg != '|' || (ea.argt & EX_TRLBAR) == 0)) + { + // no arguments allowed but there is something errormsg = _(e_trailing); goto doend; } - if (!ni && (ea.argt & NEEDARG) && *ea.arg == NUL) + if (!ni && (ea.argt & EX_NEEDARG) && *ea.arg == NUL) { errormsg = _(e_argreq); goto doend; @@ -2368,7 +2368,7 @@ do_one_cmd( break; /* Commands that handle '|' themselves. Check: A command should - * either have the TRLBAR flag, appear in this list or appear in + * either have the EX_TRLBAR flag, appear in this list or appear in * the list at ":help :bar". */ case CMD_aboveleft: case CMD_and: @@ -2435,7 +2435,7 @@ do_one_cmd( } #endif - if (ea.argt & XFILE) + if (ea.argt & EX_XFILE) { if (expand_filename(&ea, cmdlinep, &errormsg) == FAIL) goto doend; @@ -2445,7 +2445,7 @@ do_one_cmd( * Accept buffer name. Cannot be used at the same time with a buffer * number. Don't do this for a user command. */ - if ((ea.argt & BUFNAME) && *ea.arg != NUL && ea.addr_count == 0 + if ((ea.argt & EX_BUFNAME) && *ea.arg != NUL && ea.addr_count == 0 && !IS_USER_CMDIDX(ea.cmdidx)) { /* @@ -2462,7 +2462,7 @@ do_one_cmd( while (p > ea.arg && VIM_ISWHITE(p[-1])) --p; } - ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0, + ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & EX_BUFUNL) != 0, FALSE, FALSE); if (ea.line2 < 0) /* failed */ goto doend; @@ -3528,7 +3528,7 @@ set_one_cmd_context( } /* Does command allow "+command"? */ - if ((ea.argt & EDITCMD) && !usefilter && *arg == '+') + if ((ea.argt & EX_CMDARG) && !usefilter && *arg == '+') { /* Check if we're in the +command */ p = arg + 1; @@ -3546,7 +3546,7 @@ set_one_cmd_context( * Check for '|' to separate commands and '"' to start comments. * Don't do this for ":read !cmd" and ":write !cmd". */ - if ((ea.argt & TRLBAR) && !usefilter) + if ((ea.argt & EX_TRLBAR) && !usefilter) { p = arg; /* ":redir @" is not the start of a comment */ @@ -3559,7 +3559,7 @@ set_one_cmd_context( if (p[1] != NUL) ++p; } - else if ( (*p == '"' && !(ea.argt & NOTRLCOM)) + else if ( (*p == '"' && !(ea.argt & EX_NOTRLCOM)) || *p == '|' || *p == '\n') { if (*(p - 1) != '\\') @@ -3573,9 +3573,9 @@ set_one_cmd_context( } } - /* no arguments allowed */ - if (!(ea.argt & EXTRA) && *arg != NUL && - vim_strchr((char_u *)"|\"", *arg) == NULL) + if (!(ea.argt & EX_EXTRA) && *arg != NUL + && vim_strchr((char_u *)"|\"", *arg) == NULL) + // no arguments allowed but there is something return NULL; /* Find start of last argument (argument just before cursor): */ @@ -3597,7 +3597,7 @@ set_one_cmd_context( } } - if (ea.argt & XFILE) + if (ea.argt & EX_XFILE) { int c; int in_quote = FALSE; @@ -3630,7 +3630,7 @@ set_one_cmd_context( * characters that end the command and white space. */ else if (c == '|' || c == '\n' || c == '"' || (VIM_ISWHITE(c) #ifdef SPACE_IN_FILENAME - && (!(ea.argt & NOSPC) || usefilter) + && (!(ea.argt & EX_NOSPC) || usefilter) #endif )) { @@ -4001,8 +4001,8 @@ set_one_cmd_context( case CMD_USER_BUF: if (compl != EXPAND_NOTHING) { - // XFILE: file names are handled above - if (!(ea.argt & XFILE)) + // EX_XFILE: file names are handled above + if (!(ea.argt & EX_XFILE)) { #ifdef FEAT_MENU if (compl == EXPAND_MENUS) @@ -4652,7 +4652,7 @@ invalid_range(exarg_T *eap) || eap->line1 > eap->line2) return _(e_invrange); - if (eap->argt & RANGE) + if (eap->argt & EX_RANGE) { switch (eap->addr_type) { @@ -4738,7 +4738,7 @@ invalid_range(exarg_T *eap) static void correct_range(exarg_T *eap) { - if (!(eap->argt & ZEROR)) /* zero in range not allowed */ + if (!(eap->argt & EX_ZEROR)) // zero in range not allowed { if (eap->line1 == 0) eap->line1 = 1; @@ -4947,7 +4947,7 @@ expand_filename( && eap->cmdidx != CMD_make && eap->cmdidx != CMD_terminal #ifndef UNIX - && !(eap->argt & NOSPC) + && !(eap->argt & EX_NOSPC) #endif ) { @@ -4999,7 +4999,7 @@ expand_filename( * One file argument: Expand wildcards. * Don't do this with ":r !command" or ":w !command". */ - if ((eap->argt & NOSPC) && !eap->usefilter) + if ((eap->argt & EX_NOSPC) && !eap->usefilter) { /* * May do this twice: @@ -5150,7 +5150,7 @@ separate_nextcmd(exarg_T *eap) { if (*p == Ctrl_V) { - if (eap->argt & (USECTRLV | XFILE)) + if (eap->argt & (EX_CTRLV | EX_XFILE)) ++p; /* skip CTRL-V and next char */ else /* remove CTRL-V and skip next char */ @@ -5161,7 +5161,7 @@ separate_nextcmd(exarg_T *eap) #ifdef FEAT_EVAL /* Skip over `=expr` when wildcards are expanded. */ - else if (p[0] == '`' && p[1] == '=' && (eap->argt & XFILE)) + else if (p[0] == '`' && p[1] == '=' && (eap->argt & EX_XFILE)) { p += 2; (void)skip_expr(&p); @@ -5171,7 +5171,7 @@ separate_nextcmd(exarg_T *eap) /* Check for '"': start of comment or '|': next command */ /* :@" and :*" do not start a comment! * :redir @" doesn't either. */ - else if ((*p == '"' && !(eap->argt & NOTRLCOM) + else if ((*p == '"' && !(eap->argt & EX_NOTRLCOM) && ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star) || p != eap->arg) && (eap->cmdidx != CMD_redir @@ -5179,11 +5179,11 @@ separate_nextcmd(exarg_T *eap) || *p == '|' || *p == '\n') { /* - * We remove the '\' before the '|', unless USECTRLV is used + * We remove the '\' before the '|', unless EX_CTRLV is used * AND 'b' is present in 'cpoptions'. */ if ((vim_strchr(p_cpo, CPO_BAR) == NULL - || !(eap->argt & USECTRLV)) && *(p - 1) == '\\') + || !(eap->argt & EX_CTRLV)) && *(p - 1) == '\\') { STRMOVE(p - 1, p); /* remove the '\' */ --p; @@ -5197,7 +5197,7 @@ separate_nextcmd(exarg_T *eap) } } - if (!(eap->argt & NOTRLCOM)) /* remove trailing spaces */ + if (!(eap->argt & EX_NOTRLCOM)) /* remove trailing spaces */ del_trailing_spaces(eap->arg); } @@ -9276,6 +9276,7 @@ find_cmdline_var(char_u *src, int *usedl * '#' to curwin->w_altfile * '<cword>' to word under the cursor * '<cWORD>' to WORD under the cursor + * '<cexpr>' to C-expression under the cursor * '<cfile>' to path name under the cursor * '<sfile>' to sourced file name * '<slnum>' to sourced file line number