Patch 8.2.0348
Problem: Vim9: not all code tested.
Solution: Add a few more tests. fix using "b:" in literal dictionary.
Files: src/testdir/test_vim9_expr.vim, src/vim9compile.c,
src/proto/vim9compile.pro, src/testdir/test_vim9_script.vim
*** ../vim-8.2.0347/src/testdir/test_vim9_expr.vim 2020-02-29
23:23:44.484659204 +0100
--- src/testdir/test_vim9_expr.vim 2020-03-02 21:33:36.998399557 +0100
***************
*** 37,45 ****
assert_equal('one', 0.1 ? 'one' : 'two')
endif
assert_equal('one', 'x' ? 'one' : 'two')
! " assert_equal('one', 0z1234 ? 'one' : 'two')
assert_equal('one', [0] ? 'one' : 'two')
! " assert_equal('one', #{x: 0} ? 'one' : 'two')
let var = 1
assert_equal('one', var ? 'one' : 'two')
--- 37,45 ----
assert_equal('one', 0.1 ? 'one' : 'two')
endif
assert_equal('one', 'x' ? 'one' : 'two')
! assert_equal('one', 0z1234 ? 'one' : 'two')
assert_equal('one', [0] ? 'one' : 'two')
! assert_equal('one', #{x: 0} ? 'one' : 'two')
let var = 1
assert_equal('one', var ? 'one' : 'two')
***************
*** 49,57 ****
assert_equal('two', 0.0 ? 'one' : 'two')
endif
assert_equal('two', '' ? 'one' : 'two')
! " assert_equal('one', 0z ? 'one' : 'two')
assert_equal('two', [] ? 'one' : 'two')
! " assert_equal('two', {} ? 'one' : 'two')
var = 0
assert_equal('two', var ? 'one' : 'two')
enddef
--- 49,57 ----
assert_equal('two', 0.0 ? 'one' : 'two')
endif
assert_equal('two', '' ? 'one' : 'two')
! assert_equal('two', 0z ? 'one' : 'two')
assert_equal('two', [] ? 'one' : 'two')
! assert_equal('two', {} ? 'one' : 'two')
var = 0
assert_equal('two', var ? 'one' : 'two')
enddef
***************
*** 447,452 ****
--- 447,457 ----
call CheckDefFailure("let x = [13] <= [88]", 'Cannot compare list with
list')
call CheckDefFailure("let x = [13] =~ [88]", 'Cannot compare list with
list')
call CheckDefFailure("let x = [13] !~ [88]", 'Cannot compare list with
list')
+
+ call CheckDefFailureMult(['let j: job', 'let chan: channel', 'let r = j ==
chan'], 'Cannot compare job with channel')
+ call CheckDefFailureMult(['let j: job', 'let x: list<any>', 'let r = j ==
x'], 'Cannot compare job with list')
+ call CheckDefFailureMult(['let j: job', 'let x: func', 'let r = j == x'],
'Cannot compare job with func')
+ call CheckDefFailureMult(['let j: job', 'let x: partial', 'let r = j ==
x'], 'Cannot compare job with partial')
endfunc
" test addition, subtraction, concatenation
*** ../vim-8.2.0347/src/vim9compile.c 2020-03-01 23:32:22.348059441 +0100
--- src/vim9compile.c 2020-03-02 22:03:45.982074243 +0100
***************
*** 507,513 ****
&& (type1 == VAR_BLOB || type2 == VAR_BLOB
|| type1 == VAR_LIST || type2 == VAR_LIST))))
{
! semsg(_("E1037: Cannot compare %s with %s"),
vartype_name(type1), vartype_name(type2));
return FAIL;
}
--- 507,513 ----
&& (type1 == VAR_BLOB || type2 == VAR_BLOB
|| type1 == VAR_LIST || type2 == VAR_LIST))))
{
! semsg(_("E1072: Cannot compare %s with %s"),
vartype_name(type1), vartype_name(type2));
return FAIL;
}
***************
*** 1494,1501 ****
{
switch (type)
{
case VAR_VOID: return "void";
- case VAR_UNKNOWN: return "any";
case VAR_SPECIAL: return "special";
case VAR_BOOL: return "bool";
case VAR_NUMBER: return "number";
--- 1494,1501 ----
{
switch (type)
{
+ case VAR_UNKNOWN: break;
case VAR_VOID: return "void";
case VAR_SPECIAL: return "special";
case VAR_BOOL: return "bool";
case VAR_NUMBER: return "number";
***************
*** 1509,1515 ****
case VAR_FUNC: return "func";
case VAR_PARTIAL: return "partial";
}
! return "???";
}
/*
--- 1509,1515 ----
case VAR_FUNC: return "func";
case VAR_PARTIAL: return "partial";
}
! return "any";
}
/*
***************
*** 1907,1917 ****
/*
* Find the end of a variable or function name. Unlike find_name_end() this
* does not recognize magic braces.
* Return a pointer to just after the name. Equal to "arg" if there is no
* valid name.
*/
! char_u *
! to_name_end(char_u *arg)
{
char_u *p;
--- 1907,1918 ----
/*
* Find the end of a variable or function name. Unlike find_name_end() this
* does not recognize magic braces.
+ * When "namespace" is TRUE recognize "b:", "s:", etc.
* Return a pointer to just after the name. Equal to "arg" if there is no
* valid name.
*/
! static char_u *
! to_name_end(char_u *arg, int namespace)
{
char_u *p;
***************
*** 1923,1928 ****
--- 1924,1930 ----
// Include a namespace such as "s:var" and "v:var". But "n:" is not
// and can be used in slice "[n:]".
if (*p == ':' && (p != arg + 1
+ || !namespace
|| vim_strchr(VIM9_NAMESPACE_CHAR, *arg) == NULL))
break;
return p;
***************
*** 1934,1940 ****
char_u *
to_name_const_end(char_u *arg)
{
! char_u *p = to_name_end(arg);
typval_T rettv;
if (p == arg && *arg == '[')
--- 1936,1942 ----
char_u *
to_name_const_end(char_u *arg)
{
! char_u *p = to_name_end(arg, TRUE);
typval_T rettv;
if (p == arg && *arg == '[')
***************
*** 2145,2151 ****
if (literal)
{
! char_u *p = to_name_end(*arg);
if (p == *arg)
{
--- 2147,2153 ----
if (literal)
{
! char_u *p = to_name_end(*arg, !literal);
if (p == *arg)
{
***************
*** 2766,2772 ****
}
// "name" or "name()"
! p = to_name_end(*arg);
if (*p == '(')
r = compile_call(arg, p - *arg, cctx, 0);
else
--- 2768,2774 ----
}
// "name" or "name()"
! p = to_name_end(*arg, TRUE);
if (*p == '(')
r = compile_call(arg, p - *arg, cctx, 0);
else
***************
*** 4980,4986 ****
// val".
p = (*ea.cmd == '&' || *ea.cmd == '$' || *ea.cmd == '@')
? ea.cmd + 1 : ea.cmd;
! p = to_name_end(p);
if ((p > ea.cmd && *p != NUL) || *p == '(')
{
int oplen;
--- 4982,4988 ----
// val".
p = (*ea.cmd == '&' || *ea.cmd == '$' || *ea.cmd == '@')
? ea.cmd + 1 : ea.cmd;
! p = to_name_end(p, TRUE);
if ((p > ea.cmd && *p != NUL) || *p == '(')
{
int oplen;
***************
*** 4992,4998 ****
// Recognize an assignment if we recognize the variable
// name:
// "g:var = expr"
! // "var = expr" where "var" is a local var name.
// "&opt = expr"
// "$ENV = expr"
// "@r = expr"
--- 4994,5002 ----
// Recognize an assignment if we recognize the variable
// name:
// "g:var = expr"
! // "local = expr" where "local" is a local var.
! // "script = expr" where "script" is a script-local var.
! // "import = expr" where "import" is an imported var
// "&opt = expr"
// "$ENV = expr"
// "@r = expr"
*** ../vim-8.2.0347/src/proto/vim9compile.pro 2020-02-03 20:50:55.672929674
+0100
--- src/proto/vim9compile.pro 2020-03-02 21:43:32.954859207 +0100
***************
*** 5,11 ****
char *type_name(type_T *type, char **tofree);
int get_script_item_idx(int sid, char_u *name, int check_writable);
imported_T *find_imported(char_u *name, size_t len, cctx_T *cctx);
- char_u *to_name_end(char_u *arg);
char_u *to_name_const_end(char_u *arg);
int assignment_len(char_u *p, int *heredoc);
void compile_def_function(ufunc_T *ufunc, int set_return_type);
--- 5,10 ----
*** ../vim-8.2.0347/src/testdir/test_vim9_script.vim 2020-03-01
23:32:22.348059441 +0100
--- src/testdir/test_vim9_script.vim 2020-03-02 22:52:06.712807422 +0100
***************
*** 68,73 ****
--- 68,75 ----
" type becomes list<any>
let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
+ " type becomes dict<any>
+ let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
g:newvar = 'new'
assert_equal('new', g:newvar)
***************
*** 373,378 ****
--- 375,381 ----
g:imported_name = exp_name
exp_name ..= ' Doe'
g:imported_name_appended = exp_name
+ g:imported_later = exported
END
writefile(import_script_lines, 'Ximport.vim')
***************
*** 384,389 ****
--- 387,393 ----
assert_equal('bob', g:localname)
assert_equal(9876, g:imported)
assert_equal(9879, g:imported_added)
+ assert_equal(9879, g:imported_later)
assert_equal('Exported', g:imported_func)
assert_equal('John', g:imported_name)
assert_equal('John Doe', g:imported_name_appended)
***************
*** 393,402 ****
--- 397,426 ----
unlet g:localname
unlet g:imported
unlet g:imported_added
+ unlet g:imported_later
unlet g:imported_func
unlet g:imported_name g:imported_name_appended
delete('Ximport.vim')
+ let import_in_def_lines =<< trim END
+ vim9script
+ def ImportInDef()
+ import exported from './Xexport.vim'
+ g:imported = exported
+ exported += 7
+ g:imported_added = exported
+ enddef
+ ImportInDef()
+ END
+ writefile(import_in_def_lines, 'Ximport2.vim')
+ source Ximport2.vim
+ " TODO: this should be 9879
+ assert_equal(9876, g:imported)
+ assert_equal(9883, g:imported_added)
+ unlet g:imported
+ unlet g:imported_added
+ delete('Ximport2.vim')
+
let import_star_as_lines =<< trim END
vim9script
import * as Export from './Xexport.vim'
***************
*** 407,413 ****
END
writefile(import_star_as_lines, 'Ximport.vim')
source Ximport.vim
! assert_equal(9876, g:imported)
let import_star_lines =<< trim END
vim9script
--- 431,437 ----
END
writefile(import_star_as_lines, 'Ximport.vim')
source Ximport.vim
! assert_equal(9883, g:imported)
let import_star_lines =<< trim END
vim9script
*** ../vim-8.2.0347/src/version.c 2020-03-02 20:54:19.323757498 +0100
--- src/version.c 2020-03-02 21:43:07.594993289 +0100
***************
*** 740,741 ****
--- 740,743 ----
{ /* Add new patch number below this line */
+ /**/
+ 348,
/**/
--
hundred-and-one symptoms of being an internet addict:
168. You have your own domain name.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ 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/202003022154.022LsB2P032025%40masaka.moolenaar.net.