@@ -3261,53 +3261,64 @@ function! s:ExprParser.parse_dot(token, left)
3261
3261
endfunction
3262
3262
3263
3263
function ! s: ExprParser .parse_identifier ()
3264
- let id = []
3265
3264
call self .reader.skip_white ()
3266
3265
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 = []
3267
3281
let c = self .reader.peek ()
3282
+ let pos = self .reader.getpos ()
3268
3283
if c == # ' <' && self .reader.peekn (5 ) == ? ' <SID>'
3269
3284
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)
3274
3291
endif
3275
3292
while 1
3293
+ let pos = self .reader.getpos ()
3276
3294
let c = self .reader.peek ()
3277
3295
if s: isnamec (c )
3278
3296
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)
3283
3303
elseif c == # ' {'
3284
3304
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)
3287
3311
call self .reader.skip_white ()
3288
3312
let c = self .reader.p (0 )
3289
3313
if c !=# ' }'
3290
3314
throw s: Err (printf (' unexpected token: %s' , c ), self .reader.getpos ())
3291
3315
endif
3292
3316
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)
3297
3317
else
3298
3318
break
3299
3319
endif
3300
3320
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
3311
3322
endfunction
3312
3323
3313
3324
let s: LvalueParser = copy (s: ExprParser )
0 commit comments