Skip to content

Commit e323ea0

Browse files
author
Kuniwak
committed
Refactor
1 parent cd75985 commit e323ea0

File tree

1 file changed

+36
-25
lines changed

1 file changed

+36
-25
lines changed

autoload/vimlparser.vim

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3261,53 +3261,64 @@ function! s:ExprParser.parse_dot(token, left)
32613261
endfunction
32623262

32633263
function! s:ExprParser.parse_identifier()
3264-
let id = []
32653264
call self.reader.skip_white()
32663265
let npos = self.reader.getpos()
3266+
let curly_parts = self.parse_curly_parts()
3267+
if len(curly_parts) == 1 && curly_parts[0].type == s:NODE_CURLYNAMEPART
3268+
let node = s:Node(s:NODE_IDENTIFIER)
3269+
let node.pos = npos
3270+
let node.value = curly_parts[0].value
3271+
else
3272+
let node = s:Node(s:NODE_CURLYNAME)
3273+
let node.pos = npos
3274+
let node.value = curly_parts
3275+
endif
3276+
return node
3277+
endfunction
3278+
3279+
function! s:ExprParser.parse_curly_parts()
3280+
let curly_parts = []
32673281
let c = self.reader.peek()
3282+
let pos = self.reader.getpos()
32683283
if c ==# '<' && self.reader.peekn(5) ==? '<SID>'
32693284
let name = self.reader.getn(5)
3270-
let node_1 = s:Node(s:NODE_CURLYNAMEPART)
3271-
let node_1.pos = self.reader.getpos()
3272-
let node_1.value = name
3273-
call add(id, node_1)
3285+
let node = s:Node(s:NODE_CURLYNAMEPART)
3286+
" Keep backword compatibility for the curly attribute
3287+
let node.curly = 0
3288+
let node.pos = pos
3289+
let node.value = name
3290+
call add(curly_parts, node)
32743291
endif
32753292
while 1
3293+
let pos = self.reader.getpos()
32763294
let c = self.reader.peek()
32773295
if s:isnamec(c)
32783296
let name = self.reader.read_name()
3279-
let node_2 = s:Node(s:NODE_CURLYNAMEPART)
3280-
let node_2.pos = self.reader.getpos()
3281-
let node_2.value = name
3282-
call add(id, node_2)
3297+
let node = s:Node(s:NODE_CURLYNAMEPART)
3298+
" Keep backword compatibility for the curly attribute
3299+
let node.curly = 0
3300+
let node.pos = pos
3301+
let node.value = name
3302+
call add(curly_parts, node)
32833303
elseif c ==# '{'
32843304
call self.reader.get()
3285-
let pos_3 = self.reader.getpos()
3286-
let node = self.parse_expr1()
3305+
let node = s:Node(s:NODE_CURLYNAMEEXPR)
3306+
" Keep backword compatibility for the curly attribute
3307+
let node.curly = 1
3308+
let node.pos = pos
3309+
let node.value = self.parse_expr1()
3310+
call add(curly_parts, node)
32873311
call self.reader.skip_white()
32883312
let c = self.reader.p(0)
32893313
if c !=# '}'
32903314
throw s:Err(printf('unexpected token: %s', c), self.reader.getpos())
32913315
endif
32923316
call self.reader.seek_cur(1)
3293-
let node_3 = s:Node(s:NODE_CURLYNAMEEXPR)
3294-
let node_3.pos = pos_3
3295-
let node_3.value = node
3296-
call add(id, node_3)
32973317
else
32983318
break
32993319
endif
33003320
endwhile
3301-
if len(id) == 1 && id[0].type == s:NODE_CURLYNAMEPART
3302-
let node = s:Node(s:NODE_IDENTIFIER)
3303-
let node.pos = npos
3304-
let node.value = id[0].value
3305-
else
3306-
let node = s:Node(s:NODE_CURLYNAME)
3307-
let node.pos = npos
3308-
let node.value = id
3309-
endif
3310-
return node
3321+
return curly_parts
33113322
endfunction
33123323

33133324
let s:LvalueParser = copy(s:ExprParser)

0 commit comments

Comments
 (0)