diff --git a/src/dict.c b/src/dict.c
index 96c58c1..a80fb35 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -709,11 +709,33 @@
 }
 
 /*
+ * Get the key for *{key: val} into "tv" and advance "arg".
+ * Return FAIL when there is no valid key.
+ */
+    static int
+get_literal_key(char_u **arg, typval_T *tv)
+{
+    char_u *p;
+
+    if (!ASCII_ISALNUM(**arg) && **arg != '_' && **arg != '-')
+	return FAIL;
+
+    for (p = *arg; ASCII_ISALNUM(*p) || *p == '_' || *p == '-'; ++p)
+	;
+    tv->v_type = VAR_STRING;
+    tv->vval.v_string = vim_strnsave(*arg, (int)(p - *arg));
+
+    *arg = skipwhite(p);
+    return OK;
+}
+
+/*
  * Allocate a variable for a Dictionary and fill it from "*arg".
+ * "literal" is TRUE for *{key: val}
  * Return OK or FAIL.  Returns NOTDONE for {expr}.
  */
     int
-dict_get_tv(char_u **arg, typval_T *rettv, int evaluate)
+dict_get_tv(char_u **arg, typval_T *rettv, int evaluate, int literal)
 {
     dict_T	*d = NULL;
     typval_T	tvkey;
@@ -750,8 +772,11 @@
     *arg = skipwhite(*arg + 1);
     while (**arg != '}' && **arg != NUL)
     {
-	if (eval1(arg, &tvkey, evaluate) == FAIL)	/* recursive! */
+	if ((literal
+		? get_literal_key(arg, &tvkey)
+		: eval1(arg, &tvkey, evaluate)) == FAIL)	// recursive!
 	    goto failret;
+
 	if (**arg != ':')
 	{
 	    semsg(_("E720: Missing colon in Dictionary: %s"), *arg);
diff --git a/src/eval.c b/src/eval.c
index d89093c..20cec16 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -4391,7 +4391,8 @@
  *  $VAR		environment variable
  *  (expression)	nested expression
  *  [expr, expr]	List
- *  {key: val, key: val}  Dictionary
+ *  {key: val, key: val}   Dictionary
+ *  *{key: val, key: val}  Dictionary with literal keys
  *
  *  Also handle:
  *  ! in front		logical NOT
@@ -4576,12 +4577,24 @@
 		break;
 
     /*
+     * Dictionary: *{key: val, key: val}
+     */
+    case '*':	if ((*arg)[1] == '{')
+		{
+		    ++*arg;
+		    ret = dict_get_tv(arg, rettv, evaluate, TRUE);
+		}
+		else
+		    ret = NOTDONE;
+		break;
+
+    /*
      * Lambda: {arg, arg -> expr}
-     * Dictionary: {key: val, key: val}
+     * Dictionary: {'key': val, 'key': val}
      */
     case '{':	ret = get_lambda_tv(arg, rettv, evaluate);
 		if (ret == NOTDONE)
-		    ret = dict_get_tv(arg, rettv, evaluate);
+		    ret = dict_get_tv(arg, rettv, evaluate, FALSE);
 		break;
 
     /*
diff --git a/src/proto/dict.pro b/src/proto/dict.pro
index 3d31347..c133523 100644
--- a/src/proto/dict.pro
+++ b/src/proto/dict.pro
@@ -28,7 +28,7 @@
 varnumber_T dict_get_number(dict_T *d, char_u *key);
 varnumber_T dict_get_number_check(dict_T *d, char_u *key);
 char_u *dict2string(typval_T *tv, int copyID, int restore_copyID);
-int dict_get_tv(char_u **arg, typval_T *rettv, int evaluate);
+int dict_get_tv(char_u **arg, typval_T *rettv, int evaluate, int literal);
 void dict_extend(dict_T *d1, dict_T *d2, char_u *action);
 dictitem_T *dict_lookup(hashitem_T *hi);
 int dict_equal(dict_T *d1, dict_T *d2, int ic, int recursive);
diff --git a/src/testdir/dumps/Test_popupwin_07.dump b/src/testdir/dumps/Test_popupwin_07.dump
index 5c44ad3..28c13cb 100644
--- a/src/testdir/dumps/Test_popupwin_07.dump
+++ b/src/testdir/dumps/Test_popupwin_07.dump
@@ -6,5 +6,5 @@
 |~| @73
 |~| @52|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @11
 |~+0#4040ff13#ffffff0| @52|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| @6
-|:+0#0000000#ffffff0|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|p|o|p|u|p|w|i|n|,| |{|'|l|i|n|e|'|:| |7|,| |'|c|o|l|'|:| |5@1|}|)| @3|t+0#0000001#ffd7ff255|h|i|s| |l|i|n|e| |w|i|l@1| |n|o|t| |f|i
+|:+0#0000000#ffffff0|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|p|o|p|u|p|w|i|n|,| |*|{|l|i|n|e|:| |7|,| |c|o|l|:| |5@1|}|)| @6|t+0#0000001#ffd7ff255|h|i|s| |l|i|n|e| |w|i|l@1| |n|o|t| |f|i
 | +0#0000000#ffffff0@53|t+0#0000001#ffd7ff255| |h|e|r|e| @14
diff --git a/src/testdir/dumps/Test_popupwin_mask_2.dump b/src/testdir/dumps/Test_popupwin_mask_2.dump
index ac1c834..3ae3c9d 100644
--- a/src/testdir/dumps/Test_popupwin_mask_2.dump
+++ b/src/testdir/dumps/Test_popupwin_mask_2.dump
@@ -10,4 +10,4 @@
 |1|2|3|4|5|6|7|8|9|1|0|║+0#0000001#ffd7ff255| @10|1+0#0000000#ffffff0|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
 |1|2|3|4|5|6|7|8|9|1|0|╚+0#0000001#ffd7ff255|═|1+0#0000000#ffffff0|2|1|═+0#0000001#ffd7ff255@4|1+0#0000000#ffffff0|6|1|7|═+0#0000001#ffd7ff255@1|╝|9+0#0000000#ffffff0|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
-|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |{|'|c|o|l|'|:| |1|2|}|)| @19|1|,|1| @10|T|o|p| 
+|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |*|{|c|o|l|:| |1|2|}|)| @20|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_mask_3.dump b/src/testdir/dumps/Test_popupwin_mask_3.dump
index b791374..7bbcafc 100644
--- a/src/testdir/dumps/Test_popupwin_mask_3.dump
+++ b/src/testdir/dumps/Test_popupwin_mask_3.dump
@@ -10,4 +10,4 @@
 |1+0#0000000#ffffff0|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|║+0#0000001#ffd7ff255| @10|2+0#0000000#ffffff0
 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|╚+0#0000001#ffd7ff255|═|7+0#0000000#ffffff0|3|8|═+0#0000001#ffd7ff255@4|1+0#0000000#ffffff0|4|2
 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
-|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |{|'|c|o|l|'|:| |6|3|}|)| @19|1|,|1| @10|T|o|p| 
+|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |*|{|c|o|l|:| |6|3|}|)| @20|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_mask_4.dump b/src/testdir/dumps/Test_popupwin_mask_4.dump
index de0a841..9552b40 100644
--- a/src/testdir/dumps/Test_popupwin_mask_4.dump
+++ b/src/testdir/dumps/Test_popupwin_mask_4.dump
@@ -10,4 +10,4 @@
 | +0#0000001#ffd7ff255@6|8+0#0000000#ffffff0|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
 |═+0#0000001#ffd7ff255@4|6+0#0000000#ffffff0|7|8|9|═+0#0000001#ffd7ff255@1|╝|1+0#0000000#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
-|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |{|'|p|o|s|'|:| |'|t|o|p|r|i|g|h|t|'|,| |'|c|o|l|'|:| |1|2|}|)| |1|,|1| @10|T|o|p| 
+|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |*|{|p|o|s|:| |'|t|o|p|r|i|g|h|t|'|,| |c|o|l|:| |1|2|}|)| @3|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_mask_5.dump b/src/testdir/dumps/Test_popupwin_mask_5.dump
index 4da3ded..06334e1 100644
--- a/src/testdir/dumps/Test_popupwin_mask_5.dump
+++ b/src/testdir/dumps/Test_popupwin_mask_5.dump
@@ -10,4 +10,4 @@
 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
 | +0&#e0e0e08@11|1+0&#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|═+0#0000001#ffd7ff255@13|X|4+0#0000000#ffffff0|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
 |o+0&#e0e0e08|m|e| |5+0&#ffffff0|6|7|t+0&#e0e0e08| @3|1+0&#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|║+0#0000001#ffd7ff255| @4|2+0#0000000#ffffff0|9|3| +0#0000001#ffd7ff255@6|║|4+0#0000000#ffffff0|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
-|:|c|t+0&#e0e0e08|h|l+0&#ffffff0| |p|l+0&#e0e0e08|i|n|e| |m+0&#ffffff0|o|v|e|(|w|i|n|i|d|b|,| |{|'|p|o|s|'|:| |'|t|o|p|l|e|f|t|║+0#0000001#ffd7ff255| |j|u|s|t|l+0#0000000#ffffff0|'|:|e+0#0000001#ffd7ff255| |l|i|n|e| |║|,+0#0000000#ffffff0|1| @10|T|o|p| 
+|:|c|t+0&#e0e0e08|h|l+0&#ffffff0| |p|l+0&#e0e0e08|i|n|e| |m+0&#ffffff0|o|v|e|(|w|i|n|i|d|b|,| |*|{|p|o|s|:| |'|t|o|p|l|e|f|t|'|║+0#0000001#ffd7ff255| |j|u|s|t| +0#0000000#ffffff0|4|2|e+0#0000001#ffd7ff255| |l|i|n|e| |║|,+0#0000000#ffffff0|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_scroll_2.dump b/src/testdir/dumps/Test_popupwin_scroll_2.dump
index f081d6a..e02fe78 100644
--- a/src/testdir/dumps/Test_popupwin_scroll_2.dump
+++ b/src/testdir/dumps/Test_popupwin_scroll_2.dump
@@ -7,4 +7,4 @@
 |7| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
 |8| @73
 |9| @73
-|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |{|'|f|i|r|s|t|l|i|n|e|'|:| |2|}|)| @9|1|,|1| @10|T|o|p| 
+|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |*|{|f|i|r|s|t|l|i|n|e|:| |2|}|)| @10|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_scroll_3.dump b/src/testdir/dumps/Test_popupwin_scroll_3.dump
index 4a44896..ca7a425 100644
--- a/src/testdir/dumps/Test_popupwin_scroll_3.dump
+++ b/src/testdir/dumps/Test_popupwin_scroll_3.dump
@@ -7,4 +7,4 @@
 |7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#0000001| +0&#ffffff0@32
 |8| @73
 |9| @73
-|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |{|'|f|i|r|s|t|l|i|n|e|'|:| |6|}|)| @9|1|,|1| @10|T|o|p| 
+|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |*|{|f|i|r|s|t|l|i|n|e|:| |6|}|)| @10|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_scroll_4.dump b/src/testdir/dumps/Test_popupwin_scroll_4.dump
index 5f35a1f..c243c4c 100644
--- a/src/testdir/dumps/Test_popupwin_scroll_4.dump
+++ b/src/testdir/dumps/Test_popupwin_scroll_4.dump
@@ -7,4 +7,4 @@
 |7| @73
 |8| @73
 |9| @73
-|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |{|'|f|i|r|s|t|l|i|n|e|'|:| |9|}|)| @9|1|,|1| @10|T|o|p| 
+|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |*|{|f|i|r|s|t|l|i|n|e|:| |9|}|)| @10|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim
index 9064245..574beb5 100644
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -280,6 +280,10 @@
   call assert_equal(expected, d.func(string(remove(d, 'func'))))
 endfunc
 
+func Test_dict_literal_keys()
+  call assert_equal({'one': 1, 'two2': 2, '3three': 3, '44': 4}, *{one: 1, two2: 2, 3three: 3, 44: 4},)
+endfunc
+
 " Nasty: deepcopy() dict that refers to itself (fails when noref used)
 func Test_dict_deepcopy()
   let d = {1:1, 2:2}
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 3844a05..93302e8 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -14,23 +14,23 @@
 	hi PopupColor1 ctermbg=lightblue
 	hi PopupColor2 ctermbg=lightcyan
 	hi Comment ctermfg=red
-	call prop_type_add('comment', {'highlight': 'Comment'})
-	let winid = popup_create('hello there', {'line': 3, 'col': 11, 'minwidth': 20, 'highlight': 'PopupColor1'})
-	let winid2 = popup_create(['another one', 'another two', 'another three'], {'line': 3, 'col': 25, 'minwidth': 20})
+	call prop_type_add('comment', *{highlight: 'Comment'})
+	let winid = popup_create('hello there', *{line: 3, col: 11, minwidth: 20, highlight: 'PopupColor1'})
+	let winid2 = popup_create(['another one', 'another two', 'another three'], *{line: 3, col: 25, minwidth: 20})
 	call setwinvar(winid2, '&wincolor', 'PopupColor2')
   END
   call writefile(lines, 'XtestPopup')
-  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_01', {})
 
   " Add a tabpage
   call term_sendkeys(buf, ":tabnew\<CR>")
   call term_sendkeys(buf, ":let popupwin = popup_create(["
-	\ .. "{'text': 'other tab'},"
-	\ .. "{'text': 'a comment line', 'props': [{"
-	\ .. "'col': 3, 'length': 7, 'minwidth': 20, 'type': 'comment'"
+	\ .. "*{text: 'other tab'},"
+	\ .. "*{text: 'a comment line', props: [*{"
+	\ .. "col: 3, length: 7, minwidth: 20, type: 'comment'"
 	\ .. "}]},"
-	\ .. "], {'line': 4, 'col': 9, 'minwidth': 20})\<CR>")
+	\ .. "], *{line: 4, col: 9, minwidth: 20})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_02', {})
 
   " switch back to first tabpage
@@ -48,7 +48,7 @@
   call term_sendkeys(buf, ":let &columns = cols\<CR>")
 
   " resize popup, show empty line at bottom
-  call term_sendkeys(buf, ":call popup_move(popupwin, {'minwidth': 15, 'maxwidth': 25, 'minheight': 3, 'maxheight': 5})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(popupwin, *{minwidth: 15, maxwidth: 25, minheight: 3, maxheight: 5})\<CR>")
   call term_sendkeys(buf, ":redraw\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_05', {})
 
@@ -59,7 +59,7 @@
 
   " move popup over ruler
   call term_sendkeys(buf, ":set cmdheight=2\<CR>")
-  call term_sendkeys(buf, ":call popup_move(popupwin, {'line': 7, 'col': 55})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(popupwin, *{line: 7, col: 55})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_07', {})
 
   " clear all popups after moving the cursor a bit, so that ruler is updated
@@ -83,17 +83,17 @@
   for iter in range(0, 1)
     let lines =<< trim END
 	  call setline(1, range(1, 100))
-	  call popup_create('hello border', {'line': 2, 'col': 3, 'border': []})
-	  call popup_create('hello padding', {'line': 2, 'col': 23, 'padding': []})
-	  call popup_create('hello both', {'line': 2, 'col': 43, 'border': [], 'padding': []})
-	  call popup_create('border TL', {'line': 6, 'col': 3, 'border': [1, 0, 0, 4]})
-	  call popup_create('paddings', {'line': 6, 'col': 23, 'padding': [1, 3, 2, 4]})
-	  call popup_create('wrapped longer text', {'line': 8, 'col': 55, 'padding': [0, 3, 0, 3], 'border': [0, 1, 0, 1]})
-	  call popup_create('right aligned text', {'line': 11, 'col': 56, 'wrap': 0, 'padding': [0, 3, 0, 3], 'border': [0, 1, 0, 1]})
+	  call popup_create('hello border', *{line: 2, col: 3, border: []})
+	  call popup_create('hello padding', *{line: 2, col: 23, padding: []})
+	  call popup_create('hello both', *{line: 2, col: 43, border: [], padding: []})
+	  call popup_create('border TL', *{line: 6, col: 3, border: [1, 0, 0, 4]})
+	  call popup_create('paddings', *{line: 6, col: 23, padding: [1, 3, 2, 4]})
+	  call popup_create('wrapped longer text', *{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
+	  call popup_create('right aligned text', *{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
     END
     call insert(lines, iter == 1 ? '' : 'set enc=latin1')
     call writefile(lines, 'XtestPopupBorder')
-    let buf = RunVimInTerminal('-S XtestPopupBorder', {'rows': 15})
+    let buf = RunVimInTerminal('-S XtestPopupBorder', *{rows: 15})
     call VerifyScreenDump(buf, 'Test_popupwin_2' .. iter, {})
 
     call StopVimInTerminal(buf)
@@ -107,22 +107,22 @@
 	hi RightColor ctermbg=245
 	hi BottomColor ctermbg=240
 	hi LeftColor ctermbg=248
-	call popup_create('hello border', {'line': 2, 'col': 3, 'border': [], 'borderhighlight': ['BlueColor']})
-	call popup_create(['hello border', 'and more'], {'line': 2, 'col': 23, 'border': [], 'borderhighlight': ['TopColor', 'RightColor', 'BottomColor', 'LeftColor']})
-	call popup_create(['hello border', 'lines only'], {'line': 2, 'col': 43, 'border': [], 'borderhighlight': ['BlueColor'], 'borderchars': ['x']})
-	call popup_create(['hello border', 'with corners'], {'line': 2, 'col': 60, 'border': [], 'borderhighlight': ['BlueColor'], 'borderchars': ['x', '#']})
-	let winid = popup_create(['hello border', 'with numbers'], {'line': 6, 'col': 3, 'border': [], 'borderhighlight': ['BlueColor'], 'borderchars': ['0', '1', '2', '3', '4', '5', '6', '7']})
-	call popup_create(['hello border', 'just blanks'], {'line': 7, 'col': 23, 'border': [], 'borderhighlight': ['BlueColor'], 'borderchars': [' ']})
+	call popup_create('hello border', *{line: 2, col: 3, border: [], borderhighlight: ['BlueColor']})
+	call popup_create(['hello border', 'and more'], *{line: 2, col: 23, border: [], borderhighlight: ['TopColor', 'RightColor', 'BottomColor', 'LeftColor']})
+	call popup_create(['hello border', 'lines only'], *{line: 2, col: 43, border: [], borderhighlight: ['BlueColor'], borderchars: ['x']})
+	call popup_create(['hello border', 'with corners'], *{line: 2, col: 60, border: [], borderhighlight: ['BlueColor'], borderchars: ['x', '#']})
+	let winid = popup_create(['hello border', 'with numbers'], *{line: 6, col: 3, border: [], borderhighlight: ['BlueColor'], borderchars: ['0', '1', '2', '3', '4', '5', '6', '7']})
+	call popup_create(['hello border', 'just blanks'], *{line: 7, col: 23, border: [], borderhighlight: ['BlueColor'], borderchars: [' ']})
 	func MultiByte()
-	  call popup_create(['hello'], {'line': 8, 'col': 43, 'border': [], 'borderchars': ['─', '│', '─', '│', '┌', '┐', '┘', '└']})
+	  call popup_create(['hello'], *{line: 8, col: 43, border: [], borderchars: ['─', '│', '─', '│', '┌', '┐', '┘', '└']})
 	endfunc
   END
   call writefile(lines, 'XtestPopupBorder')
-  let buf = RunVimInTerminal('-S XtestPopupBorder', {'rows': 12})
+  let buf = RunVimInTerminal('-S XtestPopupBorder', *{rows: 12})
   call VerifyScreenDump(buf, 'Test_popupwin_22', {})
 
   " check that changing borderchars triggers a redraw
-  call term_sendkeys(buf, ":call popup_setoptions(winid, {'borderchars': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']})\<CR>")
+  call term_sendkeys(buf, ":call popup_setoptions(winid, *{borderchars: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_23', {})
 
   " check multi-byte border only with 'ambiwidth' single
@@ -134,25 +134,25 @@
   call StopVimInTerminal(buf)
   call delete('XtestPopupBorder')
 
-  let with_border_or_padding = {
-	\ 'line': 2,
-	\ 'core_line': 3,
-	\ 'col': 3,
-	\ 'core_col': 4,
-	\ 'width': 14,
-	\ 'core_width': 12,
-	\ 'height': 3,
-	\ 'core_height': 1,
-	\ 'firstline': 1,
-	\ 'scrollbar': 0,
-	\ 'visible': 1}
-  let winid = popup_create('hello border', {'line': 2, 'col': 3, 'border': []})",
+  let with_border_or_padding = *{
+	\ line: 2,
+	\ core_line: 3,
+	\ col: 3,
+	\ core_col: 4,
+	\ width: 14,
+	\ core_width: 12,
+	\ height: 3,
+	\ core_height: 1,
+	\ firstline: 1,
+	\ scrollbar: 0,
+	\ visible: 1}
+  let winid = popup_create('hello border', *{line: 2, col: 3, border: []})",
   call assert_equal(with_border_or_padding, popup_getpos(winid))
   let options = popup_getoptions(winid)
   call assert_equal([], options.border)
   call assert_false(has_key(options, "padding"))
 
-  let winid = popup_create('hello padding', {'line': 2, 'col': 3, 'padding': []})
+  let winid = popup_create('hello padding', *{line: 2, col: 3, padding: []})
   let with_border_or_padding.width = 15
   let with_border_or_padding.core_width = 13
   call assert_equal(with_border_or_padding, popup_getpos(winid))
@@ -160,11 +160,11 @@
   call assert_false(has_key(options, "border"))
   call assert_equal([], options.padding)
 
-  call popup_setoptions(winid, {
-	\ 'padding': [1, 2, 3, 4],
-	\ 'border': [4, 0, 7, 8],
-	\ 'borderhighlight': ['Top', 'Right', 'Bottom', 'Left'],
-	\ 'borderchars': ['1', '^', '2', '>', '3', 'v', '4', '<'],
+  call popup_setoptions(winid, *{
+	\ padding: [1, 2, 3, 4],
+	\ border: [4, 0, 7, 8],
+	\ borderhighlight: ['Top', 'Right', 'Bottom', 'Left'],
+	\ borderchars: ['1', '^', '2', '>', '3', 'v', '4', '<'],
 	\ })
   let options = popup_getoptions(winid)
   call assert_equal([1, 0, 1, 1], options.border)
@@ -172,19 +172,19 @@
   call assert_equal(['Top', 'Right', 'Bottom', 'Left'], options.borderhighlight)
   call assert_equal(['1', '^', '2', '>', '3', 'v', '4', '<'], options.borderchars)
 
-  let winid = popup_create('hello both', {'line': 3, 'col': 8, 'border': [], 'padding': []})
-  call assert_equal({
-	\ 'line': 3,
-	\ 'core_line': 5,
-	\ 'col': 8,
-	\ 'core_col': 10,
-	\ 'width': 14,
-	\ 'core_width': 10,
-	\ 'height': 5,
-	\ 'scrollbar': 0,
-	\ 'core_height': 1,
-	\ 'firstline': 1,
-	\ 'visible': 1}, popup_getpos(winid))
+  let winid = popup_create('hello both', *{line: 3, col: 8, border: [], padding: []})
+  call assert_equal(*{
+	\ line: 3,
+	\ core_line: 5,
+	\ col: 8,
+	\ core_col: 10,
+	\ width: 14,
+	\ core_width: 10,
+	\ height: 5,
+	\ scrollbar: 0,
+	\ core_height: 1,
+	\ firstline: 1,
+	\ visible: 1}, popup_getpos(winid))
 
   call popup_clear()
 endfunc
@@ -202,11 +202,11 @@
 	    \ '{',
 	    \ '    printf(123);',
 	    \ '}',
-	    \], {'line': 3, 'col': 25, 'highlight': 'PopupColor'})
+	    \], *{line: 3, col: 25, highlight: 'PopupColor'})
 	call win_execute(winid, 'set syntax=cpp')
   END
   call writefile(lines, 'XtestPopup')
-  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_10', {})
 
   " clean up
@@ -227,11 +227,11 @@
 	    \ '{',
 	    \ "\tprintf(567);",
 	    \ '}',
-	    \], {'line': 3, 'col': 21, 'highlight': 'PopupColor'})
+	    \], *{line: 3, col: 21, highlight: 'PopupColor'})
 	call setbufvar(winbufnr(winid), '&syntax', 'cpp')
   END
   call writefile(lines, 'XtestPopup')
-  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_11', {})
 
   " clean up
@@ -248,7 +248,7 @@
 	let winid = popup_create([
 	    \ '111 222 333',
 	    \ '444 555 666',
-	    \], {'line': 3, 'col': 10, 'border': []})
+	    \], *{line: 3, col: 10, border: []})
 	set hlsearch
 	/666
 	call matchadd('ErrorMsg', '111')
@@ -257,7 +257,7 @@
 	call win_execute(winid, "call matchadd('ErrorMsg', '555')")
   END
   call writefile(lines, 'XtestPopupMatches')
-  let buf = RunVimInTerminal('-S XtestPopupMatches', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupMatches', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_matches', {})
 
   " clean up
@@ -273,40 +273,40 @@
 	call setline(1, repeat([repeat('-', 60)], 15))
 	set so=0
 	normal 2G3|r#
-	let winid1 = popup_create(['first', 'second'], {
-	      \ 'line': 'cursor+1',
-	      \ 'col': 'cursor',
-	      \ 'pos': 'topleft',
-	      \ 'border': [],
-	      \ 'padding': [],
+	let winid1 = popup_create(['first', 'second'], *{
+	      \ line: 'cursor+1',
+	      \ col: 'cursor',
+	      \ pos: 'topleft',
+	      \ border: [],
+	      \ padding: [],
 	      \ })
 	normal 25|r@
-	let winid1 = popup_create(['First', 'SeconD'], {
-	      \ 'line': 'cursor+1',
-	      \ 'col': 'cursor',
-	      \ 'pos': 'topright',
-	      \ 'border': [],
-	      \ 'padding': [],
+	let winid1 = popup_create(['First', 'SeconD'], *{
+	      \ line: 'cursor+1',
+	      \ col: 'cursor',
+	      \ pos: 'topright',
+	      \ border: [],
+	      \ padding: [],
 	      \ })
 	normal 9G29|r%
-	let winid1 = popup_create(['fiRSt', 'seCOnd'], {
-	      \ 'line': 'cursor-1',
-	      \ 'col': 'cursor',
-	      \ 'pos': 'botleft',
-	      \ 'border': [],
-	      \ 'padding': [],
+	let winid1 = popup_create(['fiRSt', 'seCOnd'], *{
+	      \ line: 'cursor-1',
+	      \ col: 'cursor',
+	      \ pos: 'botleft',
+	      \ border: [],
+	      \ padding: [],
 	      \ })
 	normal 51|r&
-	let winid1 = popup_create(['FIrsT', 'SEcoND'], {
-	      \ 'line': 'cursor-1',
-	      \ 'col': 'cursor',
-	      \ 'pos': 'botright',
-	      \ 'border': [],
-	      \ 'padding': [],
+	let winid1 = popup_create(['FIrsT', 'SEcoND'], *{
+	      \ line: 'cursor-1',
+	      \ col: 'cursor',
+	      \ pos: 'botright',
+	      \ border: [],
+	      \ padding: [],
 	      \ })
   END
   call writefile(lines, 'XtestPopupCorners')
-  let buf = RunVimInTerminal('-S XtestPopupCorners', {'rows': 12})
+  let buf = RunVimInTerminal('-S XtestPopupCorners', *{rows: 12})
   call VerifyScreenDump(buf, 'Test_popupwin_corners', {})
 
   " clean up
@@ -320,25 +320,25 @@
   endif
   let lines =<< trim END
 	call setline(1, range(1, 20))
-	call popup_create(['1111', '222222', '33333', '44', '5', '666666', '77777', '888', '9999999999999999'], {
-	      \ 'maxheight': 4,
-	      \ 'firstline': 3,
+	call popup_create(['1111', '222222', '33333', '44', '5', '666666', '77777', '888', '9999999999999999'], *{
+	      \ maxheight: 4,
+	      \ firstline: 3,
 	      \ })
   END
   call writefile(lines, 'XtestPopupFirstline')
-  let buf = RunVimInTerminal('-S XtestPopupFirstline', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupFirstline', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_firstline', {})
 
   " clean up
   call StopVimInTerminal(buf)
   call delete('XtestPopupFirstline')
 
-  let winid = popup_create(['1111', '222222', '33333', '44444'], {
-	\ 'maxheight': 2,
-	\ 'firstline': 3,
+  let winid = popup_create(['1111', '222222', '33333', '44444'], *{
+	\ maxheight: 2,
+	\ firstline: 3,
 	\ })
   call assert_equal(3, popup_getoptions(winid).firstline)
-  call popup_setoptions(winid, {'firstline': 1})
+  call popup_setoptions(winid, *{firstline: 1})
   call assert_equal(1, popup_getoptions(winid).firstline)
 
   call popup_close(winid)
@@ -351,10 +351,10 @@
   " create a popup that covers the command line
   let lines =<< trim END
 	call setline(1, range(1, 20))
-	let winid = popup_create(['1111', '222222', '33333'], {
-	      \ 'drag': 1,
-	      \ 'border': [],
-	      \ 'line': &lines - 4,
+	let winid = popup_create(['1111', '222222', '33333'], *{
+	      \ drag: 1,
+	      \ border: [],
+	      \ line: &lines - 4,
 	      \ })
 	func Dragit()
 	  call feedkeys("\<F3>\<LeftMouse>\<F4>\<LeftDrag>\<LeftRelease>", "xt")
@@ -363,7 +363,7 @@
 	map <silent> <F4> :call test_setmouse(&lines - 8, &columns / 2)<CR>
   END
   call writefile(lines, 'XtestPopupDrag')
-  let buf = RunVimInTerminal('-S XtestPopupDrag', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupDrag', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_drag_01', {})
 
   call term_sendkeys(buf, ":call Dragit()\<CR>")
@@ -381,31 +381,31 @@
   let lines =<< trim END
 	call setline(1, range(1, 20))
 	" With border, can click on X
-	let winid = popup_create('foobar', {
-	      \ 'close': 'button',
-	      \ 'border': [],
-	      \ 'line': 1,
-	      \ 'col': 1,
+	let winid = popup_create('foobar', *{
+	      \ close: 'button',
+	      \ border: [],
+	      \ line: 1,
+	      \ col: 1,
 	      \ })
 	func CloseMsg(id, result)
 	  echomsg 'Popup closed with ' .. a:result
 	endfunc
-	let winid = popup_create('notification', {
-	      \ 'close': 'click',
-	      \ 'line': 3,
-	      \ 'col': 15,
-	      \ 'callback': 'CloseMsg',
+	let winid = popup_create('notification', *{
+	      \ close: 'click',
+	      \ line: 3,
+	      \ col: 15,
+	      \ callback: 'CloseMsg',
 	      \ })
-	let winid = popup_create('no border here', {
-	      \ 'close': 'button',
-	      \ 'line': 5,
-	      \ 'col': 3,
+	let winid = popup_create('no border here', *{
+	      \ close: 'button',
+	      \ line: 5,
+	      \ col: 3,
 	      \ })
-	let winid = popup_create('only padding', {
-	      \ 'close': 'button',
-	      \ 'padding': [],
-	      \ 'line': 5,
-	      \ 'col': 23,
+	let winid = popup_create('only padding', *{
+	      \ close: 'button',
+	      \ padding: [],
+	      \ line: 5,
+	      \ col: 23,
 	      \ })
 	func CloseWithX()
 	  call feedkeys("\<F3>\<LeftMouse>\<LeftRelease>", "xt")
@@ -417,7 +417,7 @@
 	map <silent> <F4> :call test_setmouse(3, 17)<CR>
   END
   call writefile(lines, 'XtestPopupClose')
-  let buf = RunVimInTerminal('-S XtestPopupClose', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupClose', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_close_01', {})
 
   call term_sendkeys(buf, ":call CloseWithX()\<CR>")
@@ -441,53 +441,53 @@
 	let winid = popup_create([
 	    \ 'some text',
 	    \ 'another line',
-	    \], {
-	    \ 'line': 1,
-	    \ 'col': 10,
-	    \ 'wrap': 0,
-	    \ 'fixed': 1,
-	    \ 'zindex': 90,
-	    \ 'padding': [],
-	    \ 'highlight': 'PopupColor',
-	    \ 'mask': [[1,1,1,1], [-5,-1,4,4], [7,9,2,3], [2,4,3,3]]})
+	    \], *{
+	    \ line: 1,
+	    \ col: 10,
+	    \ wrap: 0,
+	    \ fixed: 1,
+	    \ zindex: 90,
+	    \ padding: [],
+	    \ highlight: 'PopupColor',
+	    \ mask: [[1,1,1,1], [-5,-1,4,4], [7,9,2,3], [2,4,3,3]]})
 	call popup_create([
 	    \ 'xxxxxxxxx',
 	    \ 'yyyyyyyyy',
-	    \], {
-	    \ 'line': 3,
-	    \ 'col': 18,
-	    \ 'zindex': 20})
+	    \], *{
+	    \ line: 3,
+	    \ col: 18,
+	    \ zindex: 20})
 	let winidb = popup_create([
 	    \ 'just one line',
-	    \], {
-	    \ 'line': 7,
-	    \ 'col': 10,
-	    \ 'wrap': 0,
-	    \ 'fixed': 1,
-	    \ 'close': 'button',
-	    \ 'zindex': 90,
-	    \ 'padding': [],
-	    \ 'border': [],
-	    \ 'mask': [[1,2,1,1], [-5,-1,4,4], [7,9,2,3], [3,5,5,5],[-7,-4,5,5]]})
+	    \], *{
+	    \ line: 7,
+	    \ col: 10,
+	    \ wrap: 0,
+	    \ fixed: 1,
+	    \ close: 'button',
+	    \ zindex: 90,
+	    \ padding: [],
+	    \ border: [],
+	    \ mask: [[1,2,1,1], [-5,-1,4,4], [7,9,2,3], [3,5,5,5],[-7,-4,5,5]]})
   END
   call writefile(lines, 'XtestPopupMask')
-  let buf = RunVimInTerminal('-S XtestPopupMask', {'rows': 13})
+  let buf = RunVimInTerminal('-S XtestPopupMask', *{rows: 13})
   call VerifyScreenDump(buf, 'Test_popupwin_mask_1', {})
 
-  call term_sendkeys(buf, ":call popup_move(winid, {'col': 11, 'line': 2})\<CR>")
-  call term_sendkeys(buf, ":call popup_move(winidb, {'col': 12})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winid, *{col: 11, line: 2})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winidb, *{col: 12})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_mask_2', {})
 
-  call term_sendkeys(buf, ":call popup_move(winid, {'col': 65, 'line': 2})\<CR>")
-  call term_sendkeys(buf, ":call popup_move(winidb, {'col': 63})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winid, *{col: 65, line: 2})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winidb, *{col: 63})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_mask_3', {})
 
-  call term_sendkeys(buf, ":call popup_move(winid, {'pos': 'topright', 'col': 12, 'line': 2})\<CR>")
-  call term_sendkeys(buf, ":call popup_move(winidb, {'pos': 'topright', 'col': 12})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winid, *{pos: 'topright', col: 12, line: 2})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winidb, *{pos: 'topright', col: 12})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_mask_4', {})
 
-  call term_sendkeys(buf, ":call popup_move(winid, {'pos': 'topright', 'col': 12, 'line': 11})\<CR>")
-  call term_sendkeys(buf, ":call popup_move(winidb, {'pos': 'topleft', 'col': 42, 'line': 11})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winid, *{pos: 'topright', col: 12, line: 11})\<CR>")
+  call term_sendkeys(buf, ":call popup_move(winidb, *{pos: 'topleft', col: 42, line: 11})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_mask_5', {})
 
   " clean up
@@ -506,11 +506,11 @@
   let lines =<< trim END
     set clipboard=autoselect
     call setline(1, range(1, 20))
-    let winid = popup_create(['the word', 'some more', 'several words here'], {
-	  \ 'drag': 1,
-	  \ 'border': [],
-	  \ 'line': 3,
-	  \ 'col': 10,
+    let winid = popup_create(['the word', 'some more', 'several words here'], *{
+	  \ drag: 1,
+	  \ border: [],
+	  \ line: 3,
+	  \ col: 10,
 	  \ })
     func Select1()
       call feedkeys("\<F3>\<LeftMouse>\<F4>\<LeftDrag>\<LeftRelease>", "xt")
@@ -519,7 +519,7 @@
     map <silent> <F4> :call test_setmouse(6, 23)<CR>
   END
   call writefile(lines, 'XtestPopupSelect')
-  let buf = RunVimInTerminal('-S XtestPopupSelect', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupSelect', *{rows: 10})
   call term_sendkeys(buf, ":call Select1()\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_select_01', {})
 
@@ -553,7 +553,7 @@
   call assert_equal(0, bufexists(bufnr))
 
   " global popup is visible in any tab
-  let winid = popup_create("text", {'tabpage': -1})
+  let winid = popup_create("text", *{tabpage: -1})
   call assert_equal(1, popup_getpos(winid).visible)
   call assert_equal(-1, popup_getoptions(winid).tabpage)
   tabnew
@@ -565,7 +565,7 @@
 
   " create popup in other tab
   tabnew
-  let winid = popup_create("text", {'tabpage': 1})
+  let winid = popup_create("text", *{tabpage: 1})
   call assert_equal(0, popup_getpos(winid).visible)
   call assert_equal(1, popup_getoptions(winid).tabpage)
   quit
@@ -576,19 +576,19 @@
 
 func Test_popup_valid_arguments()
   " Zero value is like the property wasn't there
-  let winid = popup_create("text", {"col": 0})
+  let winid = popup_create("text", *{col: 0})
   let pos = popup_getpos(winid)
   call assert_inrange(&columns / 2 - 1, &columns / 2 + 1, pos.col)
   call popup_clear()
 
   " using cursor column has minimum value of 1
-  let winid = popup_create("text", {"col": 'cursor-100'})
+  let winid = popup_create("text", *{col: 'cursor-100'})
   let pos = popup_getpos(winid)
   call assert_equal(1, pos.col)
   call popup_clear()
 
   " center
-  let winid = popup_create("text", {"pos": 'center'})
+  let winid = popup_create("text", *{pos: 'center'})
   let pos = popup_getpos(winid)
   let around = (&columns - pos.width) / 2
   call assert_inrange(around - 1, around + 1, pos.col)
@@ -603,40 +603,40 @@
   call assert_fails('call popup_create("text", "none")', 'E715:')
   call popup_clear()
 
-  call assert_fails('call popup_create("text", {"col": "xxx"})', 'E475:')
+  call assert_fails('call popup_create("text", *{col: "xxx"})', 'E475:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"col": "cursor8"})', 'E15:')
+  call assert_fails('call popup_create("text", *{col: "cursor8"})', 'E15:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"col": "cursor+x"})', 'E15:')
+  call assert_fails('call popup_create("text", *{col: "cursor+x"})', 'E15:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"col": "cursor+8x"})', 'E15:')
+  call assert_fails('call popup_create("text", *{col: "cursor+8x"})', 'E15:')
   call popup_clear()
 
-  call assert_fails('call popup_create("text", {"line": "xxx"})', 'E475:')
+  call assert_fails('call popup_create("text", *{line: "xxx"})', 'E475:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"line": "cursor8"})', 'E15:')
+  call assert_fails('call popup_create("text", *{line: "cursor8"})', 'E15:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"line": "cursor+x"})', 'E15:')
+  call assert_fails('call popup_create("text", *{line: "cursor+x"})', 'E15:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"line": "cursor+8x"})', 'E15:')
+  call assert_fails('call popup_create("text", *{line: "cursor+8x"})', 'E15:')
   call popup_clear()
 
-  call assert_fails('call popup_create("text", {"pos": "there"})', 'E475:')
+  call assert_fails('call popup_create("text", *{pos: "there"})', 'E475:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"padding": "none"})', 'E714:')
+  call assert_fails('call popup_create("text", *{padding: "none"})', 'E714:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"border": "none"})', 'E714:')
+  call assert_fails('call popup_create("text", *{border: "none"})', 'E714:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"borderhighlight": "none"})', 'E714:')
+  call assert_fails('call popup_create("text", *{borderhighlight: "none"})', 'E714:')
   call popup_clear()
-  call assert_fails('call popup_create("text", {"borderchars": "none"})', 'E714:')
+  call assert_fails('call popup_create("text", *{borderchars: "none"})', 'E714:')
   call popup_clear()
 
-  call assert_fails('call popup_create([{"text": "text"}, 666], {})', 'E715:')
+  call assert_fails('call popup_create([*{text: "text"}, 666], {})', 'E715:')
   call popup_clear()
-  call assert_fails('call popup_create([{"text": "text", "props": "none"}], {})', 'E714:')
+  call assert_fails('call popup_create([*{text: "text", props: "none"}], {})', 'E714:')
   call popup_clear()
-  call assert_fails('call popup_create([{"text": "text", "props": ["none"]}], {})', 'E715:')
+  call assert_fails('call popup_create([*{text: "text", props: ["none"]}], {})', 'E715:')
   call popup_clear()
 endfunc
 
@@ -676,10 +676,10 @@
 	 call setline(1, range(1, 100))
 	 let winid = popup_create(
 	   \ 'a long line that wont fit',
-	   \ {'line': 3, 'col': 20, 'maxwidth': 10, 'wrap': 1})
+	   \ *{line: 3, col: 20, maxwidth: 10, wrap: 1})
   END
   call writefile(lines, 'XtestPopup')
-  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_wrap', {})
 
   " clean up
@@ -695,10 +695,10 @@
 	 call setline(1, range(1, 100))
 	 let winid = popup_create(
 	   \ 'a long line that wont fit',
-	   \ {'line': 3, 'col': 20, 'maxwidth': 10, 'wrap': 0})
+	   \ *{line: 3, col: 20, maxwidth: 10, wrap: 0})
   END
   call writefile(lines, 'XtestPopup')
-  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_nowrap', {})
 
   " clean up
@@ -713,11 +713,11 @@
   topleft vnew
   call setline(1, 'hello')
 
-  let winid = popup_create('world', {
-	\ 'line': 1,
-	\ 'col': 1,
-	\ 'minwidth': 20,
-	\ 'time': 500,
+  let winid = popup_create('world', *{
+	\ line: 1,
+	\ col: 1,
+	\ minwidth: 20,
+	\ time: 500,
 	\})
   redraw
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
@@ -733,11 +733,11 @@
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
   call assert_equal('hello', line)
 
-  call popup_create('on the command line', {
-	\ 'line': &lines,
-	\ 'col': 10,
-	\ 'minwidth': 20,
-	\ 'time': 500,
+  call popup_create('on the command line', *{
+	\ line: &lines,
+	\ col: 10,
+	\ minwidth: 20,
+	\ time: 500,
 	\})
   redraw
   let line = join(map(range(1, 30), 'screenstring(&lines, v:val)'), '')
@@ -755,10 +755,10 @@
   topleft vnew
   call setline(1, 'hello')
 
-  let winid = popup_create('world', {
-	\ 'line': 1,
-	\ 'col': 1,
-	\ 'minwidth': 20,
+  let winid = popup_create('world', *{
+	\ line: 1,
+	\ col: 1,
+	\ minwidth: 20,
 	\})
   redraw
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
@@ -801,23 +801,23 @@
   topleft vnew
   call setline(1, 'hello')
 
-  let winid = popup_create('world', {
-	\ 'line': 1,
-	\ 'col': 1,
-	\ 'minwidth': 20,
+  let winid = popup_create('world', *{
+	\ line: 1,
+	\ col: 1,
+	\ minwidth: 20,
 	\})
   redraw
   let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
   call assert_equal('world ', line)
 
-  call popup_move(winid, {'line': 2, 'col': 2})
+  call popup_move(winid, *{line: 2, col: 2})
   redraw
   let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
   call assert_equal('hello ', line)
   let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '')
   call assert_equal('~world', line)
 
-  call popup_move(winid, {'line': 1})
+  call popup_move(winid, *{line: 1})
   redraw
   let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
   call assert_equal('hworld', line)
@@ -828,11 +828,11 @@
 endfunc
 
 func Test_popup_getpos()
-  let winid = popup_create('hello', {
-    \ 'line': 2,
-    \ 'col': 3,
-    \ 'minwidth': 10,
-    \ 'minheight': 11,
+  let winid = popup_create('hello', *{
+    \ line: 2,
+    \ col: 3,
+    \ minwidth: 10,
+    \ minheight: 11,
     \})
   redraw
   let res = popup_getpos(winid)
@@ -855,7 +855,7 @@
 	\ ]
 
   for test in tests
-    let winid = popup_create(test[0], {'line': 2, 'col': 3})
+    let winid = popup_create(test[0], *{line: 2, col: 3})
     redraw
     let position = popup_getpos(winid)
     call assert_equal(test[1], position.width)
@@ -871,7 +871,7 @@
 	\ ]
   for test in tests
     let winid = popup_create(test[0],
-	  \ {'line': 2, 'col': 3, 'maxwidth': 12})
+	  \ *{line: 2, col: 3, maxwidth: 12})
     redraw
     let position = popup_getpos(winid)
     call assert_equal(test[1], position.width)
@@ -883,16 +883,16 @@
 endfunc
 
 func Test_popup_getoptions()
-  let winid = popup_create('hello', {
-    \ 'line': 2,
-    \ 'col': 3,
-    \ 'minwidth': 10,
-    \ 'minheight': 11,
-    \ 'maxwidth': 20,
-    \ 'maxheight': 21,
-    \ 'zindex': 100,
-    \ 'time': 5000,
-    \ 'fixed': 1
+  let winid = popup_create('hello', *{
+    \ line: 2,
+    \ col: 3,
+    \ minwidth: 10,
+    \ minheight: 11,
+    \ maxwidth: 20,
+    \ maxheight: 21,
+    \ zindex: 100,
+    \ time: 5000,
+    \ fixed: 1
     \})
   redraw
   let res = popup_getoptions(winid)
@@ -976,10 +976,10 @@
 
   call cursor(1, 1)
   redraw
-  let winid = popup_create('vim', {
-  \ 'line': 'cursor+2',
-  \ 'col': 'cursor+1',
-  \})
+  let winid = popup_create('vim', *{
+        \ line: 'cursor+2',
+        \ col: 'cursor+1',
+        \})
   redraw
   let line = join(map(range(1, 17), 'screenstring(3, v:val)'), '')
   call assert_equal('xvimxxxxxxxxxxxxx', line)
@@ -987,10 +987,10 @@
 
   call cursor(3, 3)
   redraw
-  let winid = popup_create('vim', {
-  \ 'line': 'cursor-2',
-  \ 'col': 'cursor-1',
-  \})
+  let winid = popup_create('vim', *{
+        \ line: 'cursor-2',
+        \ col: 'cursor-1',
+        \})
   redraw
   let line = join(map(range(1, 17), 'screenstring(1, v:val)'), '')
   call assert_equal('xvimxxxxxxxxxxxxx', line)
@@ -1056,7 +1056,7 @@
 	endfunc
   END
   call writefile(lines, 'XtestPopupBeval')
-  let buf = RunVimInTerminal('-S XtestPopupBeval', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupBeval', *{rows: 10})
   call term_wait(buf, 100)
   call term_sendkeys(buf, 'j')
   call term_sendkeys(buf, ":call Hover()\<CR>")
@@ -1093,7 +1093,7 @@
     return 0
   endfunc
 
-  let winid = popup_create('something', {'filter': 'MyPopupFilter'})
+  let winid = popup_create('something', *{filter: 'MyPopupFilter'})
   redraw
 
   " e is consumed by the filter
@@ -1118,9 +1118,9 @@
 
 func ShowDialog(key, result)
   let s:cb_res = 999
-  let winid = popup_dialog('do you want to quit (Yes/no)?', {
-	  \ 'filter': 'popup_filter_yesno',
-	  \ 'callback': 'QuitCallback',
+  let winid = popup_dialog('do you want to quit (Yes/no)?', *{
+	  \ filter: 'popup_filter_yesno',
+	  \ callback: 'QuitCallback',
 	  \ })
   redraw
   call feedkeys(a:key, "xt")
@@ -1148,8 +1148,8 @@
 
 func ShowMenu(key, result)
   let s:cb_res = 999
-  let winid = popup_menu(['one', 'two', 'something else'], {
-	  \ 'callback': 'QuitCallback',
+  let winid = popup_menu(['one', 'two', 'something else'], *{
+	  \ callback: 'QuitCallback',
 	  \ })
   redraw
   call feedkeys(a:key, "xt")
@@ -1184,13 +1184,13 @@
   let lines =<< trim END
 	call setline(1, range(1, 20))
 	hi PopupSelected ctermbg=lightblue
-	call popup_menu(['one', 'two', 'another'], {'callback': 'MenuDone', 'title': ' make a choice from the list '})
+	call popup_menu(['one', 'two', 'another'], *{callback: 'MenuDone', title: ' make a choice from the list '})
 	func MenuDone(id, res)
 	  echomsg "selected " .. a:res
 	endfunc
   END
   call writefile(lines, 'XtestPopupMenu')
-  let buf = RunVimInTerminal('-S XtestPopupMenu', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupMenu', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_menu_01', {})
 
   call term_sendkeys(buf, "jj")
@@ -1213,19 +1213,19 @@
   " put the title on.
   let lines =<< trim END
 	call setline(1, range(1, 20))
-	call popup_create(['one', 'two', 'another'], {'title': 'Title String'})
+	call popup_create(['one', 'two', 'another'], *{title: 'Title String'})
   END
   call writefile(lines, 'XtestPopupTitle')
-  let buf = RunVimInTerminal('-S XtestPopupTitle', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupTitle', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_title', {})
 
   " clean up
   call StopVimInTerminal(buf)
   call delete('XtestPopupTitle')
 
-  let winid = popup_create('something', {'title': 'Some Title'})
+  let winid = popup_create('something', *{title: 'Some Title'})
   call assert_equal('Some Title', popup_getoptions(winid).title)
-  call popup_setoptions(winid, {'title': 'Another Title'})
+  call popup_setoptions(winid, *{title: 'Another Title'})
   call assert_equal('Another Title', popup_getoptions(winid).title)
 
   call popup_clear()
@@ -1235,20 +1235,20 @@
   func PopupDone(id, result)
     let g:result = a:result
   endfunc
-  let winid = popup_create('something', {'callback': 'PopupDone'})
+  let winid = popup_create('something', *{callback: 'PopupDone'})
   redraw
   call popup_close(winid, 'done')
   call assert_equal('done', g:result)
 endfunc
 
 func Test_popup_empty()
-  let winid = popup_create('', {'padding': [2,2,2,2]})
+  let winid = popup_create('', *{padding: [2,2,2,2]})
   redraw
   let pos = popup_getpos(winid)
   call assert_equal(5, pos.width)
   call assert_equal(5, pos.height)
 
-  let winid = popup_create([], {'border': []})
+  let winid = popup_create([], *{border: []})
   redraw
   let pos = popup_getpos(winid)
   call assert_equal(3, pos.width)
@@ -1277,13 +1277,13 @@
     let info_window1 = getwininfo()[0]
     let line = info_window1['height']
     let col = info_window1['width']
-    call popup_create(['line1', 'line2', 'line3', 'line4'], {
-	      \   'line' : line,
-	      \   'col' : col,
+    call popup_create(['line1', 'line2', 'line3', 'line4'], *{
+	      \   line : line,
+	      \   col : col,
 	      \ })
   END
   call writefile(lines, 'XtestPopupBehind')
-  let buf = RunVimInTerminal('-S XtestPopupBehind', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupBehind', *{rows: 10})
   call term_sendkeys(buf, "\<C-W>w")
   call VerifyScreenDump(buf, 'Test_popupwin_behind', {})
 
@@ -1340,13 +1340,13 @@
   "     - expected width
   "     - expected height
   let tests = [
-        \ {
-        \   'comment': 'left-aligned with wrapping',
-        \   'options': {
-        \     'wrap': 1,
-        \     'pos': 'botleft',
+        \ *{
+        \   comment: 'left-aligned with wrapping',
+        \   options: *{
+        \     wrap: 1,
+        \     pos: 'botleft',
         \   },
-        \   'tests': both_wrap_tests + [
+        \   tests: both_wrap_tests + [
         \       [ 'aaaa', 5, &columns,        4, &columns - 2, 3, 2 ],
         \       [ 'bbbb', 5, &columns + 1,    4, &columns - 2, 3, 2 ],
         \       [ 'cccc', 5, &columns - 1,    4, &columns - 2, 3, 2 ],
@@ -1354,13 +1354,13 @@
         \       [ 'eeee', 5, &columns - 3,    5, &columns - 3, 4, 1 ],
         \   ],
         \ },
-        \ {
-        \   'comment': 'left aligned without wrapping',
-        \   'options': {
-        \     'wrap': 0,
-        \     'pos': 'botleft',
+        \ *{
+        \   comment: 'left aligned without wrapping',
+        \   options: *{
+        \     wrap: 0,
+        \     pos: 'botleft',
         \   },
-        \   'tests': both_wrap_tests + [
+        \   tests: both_wrap_tests + [
         \       [ 'aaaa', 5, &columns,        5, &columns - 3, 4, 1 ],
         \       [ 'bbbb', 5, &columns + 1,    5, &columns - 3, 4, 1 ],
         \       [ 'cccc', 5, &columns - 1,    5, &columns - 3, 4, 1 ],
@@ -1368,14 +1368,14 @@
         \       [ 'eeee', 5, &columns - 3,    5, &columns - 3, 4, 1 ],
         \   ],
         \ },
-        \ {
-        \   'comment': 'left aligned with fixed position',
-        \   'options': {
-        \     'wrap': 0,
-        \     'fixed': 1,
-        \     'pos': 'botleft',
+        \ *{
+        \   comment: 'left aligned with fixed position',
+        \   options: *{
+        \     wrap: 0,
+        \     fixed: 1,
+        \     pos: 'botleft',
         \   },
-        \   'tests': both_wrap_tests + [
+        \   tests: both_wrap_tests + [
         \       [ 'aaaa', 5, &columns,        5, &columns - 2, 3, 1 ],
         \       [ 'bbbb', 5, &columns + 1,    5, &columns - 2, 3, 1 ],
         \       [ 'cccc', 5, &columns - 1,    5, &columns - 2, 3, 1 ],
@@ -1388,17 +1388,17 @@
   for test_group in tests
     for test in test_group.tests
       let [ text, line, col, e_line, e_col, e_width, e_height ] = test
-      let options = {
-            \ 'line': line,
-            \ 'col': col,
+      let options = *{
+            \ line: line,
+            \ col: col,
             \ }
       call extend( options, test_group.options )
 
       let p = popup_create( text, options )
 
-      let msg = string( extend( options, { 'text': text } ) )
-      call s:VerifyPosition( p, msg, e_line, e_col, e_width, e_height )
-      call popup_close( p )
+      let msg = string(extend(options, *{text: text}))
+      call s:VerifyPosition(p, msg, e_line, e_col, e_width, e_height)
+      call popup_close(p)
     endfor
   endfor
 
@@ -1410,7 +1410,7 @@
   " width of screen
   let X = join(map(range(&columns), {->'X'}), '')
 
-  let p = popup_create( X, { 'line': 1, 'col': 1, 'wrap': 0 } )
+  let p = popup_create( X, *{line: 1, col: 1, wrap: 0})
   call s:VerifyPosition( p, 'full width topleft', 1, 1, &columns, 1 )
 
   redraw
@@ -1421,7 +1421,7 @@
   redraw
 
   " Same if placed on the right hand side
-  let p = popup_create( X, { 'line': 1, 'col': &columns, 'wrap': 0 } )
+  let p = popup_create( X, *{line: 1, col: &columns, wrap: 0})
   call s:VerifyPosition( p, 'full width topright', 1, 1, &columns, 1 )
 
   redraw
@@ -1434,7 +1434,7 @@
   " Extend so > window width
   let X .= 'x'
 
-  let p = popup_create( X, { 'line': 1, 'col': 1, 'wrap': 0 } )
+  let p = popup_create( X, *{line: 1, col: 1, wrap: 0})
   call s:VerifyPosition( p, 'full width +  1 topleft', 1, 1, &columns, 1 )
 
   redraw
@@ -1445,7 +1445,7 @@
   redraw
 
   " Shifted then truncated (the x is not visible)
-  let p = popup_create( X, { 'line': 1, 'col': &columns - 3, 'wrap': 0 } )
+  let p = popup_create( X, *{line: 1, col: &columns - 3, wrap: 0})
   call s:VerifyPosition( p, 'full width + 1 topright', 1, 1, &columns, 1 )
 
   redraw
@@ -1457,7 +1457,7 @@
 
   " Not shifted, just truncated
   let p = popup_create( X,
-        \ { 'line': 1, 'col': 2, 'wrap': 0, 'fixed': 1 } )
+        \ *{line: 1, col: 2, wrap: 0, fixed: 1})
   call s:VerifyPosition( p, 'full width + 1 fixed', 1, 2, &columns - 1, 1)
 
   redraw
@@ -1478,7 +1478,7 @@
   call setline(1, ['one word to move around', 'a WORD.and->some thing'])
 
   exe "normal gg0/word\<CR>"
-  let winid = popup_atcursor('text', {'moved': 'any'})
+  let winid = popup_atcursor('text', *{moved: 'any'})
   redraw
   call assert_equal(1, popup_getpos(winid).visible)
   call assert_equal([1, 4, 4], popup_getoptions(winid).moved)
@@ -1488,7 +1488,7 @@
   call popup_clear()
 
   exe "normal gg0/word\<CR>"
-  let winid = popup_atcursor('text', {'moved': 'word'})
+  let winid = popup_atcursor('text', *{moved: 'word'})
   redraw
   call assert_equal(1, popup_getpos(winid).visible)
   call assert_equal([1, 4, 7], popup_getoptions(winid).moved)
@@ -1497,7 +1497,7 @@
   call popup_clear()
 
   exe "normal gg0/word\<CR>"
-  let winid = popup_atcursor('text', {'moved': 'word'})
+  let winid = popup_atcursor('text', *{moved: 'word'})
   redraw
   call assert_equal(1, popup_getpos(winid).visible)
   call assert_equal([1, 4, 7], popup_getoptions(winid).moved)
@@ -1524,7 +1524,7 @@
   call popup_clear()
 
   exe "normal gg0/word\<CR>"
-  let winid = popup_atcursor('text', {'moved': [5, 10]})
+  let winid = popup_atcursor('text', *{moved: [5, 10]})
   redraw
   call assert_equal(1, popup_getpos(winid).visible)
   call feedkeys("eli\<Esc>", 'xt')
@@ -1551,7 +1551,7 @@
 	\ "hi Notification ctermbg=lightblue",
 	\ "call popup_notification('first notification', {})",
 	\], 'XtestNotifications')
-  let buf = RunVimInTerminal('-S XtestNotifications', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestNotifications', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_notify_01', {})
 
   " second one goes below the first one
@@ -1574,9 +1574,9 @@
     hi ScrollThumb ctermbg=blue
     hi ScrollBar ctermbg=red
     let winid = popup_create(['one', 'two', 'three', 'four', 'five',
-	  \ 'six', 'seven', 'eight', 'nine'], {
-	  \ 'minwidth': 8,
-	  \ 'maxheight': 4,
+	  \ 'six', 'seven', 'eight', 'nine'], *{
+	  \ minwidth: 8,
+	  \ maxheight: 4,
 	  \ })
     func ScrollUp()
       call feedkeys("\<F3>\<ScrollWheelUp>", "xt")
@@ -1588,7 +1588,7 @@
       call feedkeys("\<F4>\<LeftMouse>", "xt")
     endfunc
     func ClickBot()
-      call popup_setoptions(g:winid, {'border': [], 'close': 'button'})
+      call popup_setoptions(g:winid, *{border: [], close: 'button'})
       call feedkeys("\<F5>\<LeftMouse>", "xt")
     endfunc
     map <silent> <F3> :call test_setmouse(5, 36)<CR>
@@ -1596,19 +1596,19 @@
     map <silent> <F5> :call test_setmouse(7, 42)<CR>
   END
   call writefile(lines, 'XtestPopupScroll')
-  let buf = RunVimInTerminal('-S XtestPopupScroll', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupScroll', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popupwin_scroll_1', {})
 
-  call term_sendkeys(buf, ":call popup_setoptions(winid, {'firstline': 2})\<CR>")
+  call term_sendkeys(buf, ":call popup_setoptions(winid, *{firstline: 2})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_scroll_2', {})
 
-  call term_sendkeys(buf, ":call popup_setoptions(winid, {'firstline': 6})\<CR>")
+  call term_sendkeys(buf, ":call popup_setoptions(winid, *{firstline: 6})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_scroll_3', {})
 
-  call term_sendkeys(buf, ":call popup_setoptions(winid, {'firstline': 9})\<CR>")
+  call term_sendkeys(buf, ":call popup_setoptions(winid, *{firstline: 9})\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {})
 
-  call term_sendkeys(buf, ":call popup_setoptions(winid, {'scrollbarhighlight': 'ScrollBar', 'thumbhighlight': 'ScrollThumb'})\<CR>")
+  call term_sendkeys(buf, ":call popup_setoptions(winid, *{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb'})\<CR>")
   call term_sendkeys(buf, ":call ScrollUp()\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {})
 
@@ -1637,11 +1637,11 @@
 func Test_popup_fitting_scrollbar()
   " this was causing a crash, divide by zero
   let winid = popup_create([
-	\ 'one', 'two', 'longer line that wraps', 'four', 'five'], {
-	\ 'scrollbar': 1,
-	\ 'maxwidth': 10,
-	\ 'maxheight': 5,
-	\ 'firstline': 2})
+	\ 'one', 'two', 'longer line that wraps', 'four', 'five'], *{
+	\ scrollbar: 1,
+	\ maxwidth: 10,
+	\ maxheight: 5,
+	\ firstline: 2})
   redraw
   call popup_clear()
 endfunc
@@ -1652,13 +1652,13 @@
   endif
 
   let lines =<< trim END
-    let opts = {'wrap': 0}
+    let opts = *{wrap: 0}
     let p = popup_create('test', opts)
     call popup_settext(p, 'this is a text')
   END
 
   call writefile( lines, 'XtestPopupSetText' )
-  let buf = RunVimInTerminal('-S XtestPopupSetText', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupSetText', *{rows: 10})
   call VerifyScreenDump(buf, 'Test_popup_settext_01', {})
 
   " Setting to empty string clears it
@@ -1682,7 +1682,7 @@
   call VerifyScreenDump(buf, 'Test_popup_settext_05', {})
 
   " Dicts
-  call term_sendkeys(buf, ":call popup_settext(p, [{'text': 'aaaa'}, {'text': 'bbbb'}, {'text': 'cccc'}])\<CR>")
+  call term_sendkeys(buf, ":call popup_settext(p, [*{text: 'aaaa'}, *{text: 'bbbb'}, *{text: 'cccc'}])\<CR>")
   call VerifyScreenDump(buf, 'Test_popup_settext_06', {})
 
   " clean up
@@ -1693,12 +1693,12 @@
 func Test_popup_hidden()
   new
 
-  let winid = popup_atcursor('text', {'hidden': 1})
+  let winid = popup_atcursor('text', *{hidden: 1})
   redraw
   call assert_equal(0, popup_getpos(winid).visible)
   call popup_close(winid)
 
-  let winid = popup_create('text', {'hidden': 1})
+  let winid = popup_create('text', *{hidden: 1})
   redraw
   call assert_equal(0, popup_getpos(winid).visible)
   call popup_close(winid)
@@ -1707,9 +1707,9 @@
     let s:cb_winid = a:id
     let s:cb_res = a:res
   endfunc
-  let winid = popup_dialog('make a choice', {'hidden': 1,
-	  \ 'filter': 'popup_filter_yesno',
-	  \ 'callback': 'QuitCallback',
+  let winid = popup_dialog('make a choice', *{hidden: 1,
+	  \ filter: 'popup_filter_yesno',
+	  \ callback: 'QuitCallback',
 	  \ })
   redraw
   call assert_equal(0, popup_getpos(winid).visible)
@@ -1728,13 +1728,13 @@
 
 " Test options not checked elsewhere
 func Test_set_get_options()
-  let winid = popup_create('some text', {'highlight': 'Beautiful'})
+  let winid = popup_create('some text', *{highlight: 'Beautiful'})
   let options = popup_getoptions(winid)
   call assert_equal(1, options.wrap)
   call assert_equal(0, options.drag)
   call assert_equal('Beautiful', options.highlight)
 
-  call popup_setoptions(winid, {'wrap': 0, 'drag': 1, 'highlight': 'Another'})
+  call popup_setoptions(winid, *{wrap: 0, drag: 1, highlight: 'Another'})
   let options = popup_getoptions(winid)
   call assert_equal(0, options.wrap)
   call assert_equal(1, options.drag)
@@ -1748,7 +1748,7 @@
     " NOP
   endfunc
 
-  let winid = popup_create('something', {'filter': function('MyPopupFilter', [{}])})
+  let winid = popup_create('something', *{filter: function('MyPopupFilter', [{}])})
   call test_garbagecollect_now()
   redraw
   " Must not crach caused by invalid memory access
@@ -1781,12 +1781,12 @@
 endfunc
 
 func Test_popupwin_width()
-  let winid = popup_create(repeat(['short', 'long long long line', 'medium width'], 50), {
-	\ 'maxwidth': 40,
-	\ 'maxheight': 10,
+  let winid = popup_create(repeat(['short', 'long long long line', 'medium width'], 50), *{
+	\ maxwidth: 40,
+	\ maxheight: 10,
 	\ })
   for top in range(1, 20)
-    call popup_setoptions(winid, {'firstline': top})
+    call popup_setoptions(winid, *{firstline: top})
     redraw
     call assert_equal(19, popup_getpos(winid).width)
   endfor
@@ -1830,13 +1830,13 @@
 	hi ScrollThumb ctermbg=blue
 	hi ScrollBar ctermbg=red
 	func PopupMenu(lines, line, col, scrollbar = 0)
-		return popup_menu(a:lines, {
-			\ 'maxwidth': 10,
-			\ 'maxheight': 3,
-			\ 'pos' : 'topleft',
-			\ 'col' : a:col,
-			\ 'line' : a:line,
-			\ 'scrollbar' : a:scrollbar,
+		return popup_menu(a:lines, *{
+			\ maxwidth: 10,
+			\ maxheight: 3,
+			\ pos : 'topleft',
+			\ col : a:col,
+			\ line : a:line,
+			\ scrollbar : a:scrollbar,
 			\ })
 	endfunc
 	call PopupMenu(['x'], 1, 1)
@@ -1846,7 +1846,7 @@
 	call PopupMenu(repeat(['123456789|' .. ' '], 5), 1, 33, 1)
   END
   call writefile(lines, 'XtestPopupMenuMaxWidth')
-  let buf = RunVimInTerminal('-S XtestPopupMenuMaxWidth', {'rows': 13})
+  let buf = RunVimInTerminal('-S XtestPopupMenuMaxWidth', *{rows: 13})
   call VerifyScreenDump(buf, 'Test_popupwin_menu_maxwidth_1', {})
 
   " close the menu popupwin.
@@ -1871,13 +1871,13 @@
     hi ScrollThumb ctermbg=blue
     hi ScrollBar ctermbg=red
     call popup_menu(['one', 'two', 'three', 'four', 'five',
-	  \ 'six', 'seven', 'eight', 'nine'], {
-	  \ 'minwidth': 8,
-	  \ 'maxheight': 3,
+	  \ 'six', 'seven', 'eight', 'nine'], *{
+	  \ minwidth: 8,
+	  \ maxheight: 3,
 	  \ })
   END
   call writefile(lines, 'XtestPopupMenuScroll')
-  let buf = RunVimInTerminal('-S XtestPopupMenuScroll', {'rows': 10})
+  let buf = RunVimInTerminal('-S XtestPopupMenuScroll', *{rows: 10})
 
   call term_sendkeys(buf, "j")
   call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_1', {})
diff --git a/src/version.c b/src/version.c
index efcdb3f..fb7e5c3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1683,
+/**/
     1682,
 /**/
     1681,
