@@ -139,6 +139,7 @@ let s:NODE_CURLYNAMEEXPR = 91
139
139
let s: NODE_LAMBDA = 92
140
140
let s: NODE_BLOB = 93
141
141
let s: NODE_CONST = 94
142
+ let s: NODE_EVAL = 95
142
143
143
144
let s: TOKEN_EOF = 1
144
145
let s: TOKEN_EOL = 2
@@ -345,6 +346,7 @@ endfunction
345
346
" FINALLY .ea .body
346
347
" ENDTRY .ea
347
348
" THROW .ea .left
349
+ " EVAL .ea .left
348
350
" ECHO .ea .list
349
351
" ECHON .ea .list
350
352
" ECHOHL .ea .str
@@ -889,6 +891,8 @@ function! s:VimLParser._parse_command(parser) abort
889
891
call self .parse_cmd_tcl ()
890
892
elseif a: parser == # ' parse_cmd_throw'
891
893
call self .parse_cmd_throw ()
894
+ elseif a: parser == # ' parse_cmd_eval'
895
+ call self .parse_cmd_eval ()
892
896
elseif a: parser == # ' parse_cmd_try'
893
897
call self .parse_cmd_try ()
894
898
elseif a: parser == # ' parse_cmd_unlet'
@@ -1820,6 +1824,14 @@ function! s:VimLParser.parse_cmd_throw() abort
1820
1824
call self .add_node (node)
1821
1825
endfunction
1822
1826
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
+
1823
1835
function ! s: VimLParser .parse_cmd_echo () abort
1824
1836
let node = s: Node (s: NODE_ECHO )
1825
1837
let node.pos = self .ea .cmdpos
@@ -2223,6 +2235,7 @@ let s:VimLParser.builtin_commands = [
2223
2235
\ {' name' : ' endtry' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endtry' },
2224
2236
\ {' name' : ' endwhile' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endwhile' },
2225
2237
\ {' 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' },
2226
2239
\ {' name' : ' ex' , ' minlen' : 2 , ' flags' : ' BANG|FILE1|EDITCMD|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
2227
2240
\ {' name' : ' execute' , ' minlen' : 3 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_execute' },
2228
2241
\ {' 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
4770
4783
elseif a: node .type == # s: NODE_EXCALL
4771
4784
call self .compile_excall (a: node )
4772
4785
return s: NIL
4786
+ elseif a: node .type == # s: NODE_EVAL
4787
+ call self .compile_eval (a: node )
4788
+ return s: NIL
4773
4789
elseif a: node .type == # s: NODE_LET
4774
4790
call self .compile_let (a: node )
4775
4791
return s: NIL
@@ -5011,6 +5027,10 @@ function! s:Compiler.compile_excall(node) abort
5011
5027
call self .out (' (call %s)' , self .compile (a: node .left ))
5012
5028
endfunction
5013
5029
5030
+ function ! s: Compiler .compile_eval (node) abort
5031
+ call self .out (' (eval %s)' , self .compile (a: node .left ))
5032
+ endfunction
5033
+
5014
5034
function ! s: Compiler .compile_let (node) abort
5015
5035
let left = ' '
5016
5036
if a: node .left isnot # s: NIL
0 commit comments