@@ -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
@@ -344,6 +345,7 @@ endfunction
344
345
" FINALLY .ea .body
345
346
" ENDTRY .ea
346
347
" THROW .ea .left
348
+ " EVAL .ea .left
347
349
" ECHO .ea .list
348
350
" ECHON .ea .list
349
351
" ECHOHL .ea .str
@@ -888,6 +890,8 @@ function! s:VimLParser._parse_command(parser) abort
888
890
call self .parse_cmd_tcl ()
889
891
elseif a: parser == # ' parse_cmd_throw'
890
892
call self .parse_cmd_throw ()
893
+ elseif a: parser == # ' parse_cmd_eval'
894
+ call self .parse_cmd_eval ()
891
895
elseif a: parser == # ' parse_cmd_try'
892
896
call self .parse_cmd_try ()
893
897
elseif a: parser == # ' parse_cmd_unlet'
@@ -1812,6 +1816,14 @@ function! s:VimLParser.parse_cmd_throw() abort
1812
1816
call self .add_node (node)
1813
1817
endfunction
1814
1818
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
+
1815
1827
function ! s: VimLParser .parse_cmd_echo () abort
1816
1828
let node = s: Node (s: NODE_ECHO )
1817
1829
let node.pos = self .ea .cmdpos
@@ -2215,6 +2227,7 @@ let s:VimLParser.builtin_commands = [
2215
2227
\ {' name' : ' endtry' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endtry' },
2216
2228
\ {' name' : ' endwhile' , ' minlen' : 4 , ' flags' : ' TRLBAR|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_endwhile' },
2217
2229
\ {' 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' },
2218
2231
\ {' name' : ' ex' , ' minlen' : 2 , ' flags' : ' BANG|FILE1|EDITCMD|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
2219
2232
\ {' name' : ' execute' , ' minlen' : 3 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_execute' },
2220
2233
\ {' 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
4762
4775
elseif a: node .type == # s: NODE_EXCALL
4763
4776
call self .compile_excall (a: node )
4764
4777
return s: NIL
4778
+ elseif a: node .type == # s: NODE_EVAL
4779
+ call self .compile_eval (a: node )
4780
+ return s: NIL
4765
4781
elseif a: node .type == # s: NODE_LET
4766
4782
call self .compile_let (a: node )
4767
4783
return s: NIL
@@ -4992,6 +5008,10 @@ function! s:Compiler.compile_excall(node) abort
4992
5008
call self .out (' (call %s)' , self .compile (a: node .left ))
4993
5009
endfunction
4994
5010
5011
+ function ! s: Compiler .compile_eval (node) abort
5012
+ call self .out (' (eval %s)' , self .compile (a: node .left ))
5013
+ endfunction
5014
+
4995
5015
function ! s: Compiler .compile_let (node) abort
4996
5016
let left = ' '
4997
5017
if a: node .left isnot # s: NIL
0 commit comments