@@ -139,6 +139,7 @@ let s:NODE_CURLYNAMEEXPR = 91
139139let s: NODE_LAMBDA = 92
140140let s: NODE_BLOB = 93
141141let s: NODE_CONST = 94
142+ let s: NODE_EVAL = 95
142143
143144let s: TOKEN_EOF = 1
144145let s: TOKEN_EOL = 2
@@ -345,6 +346,7 @@ endfunction
345346" FINALLY .ea .body
346347" ENDTRY .ea
347348" THROW .ea .left
349+ " EVAL .ea .left
348350" ECHO .ea .list
349351" ECHON .ea .list
350352" ECHOHL .ea .str
@@ -889,6 +891,8 @@ function! s:VimLParser._parse_command(parser) abort
889891 call self .parse_cmd_tcl ()
890892 elseif a: parser == # ' parse_cmd_throw'
891893 call self .parse_cmd_throw ()
894+ elseif a: parser == # ' parse_cmd_eval'
895+ call self .parse_cmd_eval ()
892896 elseif a: parser == # ' parse_cmd_try'
893897 call self .parse_cmd_try ()
894898 elseif a: parser == # ' parse_cmd_unlet'
@@ -1820,6 +1824,14 @@ function! s:VimLParser.parse_cmd_throw() abort
18201824 call self .add_node (node)
18211825endfunction
18221826
1827+ function ! s: VimLParser .parse_cmd_eval () abort
1828+ let node = s: Node (s: NODE_EVAL )
1829+ let node.pos = self .ea .cmdpos
1830+ let node.ea = self .ea
1831+ let node.left = self .parse_expr ()
1832+ call self .add_node (node)
1833+ endfunction
1834+
18231835function ! s: VimLParser .parse_cmd_echo () abort
18241836 let node = s: Node (s: NODE_ECHO )
18251837 let node.pos = self .ea .cmdpos
@@ -2223,6 +2235,7 @@ let s:VimLParser.builtin_commands = [
22232235 \ {' name' : ' endtry' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endtry' },
22242236 \ {' name' : ' endwhile' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endwhile' },
22252237 \ {' name' : ' enew' , ' minlen' : 3 , ' flags' : ' BANG|TRLBAR' , ' parser' : ' parse_cmd_common' },
2238+ \ {' name' : ' eval' , ' minlen' : 2 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_eval' },
22262239 \ {' name' : ' ex' , ' minlen' : 2 , ' flags' : ' BANG|FILE1|EDITCMD|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
22272240 \ {' name' : ' execute' , ' minlen' : 3 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_execute' },
22282241 \ {' name' : ' exit' , ' minlen' : 3 , ' flags' : ' RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN' , ' parser' : ' parse_cmd_common' },
@@ -4770,6 +4783,9 @@ function! s:Compiler.compile(node) abort
47704783 elseif a: node .type == # s: NODE_EXCALL
47714784 call self .compile_excall (a: node )
47724785 return s: NIL
4786+ elseif a: node .type == # s: NODE_EVAL
4787+ call self .compile_eval (a: node )
4788+ return s: NIL
47734789 elseif a: node .type == # s: NODE_LET
47744790 call self .compile_let (a: node )
47754791 return s: NIL
@@ -5011,6 +5027,10 @@ function! s:Compiler.compile_excall(node) abort
50115027 call self .out (' (call %s)' , self .compile (a: node .left ))
50125028endfunction
50135029
5030+ function ! s: Compiler .compile_eval (node) abort
5031+ call self .out (' (eval %s)' , self .compile (a: node .left ))
5032+ endfunction
5033+
50145034function ! s: Compiler .compile_let (node) abort
50155035 let left = ' '
50165036 if a: node .left isnot # s: NIL
0 commit comments