Patch 9.0.0637
Problem: Syntax of commands in Vim9 script depends on +eval feature.
Solution: Use same syntax with and without the +eval feature.
Files: src/ex_docmd.c, src/errors.h, src/testdir/test10.in,
src/testdir/test10.ok, src/testdir/Make_all.mak
*** ../vim-9.0.0636/src/ex_docmd.c 2022-10-01 19:43:48.606494048 +0100
--- src/ex_docmd.c 2022-10-02 12:34:51.948576549 +0100
***************
*** 1684,1693 ****
static int
comment_start(char_u *p, int starts_with_colon UNUSED)
{
- #ifdef FEAT_EVAL
if (in_vim9script())
return p[0] == '#' && !starts_with_colon;
- #endif
return *p == '"';
}
--- 1684,1691 ----
***************
*** 1736,1744 ****
int ni; // set when Not Implemented
char_u *cmd;
int starts_with_colon = FALSE;
- #ifdef FEAT_EVAL
int may_have_range;
int vim9script;
int did_set_expr_line = FALSE;
#endif
int sourcing = flags & DOCMD_VERBOSE;
--- 1734,1742 ----
int ni; // set when Not Implemented
char_u *cmd;
int starts_with_colon = FALSE;
int may_have_range;
int vim9script;
+ #ifdef FEAT_EVAL
int did_set_expr_line = FALSE;
#endif
int sourcing = flags & DOCMD_VERBOSE;
***************
*** 1787,1795 ****
if (parse_command_modifiers(&ea, &errormsg, &cmdmod, FALSE) == FAIL)
goto doend;
apply_cmdmod(&cmdmod);
- #ifdef FEAT_EVAL
- vim9script = in_vim9script();
- #endif
after_modifier = ea.cmd;
#ifdef FEAT_EVAL
--- 1785,1790 ----
***************
*** 1805,1813 ****
* We need the command to know what kind of range it uses.
*/
cmd = ea.cmd;
! #ifdef FEAT_EVAL
// In Vim9 script a colon is required before the range. This may also be
// after command modifiers.
if (vim9script && (flags & DOCMD_RANGEOK) == 0)
{
may_have_range = FALSE;
--- 1800,1809 ----
* We need the command to know what kind of range it uses.
*/
cmd = ea.cmd;
!
// In Vim9 script a colon is required before the range. This may also be
// after command modifiers.
+ vim9script = in_vim9script();
if (vim9script && (flags & DOCMD_RANGEOK) == 0)
{
may_have_range = FALSE;
***************
*** 1822,1837 ****
else
may_have_range = TRUE;
if (may_have_range)
- #endif
ea.cmd = skip_range(ea.cmd, TRUE, NULL);
- #ifdef FEAT_EVAL
if (vim9script && !may_have_range)
{
if (ea.cmd == cmd + 1 && *cmd == '$')
// should be "$VAR = val"
--ea.cmd;
p = find_ex_command(&ea, NULL, lookup_scriptitem, NULL);
if (ea.cmdidx == CMD_SIZE)
{
char_u *ar = skip_range(ea.cmd, TRUE, NULL);
--- 1818,1835 ----
else
may_have_range = TRUE;
if (may_have_range)
ea.cmd = skip_range(ea.cmd, TRUE, NULL);
if (vim9script && !may_have_range)
{
if (ea.cmd == cmd + 1 && *cmd == '$')
// should be "$VAR = val"
--ea.cmd;
+ #ifdef FEAT_EVAL
p = find_ex_command(&ea, NULL, lookup_scriptitem, NULL);
+ #else
+ p = find_ex_command(&ea, NULL, NULL, NULL);
+ #endif
if (ea.cmdidx == CMD_SIZE)
{
char_u *ar = skip_range(ea.cmd, TRUE, NULL);
***************
*** 1846,1852 ****
}
}
else
- #endif
p = find_ex_command(&ea, NULL, NULL, NULL);
#ifdef FEAT_EVAL
--- 1844,1849 ----
***************
*** 1930,1942 ****
}
ea.cmd = cmd;
- #ifdef FEAT_EVAL
if (!may_have_range)
ea.line1 = ea.line2 = default_address(&ea);
! else
! #endif
! if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
! goto doend;
/*
* 5. Parse the command.
--- 1927,1936 ----
}
ea.cmd = cmd;
if (!may_have_range)
ea.line1 = ea.line2 = default_address(&ea);
! else if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
! goto doend;
/*
* 5. Parse the command.
***************
*** 5275,5298 ****
}
#endif
! // Check for '"': start of comment or '|': next command
// :@" and :*" do not start a comment!
// :redir @" doesn't either.
else if ((*p == '"'
- #ifdef FEAT_EVAL
&& !in_vim9script()
- #endif
&& !(eap->argt & EX_NOTRLCOM)
&& ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
|| p != eap->arg)
&& (eap->cmdidx != CMD_redir
|| p != eap->arg + 1 || p[-1] != '@'))
- #ifdef FEAT_EVAL
|| (*p == '#'
&& in_vim9script()
&& !(eap->argt & EX_NOTRLCOM)
&& p > eap->cmd && VIM_ISWHITE(p[-1]))
- #endif
|| *p == '|' || *p == '\n')
{
/*
--- 5269,5288 ----
}
#endif
! // Check for '"'/'#': start of comment or '|': next command
// :@" and :*" do not start a comment!
// :redir @" doesn't either.
else if ((*p == '"'
&& !in_vim9script()
&& !(eap->argt & EX_NOTRLCOM)
&& ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
|| p != eap->arg)
&& (eap->cmdidx != CMD_redir
|| p != eap->arg + 1 || p[-1] != '@'))
|| (*p == '#'
&& in_vim9script()
&& !(eap->argt & EX_NOTRLCOM)
&& p > eap->cmd && VIM_ISWHITE(p[-1]))
|| *p == '|' || *p == '\n')
{
/*
***************
*** 5636,5645 ****
{
int comment_char = '"';
- #ifdef FEAT_EVAL
if (in_vim9script())
comment_char = '#';
- #endif
return (c == NUL || c == '|' || c == comment_char || c == '\n');
}
--- 5626,5633 ----
***************
*** 5654,5665 ****
if (c == NUL || c == '|' || c == '\n')
return TRUE;
- #ifdef FEAT_EVAL
if (in_vim9script())
// # starts a comment, #{ might be a mistake, #{{ can start a fold
return c == '#' && (cmd[1] != '{' || cmd[2] == '{')
&& (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
- #endif
return c == '"';
}
--- 5642,5651 ----
*** ../vim-9.0.0636/src/errors.h 2022-09-29 19:14:37.675876694 +0100
--- src/errors.h 2022-10-02 12:12:17.384390042 +0100
***************
*** 2713,2720 ****
--- 2713,2722 ----
INIT(= N_("E1048: Item not found in script: %s"));
EXTERN char e_item_not_exported_in_script_str[]
INIT(= N_("E1049: Item not exported in script: %s"));
+ #endif
EXTERN char e_colon_required_before_range_str[]
INIT(= N_("E1050: Colon required before a range: %s"));
+ #ifdef FEAT_EVAL
EXTERN char e_wrong_argument_type_for_plus[]
INIT(= N_("E1051: Wrong argument type for +"));
EXTERN char e_cannot_declare_an_option[]
*** ../vim-9.0.0636/src/testdir/test10.in 2022-10-02 12:56:33.433866218
+0100
--- src/testdir/test10.in 2022-10-02 12:49:20.516556629 +0100
***************
*** 0 ****
--- 1,21 ----
+ Test that vim9script also works without the +eval feature.
+
+ STARTTEST
+ :/^START/+1,/^END/-1:w! Xvim9
+ :so Xvim9
+ ENDTEST
+
+ START
+ vim9script
+
+ if 1
+ echo 'this is skipped without +eval'
+ endif
+
+ # colon required for a range
+ :$-1,$w! test.out
+ qa!
+ END
+
+ first line
+ last line
*** ../vim-9.0.0636/src/testdir/test10.ok 2022-10-02 12:56:33.437866195
+0100
--- src/testdir/test10.ok 2022-10-02 12:42:15.000778606 +0100
***************
*** 0 ****
--- 1,2 ----
+ first line
+ last line
*** ../vim-9.0.0636/src/testdir/Make_all.mak 2022-09-23 19:42:27.814236815
+0100
--- src/testdir/Make_all.mak 2022-10-02 12:42:36.840498850 +0100
***************
*** 12,17 ****
--- 12,18 ----
# Tests for tiny and small builds.
SCRIPTS_TINY = \
+ test10 \
test20 \
test21 \
test22 \
***************
*** 22,27 ****
--- 23,29 ----
test27
SCRIPTS_TINY_OUT = \
+ test10.out \
test20.out \
test21.out \
test22.out \
*** ../vim-9.0.0636/src/version.c 2022-10-01 21:22:14.038403172 +0100
--- src/version.c 2022-10-02 12:42:54.064284316 +0100
***************
*** 701,702 ****
--- 701,704 ----
{ /* Add new patch number below this line */
+ /**/
+ 637,
/**/
--
If you're sending someone Styrofoam, what do you pack it in?
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20221002120046.2F0671C09A3%40moolenaar.net.