@@ -88,13 +88,13 @@ function grammar(jsonic: Jsonic) {
88
88
// If there's no node,
89
89
undefined === r . node
90
90
? // ... or no child node (child map or list),
91
- undefined === r . child . node
91
+ undefined === r . child . node
92
92
? // ... or no matched tokens,
93
- 0 === r . os
93
+ 0 === r . os
94
94
? // ... then the node has no value
95
- undefined
95
+ undefined
96
96
: // .. otherwise use the token value
97
- r . o0 . resolveVal ( r , ctx )
97
+ r . o0 . resolveVal ( r , ctx )
98
98
: r . child . node
99
99
: r . node
100
100
} )
@@ -220,7 +220,18 @@ function grammar(jsonic: Jsonic) {
220
220
rs . open (
221
221
[
222
222
// A pair key: `a: ...`
223
- // Increment counter n.pk to indicate pair-key state (for extensions).
223
+ // Implicit map at top level.
224
+ {
225
+ s : [ KEY , CL ] ,
226
+ c : ( r ) => 0 == r . d ,
227
+ p : 'map' ,
228
+ b : 2 ,
229
+ g : 'pair,jsonic,top' ,
230
+ } ,
231
+
232
+ // A pair dive: `a:b: ...`
233
+ // Increment counter n.pk to indicate pair-key depth (for extensions).
234
+ // a:9 -> pk=undef, a:b:9 -> pk=1, a:b:c:9 -> pk=2, etc
224
235
{
225
236
s : [ KEY , CL ] ,
226
237
p : 'map' ,
@@ -244,7 +255,6 @@ function grammar(jsonic: Jsonic) {
244
255
{
245
256
s : [ CA ] ,
246
257
c : ( r ) => 0 === r . d ,
247
- // c: { n: { dlist: 0 } },
248
258
p : 'list' ,
249
259
b : 1 ,
250
260
g : 'list,imp,jsonic' ,
@@ -256,6 +266,7 @@ function grammar(jsonic: Jsonic) {
256
266
{ s : [ ZZ ] , g : 'jsonic' } ,
257
267
] ,
258
268
{ append : true , delete : [ 2 ] } ,
269
+
259
270
) . close (
260
271
[
261
272
// Explicitly close map or list: ` }`, `]`
@@ -269,7 +280,6 @@ function grammar(jsonic: Jsonic) {
269
280
// Implicit list (comma sep) only allowed at top level: `1,2`.
270
281
{
271
282
s : [ CA ] ,
272
- // c: { n: { dlist: 0, dmap: 0 } },
273
283
c : ( r ) => r . lte ( 'dlist' ) && r . lte ( 'dmap' ) ,
274
284
r : 'list' ,
275
285
u : { implist : true } ,
@@ -278,7 +288,6 @@ function grammar(jsonic: Jsonic) {
278
288
279
289
// Implicit list (space sep) only allowed at top level: `1 2`.
280
290
{
281
- // c: { n: { dlist: 0, dmap: 0 } },
282
291
c : ( r ) => r . lte ( 'dlist' ) && r . lte ( 'dmap' ) ,
283
292
r : 'list' ,
284
293
u : { implist : true } ,
@@ -318,7 +327,6 @@ function grammar(jsonic: Jsonic) {
318
327
// Normal end of map, no path dive.
319
328
{
320
329
s : [ CB ] ,
321
- // c: { n: { pk: 0 } },
322
330
c : ( r ) => r . lte ( 'pk' ) ,
323
331
g : 'end,json' ,
324
332
} ,
@@ -391,7 +399,6 @@ function grammar(jsonic: Jsonic) {
391
399
// a:b:c:1,d:2 -> {a:{b:{c:1}},d:2 }
392
400
{
393
401
s : [ CB ] ,
394
- // c: { n: { pk: 0 } },
395
402
c : ( r ) => r . lte ( 'pk' ) ,
396
403
b : 1 ,
397
404
g : 'map,pair,json' ,
@@ -400,7 +407,6 @@ function grammar(jsonic: Jsonic) {
400
407
// Ignore trailing comma at end of map.
401
408
{
402
409
s : [ CA , CB ] ,
403
- // c: { n: { pk: 0 } },
404
410
c : ( r ) => r . lte ( 'pk' ) ,
405
411
b : 1 ,
406
412
g : 'map,pair,comma,jsonic' ,
@@ -411,7 +417,6 @@ function grammar(jsonic: Jsonic) {
411
417
// Comma means a new pair at same pair-key level.
412
418
{
413
419
s : [ CA ] ,
414
- // c: { n: { pk: 0 } },
415
420
c : ( r ) => r . lte ( 'pk' ) ,
416
421
r : 'pair' ,
417
422
g : 'map,pair,json' ,
@@ -421,7 +426,6 @@ function grammar(jsonic: Jsonic) {
421
426
// Comma means a new pair if implicit top level map.
422
427
{
423
428
s : [ CA ] ,
424
- // c: { n: { dmap: 1 } },
425
429
c : ( r ) => r . lte ( 'dmap' , 1 ) ,
426
430
r : 'pair' ,
427
431
g : 'map,pair,jsonic' ,
@@ -430,9 +434,7 @@ function grammar(jsonic: Jsonic) {
430
434
// TODO: try VAL CL ? works anywhere?
431
435
// Value means a new pair if implicit top level map.
432
436
{
433
- // s: [VAL],
434
437
s : [ KEY ] ,
435
- // c: { n: { dmap: 1 } },
436
438
c : ( r ) => r . lte ( 'dmap' , 1 ) ,
437
439
r : 'pair' ,
438
440
b : 1 ,
0 commit comments