@@ -368,23 +368,37 @@ pub fn (mut p Parser) root_table() ? {
368
368
}
369
369
.lsbr {
370
370
p.check (.lsbr) ? // '[' bracket
371
+ mut peek_tok := p.peek_tok
372
+
373
+ // Disallow `[ [table]]`
374
+ if p.tok.kind in parser.space_formatting {
375
+ peek_tok = p.peek_over (1 , parser.space_formatting) ?
376
+ if peek_tok.kind == .lsbr {
377
+ return error (@MOD + '.' + @STRUCT + '.' + @FN +
378
+ ' unexpected "$p.tok.kind " "$p.tok.lit " at this (excerpt): "...${p.excerpt()} ..."' )
379
+ }
380
+ }
381
+
382
+ // Allow `[ d.e.f]`
371
383
p.ignore_while (parser.space_formatting)
372
384
373
- mut peek_tok := p.peek_tok
374
385
// Peek forward as far as we can skipping over space formatting tokens.
375
386
peek_tok = p.peek_over (1 , parser.space_formatting) ?
376
387
377
388
if p.tok.kind == .lsbr {
389
+ // Parse `[[table]]`
378
390
p.array_of_tables (mut & p.root_map) ?
379
391
p.skip_next = true // skip calling p.next() in coming iteration
380
392
util.printdbg (@MOD + '.' + @STRUCT + '.' + @FN, 'leaving double bracket at "$p.tok.kind " "$p.tok.lit ". NEXT is "$p.peek_tok.kind "$p.peek_tok.lit "' )
381
393
} else if peek_tok.kind == .period {
394
+ // Parse `[d.e.f]`
382
395
p.ignore_while (parser.space_formatting)
383
396
p.root_map_key = p.dotted_key () ?
384
397
p.ignore_while (parser.space_formatting)
385
398
util.printdbg (@MOD + '.' + @STRUCT + '.' + @FN, 'setting root map key to `$p.root_map_key ` at "$p.tok.kind " "$p.tok.lit "' )
386
399
p.expect (.rsbr) ?
387
400
} else {
401
+ // Parse `[key]`
388
402
key := p.key () ?
389
403
p.root_map_key = key.str ()
390
404
util.printdbg (@MOD + '.' + @STRUCT + '.' + @FN, 'setting root map key to `$p.root_map_key ` at "$p.tok.kind " "$p.tok.lit "' )
0 commit comments