Skip to content

Commit 6347a94

Browse files
committed
add scope hack for compiler to other language
This change allow us to translate vimlparser.vim to other language (e.g. Go) which creates scope in "if" block.
1 parent c4a3509 commit 6347a94

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

autoload/vimlparser.vim

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -530,11 +530,10 @@ function! s:VimLParser.parse_command_modifiers()
530530
let modifiers = []
531531
while s:TRUE
532532
let pos = self.reader.tell()
533+
let d = ''
533534
if s:isdigit(self.reader.peekn(1))
534535
let d = self.reader.read_digit()
535536
call self.reader.skip_white()
536-
else
537-
let d = ''
538537
endif
539538
let k = self.reader.read_alpha()
540539
let c = self.reader.peekn(1)
@@ -802,6 +801,7 @@ endfunction
802801

803802
function! s:VimLParser.find_command()
804803
let c = self.reader.peekn(1)
804+
let name = ''
805805

806806
if c ==# 'k'
807807
call self.reader.getn(1)
@@ -989,6 +989,7 @@ endfunction
989989

990990
" TODO:
991991
function! s:VimLParser.parse_cmd_common()
992+
let end = self.reader.getpos()
992993
if self.ea.cmd.flags =~# '\<TRLBAR\>' && !self.ea.usefilter
993994
let end = self.separate_nextcmd()
994995
elseif self.ea.cmd.name ==# '!' || self.ea.cmd.name ==# 'global' || self.ea.cmd.name ==# 'vglobal' || self.ea.usefilter
@@ -1134,6 +1135,7 @@ function! s:VimLParser.parse_cmd_loadkeymap()
11341135
endfunction
11351136

11361137
function! s:VimLParser.parse_cmd_lua()
1138+
let lines = []
11371139
call self.reader.skip_white()
11381140
if self.reader.peekn(2) ==# '<<'
11391141
call self.reader.getn(2)
@@ -1254,6 +1256,7 @@ function! s:VimLParser.parse_cmd_function()
12541256
else
12551257
let named = {}
12561258
while s:TRUE
1259+
let varnode = s:Node(s:NODE_IDENTIFIER)
12571260
let token = tokenizer.get()
12581261
if token.type == s:TOKEN_IDENTIFIER
12591262
if !s:isargname(token.value) || token.value ==# 'firstline' || token.value ==# 'lastline'
@@ -1262,7 +1265,6 @@ function! s:VimLParser.parse_cmd_function()
12621265
throw s:Err(printf('E853: Duplicate argument name: %s', token.value), token.pos)
12631266
endif
12641267
let named[token.value] = 1
1265-
let varnode = s:Node(s:NODE_IDENTIFIER)
12661268
let varnode.pos = token.pos
12671269
let varnode.value = token.value
12681270
call add(node.rlist, varnode)
@@ -1283,7 +1285,6 @@ function! s:VimLParser.parse_cmd_function()
12831285
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
12841286
endif
12851287
elseif token.type == s:TOKEN_DOTDOTDOT
1286-
let varnode = s:Node(s:NODE_IDENTIFIER)
12871288
let varnode.pos = token.pos
12881289
let varnode.value = token.value
12891290
call add(node.rlist, varnode)
@@ -2672,6 +2673,7 @@ function! s:ExprTokenizer.get2()
26722673
" @<EOL> is treated as @"
26732674
return self.token(s:TOKEN_REG, r.getn(2), pos)
26742675
elseif c ==# '&'
2676+
let s = ''
26752677
if (r.p(1) ==# 'g' || r.p(1) ==# 'l') && r.p(2) ==# ':'
26762678
let s = r.getn(3) . r.read_word()
26772679
else
@@ -3158,6 +3160,7 @@ function! s:ExprParser.parse_expr8()
31583160
if token.type != s:TOKEN_SQCLOSE
31593161
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
31603162
endif
3163+
let left = node
31613164
else
31623165
let right = self.parse_expr1()
31633166
if self.tokenizer.peek().type == s:TOKEN_COLON
@@ -3174,6 +3177,7 @@ function! s:ExprParser.parse_expr8()
31743177
if token.type != s:TOKEN_SQCLOSE
31753178
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
31763179
endif
3180+
let left = node
31773181
else
31783182
let node = s:Node(s:NODE_SUBSCRIPT)
31793183
let node.pos = npos
@@ -3183,9 +3187,9 @@ function! s:ExprParser.parse_expr8()
31833187
if token.type != s:TOKEN_SQCLOSE
31843188
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
31853189
endif
3190+
let left = node
31863191
endif
31873192
endif
3188-
let left = node
31893193
unlet node
31903194
elseif token.type == s:TOKEN_POPEN
31913195
let node = s:Node(s:NODE_CALL)
@@ -3250,6 +3254,7 @@ endfunction
32503254
function! s:ExprParser.parse_expr9()
32513255
let pos = self.reader.tell()
32523256
let token = self.tokenizer.get()
3257+
let node = s:Node(-1)
32533258
if token.type == s:TOKEN_NUMBER
32543259
let node = s:Node(s:NODE_NUMBER)
32553260
let node.pos = token.pos
@@ -3476,12 +3481,13 @@ function! s:ExprParser.parse_identifier()
34763481
let node = s:Node(s:NODE_IDENTIFIER)
34773482
let node.pos = npos
34783483
let node.value = curly_parts[0].value
3484+
return node
34793485
else
34803486
let node = s:Node(s:NODE_CURLYNAME)
34813487
let node.pos = npos
34823488
let node.value = curly_parts
3483-
endif
34843489
return node
3490+
endif
34853491
endfunction
34863492

34873493
function! s:ExprParser.parse_curly_parts()
@@ -3544,6 +3550,7 @@ function! s:LvalueParser.parse_lv8()
35443550
let token = self.tokenizer.get()
35453551
if !s:iswhite(c) && token.type == s:TOKEN_SQOPEN
35463552
let npos = token.pos
3553+
let node = s:Node(-1)
35473554
if self.tokenizer.peek().type == s:TOKEN_COLON
35483555
call self.tokenizer.get()
35493556
let node = s:Node(s:NODE_SLICE)
@@ -3611,6 +3618,7 @@ endfunction
36113618
function! s:LvalueParser.parse_lv9()
36123619
let pos = self.reader.tell()
36133620
let token = self.tokenizer.get()
3621+
let node = s:Node(-1)
36143622
if token.type == s:TOKEN_COPEN
36153623
call self.reader.seek_set(pos)
36163624
let node = self.parse_identifier()
@@ -4134,6 +4142,7 @@ function! s:Compiler.compile_excall(node)
41344142
endfunction
41354143

41364144
function! s:Compiler.compile_let(node)
4145+
let left = ''
41374146
if a:node.left isnot s:NIL
41384147
let left = self.compile(a:node.left)
41394148
else
@@ -4201,6 +4210,7 @@ function! s:Compiler.compile_while(node)
42014210
endfunction
42024211

42034212
function! s:Compiler.compile_for(node)
4213+
let left = ''
42044214
if a:node.left isnot s:NIL
42054215
let left = self.compile(a:node.left)
42064216
else

0 commit comments

Comments
 (0)