Skip to content

Commit a0f43a0

Browse files
committed
fix dict parse followed by ,
1 parent f48fbe0 commit a0f43a0

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

autoload/vimlparser.vim

+11-6
Original file line numberDiff line numberDiff line change
@@ -3244,6 +3244,8 @@ function! s:ExprParser.parse_expr9()
32443244
let token2 = self.tokenizer.peek()
32453245
let lambda = token2.type == s:TOKEN_ARROW || token2.type == s:TOKEN_COMMA
32463246
endif
3247+
" fallback to dict or {expr} if true
3248+
let fallback = 0
32473249
if lambda
32483250
" lambda {token,...} {->...} {token->...}
32493251
let node = s:Node(s:NODE_LAMBDA)
@@ -3294,16 +3296,19 @@ function! s:ExprParser.parse_expr9()
32943296
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
32953297
endif
32963298
else
3297-
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
3299+
let fallback = 1
3300+
break
32983301
endif
32993302
let token = self.tokenizer.get()
33003303
endwhile
3301-
let node.left = self.parse_expr1()
3302-
let token = self.tokenizer.get()
3303-
if token.type != s:TOKEN_CCLOSE
3304-
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
3304+
if !fallback
3305+
let node.left = self.parse_expr1()
3306+
let token = self.tokenizer.get()
3307+
if token.type != s:TOKEN_CCLOSE
3308+
throw s:Err(printf('unexpected token: %s', token.value), token.pos)
3309+
endif
3310+
return node
33053311
endif
3306-
return node
33073312
endif
33083313
" dict
33093314
let node = s:Node(s:NODE_DICT)

test/test_dict.ok

+2
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@
77
(echo (dict ("vim" 1)))
88
(echo (dict ((+ 1 1) 2)))
99
; XXX: echo {x:1}
10+
(echo (dict ('x' (dict))))
11+
(echo (list (dict)))

test/test_dict.vim

+2
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ echo {"\<cr>": 1}
77
echo {"vim": 1}
88
echo {1+1:2}
99
" XXX: echo {x:1}
10+
echo {'x' : {},}
11+
echo [{},]

0 commit comments

Comments
 (0)