@@ -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
@@ -344,6 +345,7 @@ endfunction
344345" FINALLY .ea .body
345346" ENDTRY .ea
346347" THROW .ea .left
348+ " EVAL .ea .left
347349" ECHO .ea .list
348350" ECHON .ea .list
349351" ECHOHL .ea .str
@@ -888,6 +890,8 @@ function! s:VimLParser._parse_command(parser) abort
888890 call self .parse_cmd_tcl ()
889891 elseif a: parser == # ' parse_cmd_throw'
890892 call self .parse_cmd_throw ()
893+ elseif a: parser == # ' parse_cmd_eval'
894+ call self .parse_cmd_eval ()
891895 elseif a: parser == # ' parse_cmd_try'
892896 call self .parse_cmd_try ()
893897 elseif a: parser == # ' parse_cmd_unlet'
@@ -1812,6 +1816,14 @@ function! s:VimLParser.parse_cmd_throw() abort
18121816 call self .add_node (node)
18131817endfunction
18141818
1819+ function ! s: VimLParser .parse_cmd_eval () abort
1820+ let node = s: Node (s: NODE_EVAL )
1821+ let node.pos = self .ea .cmdpos
1822+ let node.ea = self .ea
1823+ let node.left = self .parse_expr ()
1824+ call self .add_node (node)
1825+ endfunction
1826+
18151827function ! s: VimLParser .parse_cmd_echo () abort
18161828 let node = s: Node (s: NODE_ECHO )
18171829 let node.pos = self .ea .cmdpos
@@ -2215,6 +2227,7 @@ let s:VimLParser.builtin_commands = [
22152227 \ {' name' : ' endtry' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endtry' },
22162228 \ {' name' : ' endwhile' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endwhile' },
22172229 \ {' name' : ' enew' , ' minlen' : 3 , ' flags' : ' BANG|TRLBAR' , ' parser' : ' parse_cmd_common' },
2230+ \ {' name' : ' eval' , ' minlen' : 4 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_eval' },
22182231 \ {' name' : ' ex' , ' minlen' : 2 , ' flags' : ' BANG|FILE1|EDITCMD|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
22192232 \ {' name' : ' execute' , ' minlen' : 3 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_execute' },
22202233 \ {' name' : ' exit' , ' minlen' : 3 , ' flags' : ' RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN' , ' parser' : ' parse_cmd_common' },
@@ -4762,6 +4775,9 @@ function! s:Compiler.compile(node) abort
47624775 elseif a: node .type == # s: NODE_EXCALL
47634776 call self .compile_excall (a: node )
47644777 return s: NIL
4778+ elseif a: node .type == # s: NODE_EVAL
4779+ call self .compile_eval (a: node )
4780+ return s: NIL
47654781 elseif a: node .type == # s: NODE_LET
47664782 call self .compile_let (a: node )
47674783 return s: NIL
@@ -4992,6 +5008,10 @@ function! s:Compiler.compile_excall(node) abort
49925008 call self .out (' (call %s)' , self .compile (a: node .left ))
49935009endfunction
49945010
5011+ function ! s: Compiler .compile_eval (node) abort
5012+ call self .out (' (eval %s)' , self .compile (a: node .left ))
5013+ endfunction
5014+
49955015function ! s: Compiler .compile_let (node) abort
49965016 let left = ' '
49975017 if a: node .left isnot # s: NIL
0 commit comments