edn_turbo 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,8 @@
5
5
  #include <vector>
6
6
  #include <exception>
7
7
 
8
+ #include <cstring>
9
+
8
10
  #include "edn_parser.h"
9
11
 
10
12
  //
@@ -16,7 +18,7 @@
16
18
  //
17
19
 
18
20
 
19
- #line 54 "edn_parser.rl"
21
+ #line 56 "edn_parser.rl"
20
22
 
21
23
 
22
24
  // ============================================================
@@ -24,7 +26,7 @@
24
26
  //
25
27
 
26
28
 
27
- #line 28 "edn_parser.cc"
29
+ #line 30 "edn_parser.cc"
28
30
  static const int EDN_value_start = 1;
29
31
  static const int EDN_value_first_final = 2;
30
32
  static const int EDN_value_error = 0;
@@ -32,7 +34,7 @@ static const int EDN_value_error = 0;
32
34
  static const int EDN_value_en_main = 1;
33
35
 
34
36
 
35
- #line 170 "edn_parser.rl"
37
+ #line 172 "edn_parser.rl"
36
38
 
37
39
 
38
40
 
@@ -42,14 +44,14 @@ const char *edn::Parser::parse_value(const char *p, const char *pe, VALUE& v)
42
44
  int cs;
43
45
 
44
46
 
45
- #line 46 "edn_parser.cc"
47
+ #line 48 "edn_parser.cc"
46
48
  {
47
49
  cs = EDN_value_start;
48
50
  }
49
51
 
50
- #line 179 "edn_parser.rl"
52
+ #line 181 "edn_parser.rl"
51
53
 
52
- #line 53 "edn_parser.cc"
54
+ #line 55 "edn_parser.cc"
53
55
  {
54
56
  if ( p == pe )
55
57
  goto _test_eof;
@@ -92,7 +94,7 @@ st0:
92
94
  cs = 0;
93
95
  goto _out;
94
96
  tr0:
95
- #line 98 "edn_parser.rl"
97
+ #line 100 "edn_parser.rl"
96
98
  {
97
99
  // stand-alone operators *, +, -, etc.
98
100
  const char *np = parse_operator(p, pe, v);
@@ -100,7 +102,7 @@ tr0:
100
102
  }
101
103
  goto st2;
102
104
  tr2:
103
- #line 66 "edn_parser.rl"
105
+ #line 68 "edn_parser.rl"
104
106
  {
105
107
  // string types within double-quotes
106
108
  const char *np = parse_string(p, pe, v);
@@ -108,7 +110,7 @@ tr2:
108
110
  }
109
111
  goto st2;
110
112
  tr3:
111
- #line 150 "edn_parser.rl"
113
+ #line 152 "edn_parser.rl"
112
114
  {
113
115
  // handles tokens w/ leading # ("#_", "#{", and tagged elems)
114
116
  const char *np = parse_dispatch(p + 1, pe, v);
@@ -116,7 +118,7 @@ tr3:
116
118
  }
117
119
  goto st2;
118
120
  tr4:
119
- #line 132 "edn_parser.rl"
121
+ #line 134 "edn_parser.rl"
120
122
  {
121
123
  // (
122
124
  const char *np = parse_list(p, pe, v);
@@ -124,7 +126,7 @@ tr4:
124
126
  }
125
127
  goto st2;
126
128
  tr5:
127
- #line 78 "edn_parser.rl"
129
+ #line 80 "edn_parser.rl"
128
130
  {
129
131
  // tokens w/ leading digits: non-negative integers & decimals.
130
132
  // try to parse a decimal first
@@ -146,7 +148,7 @@ tr5:
146
148
  }
147
149
  goto st2;
148
150
  tr6:
149
- #line 72 "edn_parser.rl"
151
+ #line 74 "edn_parser.rl"
150
152
  {
151
153
  // tokens with a leading ':'
152
154
  const char *np = parse_keyword(p, pe, v);
@@ -154,7 +156,7 @@ tr6:
154
156
  }
155
157
  goto st2;
156
158
  tr7:
157
- #line 110 "edn_parser.rl"
159
+ #line 112 "edn_parser.rl"
158
160
  {
159
161
  // user identifiers and reserved keywords (true, false, nil)
160
162
  VALUE sym = Qnil;
@@ -172,7 +174,7 @@ tr7:
172
174
  }
173
175
  goto st2;
174
176
  tr8:
175
- #line 126 "edn_parser.rl"
177
+ #line 128 "edn_parser.rl"
176
178
  {
177
179
  // [
178
180
  const char *np = parse_vector(p, pe, v);
@@ -180,7 +182,7 @@ tr8:
180
182
  }
181
183
  goto st2;
182
184
  tr9:
183
- #line 104 "edn_parser.rl"
185
+ #line 106 "edn_parser.rl"
184
186
  {
185
187
  // tokens w/ leading \ (escaped characters \newline, \c, etc.)
186
188
  const char *np = parse_esc_char(p, pe, v);
@@ -188,7 +190,7 @@ tr9:
188
190
  }
189
191
  goto st2;
190
192
  tr10:
191
- #line 144 "edn_parser.rl"
193
+ #line 146 "edn_parser.rl"
192
194
  {
193
195
  // ^
194
196
  const char *np = parse_meta(p, pe);
@@ -196,7 +198,7 @@ tr10:
196
198
  }
197
199
  goto st2;
198
200
  tr11:
199
- #line 138 "edn_parser.rl"
201
+ #line 140 "edn_parser.rl"
200
202
  {
201
203
  // {
202
204
  const char *np = parse_map(p, pe, v);
@@ -207,9 +209,9 @@ st2:
207
209
  if ( ++p == pe )
208
210
  goto _test_eof2;
209
211
  case 2:
210
- #line 53 "edn_parser.rl"
212
+ #line 55 "edn_parser.rl"
211
213
  { p--; {p++; cs = 2; goto _out;} }
212
- #line 213 "edn_parser.cc"
214
+ #line 215 "edn_parser.cc"
213
215
  goto st0;
214
216
  }
215
217
  _test_eof2: cs = 2; goto _test_eof;
@@ -218,7 +220,7 @@ case 2:
218
220
  _out: {}
219
221
  }
220
222
 
221
- #line 180 "edn_parser.rl"
223
+ #line 182 "edn_parser.rl"
222
224
 
223
225
  if (cs >= EDN_value_first_final) {
224
226
  return p;
@@ -240,7 +242,7 @@ case 2:
240
242
  // ascii range is found.
241
243
  //
242
244
 
243
- #line 244 "edn_parser.cc"
245
+ #line 246 "edn_parser.cc"
244
246
  static const int EDN_string_start = 1;
245
247
  static const int EDN_string_first_final = 8;
246
248
  static const int EDN_string_error = 0;
@@ -248,7 +250,7 @@ static const int EDN_string_error = 0;
248
250
  static const int EDN_string_en_main = 1;
249
251
 
250
252
 
251
- #line 225 "edn_parser.rl"
253
+ #line 227 "edn_parser.rl"
252
254
 
253
255
 
254
256
 
@@ -259,15 +261,15 @@ const char* edn::Parser::parse_string(const char *p, const char *pe, VALUE& v)
259
261
  bool encode = false;
260
262
 
261
263
 
262
- #line 263 "edn_parser.cc"
264
+ #line 265 "edn_parser.cc"
263
265
  {
264
266
  cs = EDN_string_start;
265
267
  }
266
268
 
267
- #line 235 "edn_parser.rl"
269
+ #line 237 "edn_parser.rl"
268
270
  const char* p_save = p;
269
271
 
270
- #line 271 "edn_parser.cc"
272
+ #line 273 "edn_parser.cc"
271
273
  {
272
274
  if ( p == pe )
273
275
  goto _test_eof;
@@ -281,7 +283,7 @@ st0:
281
283
  cs = 0;
282
284
  goto _out;
283
285
  tr2:
284
- #line 214 "edn_parser.rl"
286
+ #line 216 "edn_parser.rl"
285
287
  {
286
288
  encode = true;
287
289
  }
@@ -290,7 +292,7 @@ st2:
290
292
  if ( ++p == pe )
291
293
  goto _test_eof2;
292
294
  case 2:
293
- #line 294 "edn_parser.cc"
295
+ #line 296 "edn_parser.cc"
294
296
  switch( (*p) ) {
295
297
  case 34: goto tr3;
296
298
  case 92: goto tr4;
@@ -299,7 +301,7 @@ case 2:
299
301
  goto tr2;
300
302
  goto st2;
301
303
  tr3:
302
- #line 206 "edn_parser.rl"
304
+ #line 208 "edn_parser.rl"
303
305
  {
304
306
  if (Parser::parse_byte_stream(p_save + 1, p, v, encode)) {
305
307
  {p = (( p + 1))-1;}
@@ -307,17 +309,17 @@ tr3:
307
309
  p--; {p++; cs = 8; goto _out;}
308
310
  }
309
311
  }
310
- #line 53 "edn_parser.rl"
312
+ #line 55 "edn_parser.rl"
311
313
  { p--; {p++; cs = 8; goto _out;} }
312
314
  goto st8;
313
315
  st8:
314
316
  if ( ++p == pe )
315
317
  goto _test_eof8;
316
318
  case 8:
317
- #line 318 "edn_parser.cc"
319
+ #line 320 "edn_parser.cc"
318
320
  goto st0;
319
321
  tr4:
320
- #line 214 "edn_parser.rl"
322
+ #line 216 "edn_parser.rl"
321
323
  {
322
324
  encode = true;
323
325
  }
@@ -326,7 +328,7 @@ st3:
326
328
  if ( ++p == pe )
327
329
  goto _test_eof3;
328
330
  case 3:
329
- #line 330 "edn_parser.cc"
331
+ #line 332 "edn_parser.cc"
330
332
  switch( (*p) ) {
331
333
  case 34: goto tr2;
332
334
  case 47: goto tr2;
@@ -340,7 +342,7 @@ case 3:
340
342
  }
341
343
  goto st2;
342
344
  tr5:
343
- #line 214 "edn_parser.rl"
345
+ #line 216 "edn_parser.rl"
344
346
  {
345
347
  encode = true;
346
348
  }
@@ -349,7 +351,7 @@ st4:
349
351
  if ( ++p == pe )
350
352
  goto _test_eof4;
351
353
  case 4:
352
- #line 353 "edn_parser.cc"
354
+ #line 355 "edn_parser.cc"
353
355
  if ( (*p) < 65 ) {
354
356
  if ( 48 <= (*p) && (*p) <= 57 )
355
357
  goto tr6;
@@ -360,7 +362,7 @@ case 4:
360
362
  goto tr6;
361
363
  goto st0;
362
364
  tr6:
363
- #line 214 "edn_parser.rl"
365
+ #line 216 "edn_parser.rl"
364
366
  {
365
367
  encode = true;
366
368
  }
@@ -369,7 +371,7 @@ st5:
369
371
  if ( ++p == pe )
370
372
  goto _test_eof5;
371
373
  case 5:
372
- #line 373 "edn_parser.cc"
374
+ #line 375 "edn_parser.cc"
373
375
  if ( (*p) < 65 ) {
374
376
  if ( 48 <= (*p) && (*p) <= 57 )
375
377
  goto tr7;
@@ -380,7 +382,7 @@ case 5:
380
382
  goto tr7;
381
383
  goto st0;
382
384
  tr7:
383
- #line 214 "edn_parser.rl"
385
+ #line 216 "edn_parser.rl"
384
386
  {
385
387
  encode = true;
386
388
  }
@@ -389,7 +391,7 @@ st6:
389
391
  if ( ++p == pe )
390
392
  goto _test_eof6;
391
393
  case 6:
392
- #line 393 "edn_parser.cc"
394
+ #line 395 "edn_parser.cc"
393
395
  if ( (*p) < 65 ) {
394
396
  if ( 48 <= (*p) && (*p) <= 57 )
395
397
  goto tr8;
@@ -400,7 +402,7 @@ case 6:
400
402
  goto tr8;
401
403
  goto st0;
402
404
  tr8:
403
- #line 214 "edn_parser.rl"
405
+ #line 216 "edn_parser.rl"
404
406
  {
405
407
  encode = true;
406
408
  }
@@ -409,7 +411,7 @@ st7:
409
411
  if ( ++p == pe )
410
412
  goto _test_eof7;
411
413
  case 7:
412
- #line 413 "edn_parser.cc"
414
+ #line 415 "edn_parser.cc"
413
415
  if ( (*p) < 65 ) {
414
416
  if ( 48 <= (*p) && (*p) <= 57 )
415
417
  goto tr2;
@@ -433,7 +435,7 @@ case 7:
433
435
  {
434
436
  switch ( cs ) {
435
437
  case 2:
436
- #line 46 "edn_parser.rl"
438
+ #line 48 "edn_parser.rl"
437
439
  {
438
440
  std::stringstream s;
439
441
  s << "unterminated " << EDN_TYPE;
@@ -441,14 +443,14 @@ case 7:
441
443
  p--; {p++; cs = 0; goto _out;}
442
444
  }
443
445
  break;
444
- #line 445 "edn_parser.cc"
446
+ #line 447 "edn_parser.cc"
445
447
  }
446
448
  }
447
449
 
448
450
  _out: {}
449
451
  }
450
452
 
451
- #line 237 "edn_parser.rl"
453
+ #line 239 "edn_parser.rl"
452
454
 
453
455
  if (cs >= EDN_string_first_final) {
454
456
  return p + 1;
@@ -466,7 +468,7 @@ case 7:
466
468
  // keyword parsing
467
469
  //
468
470
 
469
- #line 470 "edn_parser.cc"
471
+ #line 472 "edn_parser.cc"
470
472
  static const int EDN_keyword_start = 1;
471
473
  static const int EDN_keyword_first_final = 3;
472
474
  static const int EDN_keyword_error = 0;
@@ -474,7 +476,7 @@ static const int EDN_keyword_error = 0;
474
476
  static const int EDN_keyword_en_main = 1;
475
477
 
476
478
 
477
- #line 267 "edn_parser.rl"
479
+ #line 269 "edn_parser.rl"
478
480
 
479
481
 
480
482
 
@@ -483,15 +485,15 @@ const char* edn::Parser::parse_keyword(const char *p, const char *pe, VALUE& v)
483
485
  int cs;
484
486
 
485
487
 
486
- #line 487 "edn_parser.cc"
488
+ #line 489 "edn_parser.cc"
487
489
  {
488
490
  cs = EDN_keyword_start;
489
491
  }
490
492
 
491
- #line 275 "edn_parser.rl"
493
+ #line 277 "edn_parser.rl"
492
494
  const char* p_save = p;
493
495
 
494
- #line 495 "edn_parser.cc"
496
+ #line 497 "edn_parser.cc"
495
497
  {
496
498
  if ( p == pe )
497
499
  goto _test_eof;
@@ -558,14 +560,14 @@ case 3:
558
560
  goto st3;
559
561
  goto tr3;
560
562
  tr3:
561
- #line 53 "edn_parser.rl"
563
+ #line 55 "edn_parser.rl"
562
564
  { p--; {p++; cs = 4; goto _out;} }
563
565
  goto st4;
564
566
  st4:
565
567
  if ( ++p == pe )
566
568
  goto _test_eof4;
567
569
  case 4:
568
- #line 569 "edn_parser.cc"
570
+ #line 571 "edn_parser.cc"
569
571
  goto st0;
570
572
  st5:
571
573
  if ( ++p == pe )
@@ -604,7 +606,7 @@ case 5:
604
606
  _out: {}
605
607
  }
606
608
 
607
- #line 277 "edn_parser.rl"
609
+ #line 279 "edn_parser.rl"
608
610
 
609
611
  if (cs >= EDN_keyword_first_final) {
610
612
  std::string buf;
@@ -628,14 +630,14 @@ case 5:
628
630
  // decimal parsing machine
629
631
  //
630
632
 
631
- #line 632 "edn_parser.cc"
633
+ #line 634 "edn_parser.cc"
632
634
  static const int EDN_decimal_start = 1;
633
635
  static const int EDN_decimal_first_final = 9;
634
636
 
635
637
  static const int EDN_decimal_en_main = 1;
636
638
 
637
639
 
638
- #line 310 "edn_parser.rl"
640
+ #line 312 "edn_parser.rl"
639
641
 
640
642
 
641
643
 
@@ -644,15 +646,15 @@ const char* edn::Parser::parse_decimal(const char *p, const char *pe, VALUE& v)
644
646
  int cs;
645
647
 
646
648
 
647
- #line 648 "edn_parser.cc"
649
+ #line 650 "edn_parser.cc"
648
650
  {
649
651
  cs = EDN_decimal_start;
650
652
  }
651
653
 
652
- #line 318 "edn_parser.rl"
654
+ #line 320 "edn_parser.rl"
653
655
  const char* p_save = p;
654
656
 
655
- #line 656 "edn_parser.cc"
657
+ #line 658 "edn_parser.cc"
656
658
  {
657
659
  if ( p == pe )
658
660
  goto _test_eof;
@@ -706,14 +708,14 @@ case 9:
706
708
  goto st0;
707
709
  goto tr10;
708
710
  tr10:
709
- #line 53 "edn_parser.rl"
711
+ #line 55 "edn_parser.rl"
710
712
  { p--; {p++; cs = 10; goto _out;} }
711
713
  goto st10;
712
714
  st10:
713
715
  if ( ++p == pe )
714
716
  goto _test_eof10;
715
717
  case 10:
716
- #line 717 "edn_parser.cc"
718
+ #line 719 "edn_parser.cc"
717
719
  goto st0;
718
720
  st4:
719
721
  if ( ++p == pe )
@@ -829,7 +831,7 @@ case 8:
829
831
  _out: {}
830
832
  }
831
833
 
832
- #line 320 "edn_parser.rl"
834
+ #line 322 "edn_parser.rl"
833
835
 
834
836
  if (cs >= EDN_decimal_first_final) {
835
837
  v = Parser::float_to_ruby(p_save, p - p_save);
@@ -844,14 +846,14 @@ case 8:
844
846
  // integer parsing machine - M suffix will return a BigNum
845
847
  //
846
848
 
847
- #line 848 "edn_parser.cc"
849
+ #line 850 "edn_parser.cc"
848
850
  static const int EDN_integer_start = 1;
849
851
  static const int EDN_integer_first_final = 3;
850
852
 
851
853
  static const int EDN_integer_en_main = 1;
852
854
 
853
855
 
854
- #line 343 "edn_parser.rl"
856
+ #line 345 "edn_parser.rl"
855
857
 
856
858
 
857
859
  const char* edn::Parser::parse_integer(const char *p, const char *pe, VALUE& v)
@@ -859,15 +861,15 @@ const char* edn::Parser::parse_integer(const char *p, const char *pe, VALUE& v)
859
861
  int cs;
860
862
 
861
863
 
862
- #line 863 "edn_parser.cc"
864
+ #line 865 "edn_parser.cc"
863
865
  {
864
866
  cs = EDN_integer_start;
865
867
  }
866
868
 
867
- #line 350 "edn_parser.rl"
869
+ #line 352 "edn_parser.rl"
868
870
  const char* p_save = p;
869
871
 
870
- #line 871 "edn_parser.cc"
872
+ #line 873 "edn_parser.cc"
871
873
  {
872
874
  if ( p == pe )
873
875
  goto _test_eof;
@@ -909,14 +911,14 @@ case 3:
909
911
  goto st0;
910
912
  goto tr4;
911
913
  tr4:
912
- #line 53 "edn_parser.rl"
914
+ #line 55 "edn_parser.rl"
913
915
  { p--; {p++; cs = 4; goto _out;} }
914
916
  goto st4;
915
917
  st4:
916
918
  if ( ++p == pe )
917
919
  goto _test_eof4;
918
920
  case 4:
919
- #line 920 "edn_parser.cc"
921
+ #line 922 "edn_parser.cc"
920
922
  goto st0;
921
923
  st5:
922
924
  if ( ++p == pe )
@@ -957,7 +959,7 @@ case 6:
957
959
  _out: {}
958
960
  }
959
961
 
960
- #line 352 "edn_parser.rl"
962
+ #line 354 "edn_parser.rl"
961
963
 
962
964
  if (cs >= EDN_integer_first_final) {
963
965
  v = Parser::integer_to_ruby(p_save, p - p_save);
@@ -977,7 +979,7 @@ case 6:
977
979
  // 3. stand-alone operators: +, -, /, *, etc.
978
980
  //
979
981
 
980
- #line 981 "edn_parser.cc"
982
+ #line 983 "edn_parser.cc"
981
983
  static const int EDN_operator_start = 1;
982
984
  static const int EDN_operator_first_final = 3;
983
985
  static const int EDN_operator_error = 0;
@@ -985,7 +987,7 @@ static const int EDN_operator_error = 0;
985
987
  static const int EDN_operator_en_main = 1;
986
988
 
987
989
 
988
- #line 426 "edn_parser.rl"
990
+ #line 428 "edn_parser.rl"
989
991
 
990
992
 
991
993
 
@@ -994,15 +996,15 @@ const char* edn::Parser::parse_operator(const char *p, const char *pe, VALUE& v)
994
996
  int cs;
995
997
 
996
998
 
997
- #line 998 "edn_parser.cc"
999
+ #line 1000 "edn_parser.cc"
998
1000
  {
999
1001
  cs = EDN_operator_start;
1000
1002
  }
1001
1003
 
1002
- #line 434 "edn_parser.rl"
1004
+ #line 436 "edn_parser.rl"
1003
1005
  const char* p_save = p;
1004
1006
 
1005
- #line 1006 "edn_parser.cc"
1007
+ #line 1008 "edn_parser.cc"
1006
1008
  {
1007
1009
  if ( p == pe )
1008
1010
  goto _test_eof;
@@ -1055,22 +1057,22 @@ case 3:
1055
1057
  goto tr9;
1056
1058
  goto tr6;
1057
1059
  tr6:
1058
- #line 410 "edn_parser.rl"
1060
+ #line 412 "edn_parser.rl"
1059
1061
  {
1060
1062
  // stand-alone operators (-, +, /, ... etc)
1061
1063
  char op[2] = { *p_save, 0 };
1062
1064
  VALUE sym = rb_str_new2(op);
1063
1065
  v = Parser::make_edn_type(EDNT_MAKE_SYMBOL_METHOD, sym);
1064
1066
  }
1065
- #line 53 "edn_parser.rl"
1067
+ #line 55 "edn_parser.rl"
1066
1068
  { p--; {p++; cs = 4; goto _out;} }
1067
1069
  goto st4;
1068
1070
  tr11:
1069
- #line 53 "edn_parser.rl"
1071
+ #line 55 "edn_parser.rl"
1070
1072
  { p--; {p++; cs = 4; goto _out;} }
1071
1073
  goto st4;
1072
1074
  tr17:
1073
- #line 376 "edn_parser.rl"
1075
+ #line 378 "edn_parser.rl"
1074
1076
  {
1075
1077
  // parse a symbol including the leading operator (-, +, .)
1076
1078
  VALUE sym = Qnil;
@@ -1081,58 +1083,58 @@ tr17:
1081
1083
  {p = (( np))-1;}
1082
1084
  }
1083
1085
  }
1084
- #line 53 "edn_parser.rl"
1086
+ #line 55 "edn_parser.rl"
1085
1087
  { p--; {p++; cs = 4; goto _out;} }
1086
1088
  goto st4;
1087
1089
  st4:
1088
1090
  if ( ++p == pe )
1089
1091
  goto _test_eof4;
1090
1092
  case 4:
1091
- #line 1092 "edn_parser.cc"
1093
+ #line 1094 "edn_parser.cc"
1092
1094
  goto st0;
1093
1095
  tr5:
1094
- #line 20 "edn_parser.rl"
1096
+ #line 22 "edn_parser.rl"
1095
1097
  { line_number++; }
1096
1098
  goto st5;
1097
1099
  tr7:
1098
- #line 410 "edn_parser.rl"
1100
+ #line 412 "edn_parser.rl"
1099
1101
  {
1100
1102
  // stand-alone operators (-, +, /, ... etc)
1101
1103
  char op[2] = { *p_save, 0 };
1102
1104
  VALUE sym = rb_str_new2(op);
1103
1105
  v = Parser::make_edn_type(EDNT_MAKE_SYMBOL_METHOD, sym);
1104
1106
  }
1105
- #line 53 "edn_parser.rl"
1107
+ #line 55 "edn_parser.rl"
1106
1108
  { p--; {p++; cs = 5; goto _out;} }
1107
1109
  goto st5;
1108
1110
  tr8:
1109
- #line 410 "edn_parser.rl"
1111
+ #line 412 "edn_parser.rl"
1110
1112
  {
1111
1113
  // stand-alone operators (-, +, /, ... etc)
1112
1114
  char op[2] = { *p_save, 0 };
1113
1115
  VALUE sym = rb_str_new2(op);
1114
1116
  v = Parser::make_edn_type(EDNT_MAKE_SYMBOL_METHOD, sym);
1115
1117
  }
1116
- #line 20 "edn_parser.rl"
1118
+ #line 22 "edn_parser.rl"
1117
1119
  { line_number++; }
1118
- #line 53 "edn_parser.rl"
1120
+ #line 55 "edn_parser.rl"
1119
1121
  { p--; {p++; cs = 5; goto _out;} }
1120
1122
  goto st5;
1121
1123
  tr12:
1122
- #line 53 "edn_parser.rl"
1124
+ #line 55 "edn_parser.rl"
1123
1125
  { p--; {p++; cs = 5; goto _out;} }
1124
1126
  goto st5;
1125
1127
  tr13:
1126
- #line 20 "edn_parser.rl"
1128
+ #line 22 "edn_parser.rl"
1127
1129
  { line_number++; }
1128
- #line 53 "edn_parser.rl"
1130
+ #line 55 "edn_parser.rl"
1129
1131
  { p--; {p++; cs = 5; goto _out;} }
1130
1132
  goto st5;
1131
1133
  st5:
1132
1134
  if ( ++p == pe )
1133
1135
  goto _test_eof5;
1134
1136
  case 5:
1135
- #line 1136 "edn_parser.cc"
1137
+ #line 1138 "edn_parser.cc"
1136
1138
  switch( (*p) ) {
1137
1139
  case 10: goto tr13;
1138
1140
  case 32: goto tr12;
@@ -1157,25 +1159,25 @@ case 5:
1157
1159
  goto st0;
1158
1160
  goto tr11;
1159
1161
  tr10:
1160
- #line 410 "edn_parser.rl"
1162
+ #line 412 "edn_parser.rl"
1161
1163
  {
1162
1164
  // stand-alone operators (-, +, /, ... etc)
1163
1165
  char op[2] = { *p_save, 0 };
1164
1166
  VALUE sym = rb_str_new2(op);
1165
1167
  v = Parser::make_edn_type(EDNT_MAKE_SYMBOL_METHOD, sym);
1166
1168
  }
1167
- #line 53 "edn_parser.rl"
1169
+ #line 55 "edn_parser.rl"
1168
1170
  { p--; {p++; cs = 6; goto _out;} }
1169
1171
  goto st6;
1170
1172
  tr14:
1171
- #line 53 "edn_parser.rl"
1173
+ #line 55 "edn_parser.rl"
1172
1174
  { p--; {p++; cs = 6; goto _out;} }
1173
1175
  goto st6;
1174
1176
  st6:
1175
1177
  if ( ++p == pe )
1176
1178
  goto _test_eof6;
1177
1179
  case 6:
1178
- #line 1179 "edn_parser.cc"
1180
+ #line 1181 "edn_parser.cc"
1179
1181
  if ( (*p) == 10 )
1180
1182
  goto tr5;
1181
1183
  goto st2;
@@ -1187,7 +1189,7 @@ case 2:
1187
1189
  goto tr5;
1188
1190
  goto st2;
1189
1191
  tr9:
1190
- #line 376 "edn_parser.rl"
1192
+ #line 378 "edn_parser.rl"
1191
1193
  {
1192
1194
  // parse a symbol including the leading operator (-, +, .)
1193
1195
  VALUE sym = Qnil;
@@ -1200,7 +1202,7 @@ tr9:
1200
1202
  }
1201
1203
  goto st7;
1202
1204
  tr16:
1203
- #line 387 "edn_parser.rl"
1205
+ #line 389 "edn_parser.rl"
1204
1206
  {
1205
1207
  // parse a number with the leading symbol - this is slightly
1206
1208
  // different than the one within EDN_value since it includes
@@ -1228,7 +1230,7 @@ st7:
1228
1230
  if ( ++p == pe )
1229
1231
  goto _test_eof7;
1230
1232
  case 7:
1231
- #line 1232 "edn_parser.cc"
1233
+ #line 1234 "edn_parser.cc"
1232
1234
  switch( (*p) ) {
1233
1235
  case 33: goto st0;
1234
1236
  case 95: goto st0;
@@ -1311,7 +1313,7 @@ case 9:
1311
1313
  goto tr18;
1312
1314
  goto tr17;
1313
1315
  tr18:
1314
- #line 376 "edn_parser.rl"
1316
+ #line 378 "edn_parser.rl"
1315
1317
  {
1316
1318
  // parse a symbol including the leading operator (-, +, .)
1317
1319
  VALUE sym = Qnil;
@@ -1327,7 +1329,7 @@ st10:
1327
1329
  if ( ++p == pe )
1328
1330
  goto _test_eof10;
1329
1331
  case 10:
1330
- #line 1331 "edn_parser.cc"
1332
+ #line 1333 "edn_parser.cc"
1331
1333
  switch( (*p) ) {
1332
1334
  case 33: goto st10;
1333
1335
  case 95: goto st10;
@@ -1400,7 +1402,7 @@ case 11:
1400
1402
  {
1401
1403
  switch ( cs ) {
1402
1404
  case 9:
1403
- #line 376 "edn_parser.rl"
1405
+ #line 378 "edn_parser.rl"
1404
1406
  {
1405
1407
  // parse a symbol including the leading operator (-, +, .)
1406
1408
  VALUE sym = Qnil;
@@ -1415,7 +1417,7 @@ case 11:
1415
1417
  case 3:
1416
1418
  case 8:
1417
1419
  case 11:
1418
- #line 410 "edn_parser.rl"
1420
+ #line 412 "edn_parser.rl"
1419
1421
  {
1420
1422
  // stand-alone operators (-, +, /, ... etc)
1421
1423
  char op[2] = { *p_save, 0 };
@@ -1423,14 +1425,14 @@ case 11:
1423
1425
  v = Parser::make_edn_type(EDNT_MAKE_SYMBOL_METHOD, sym);
1424
1426
  }
1425
1427
  break;
1426
- #line 1427 "edn_parser.cc"
1428
+ #line 1429 "edn_parser.cc"
1427
1429
  }
1428
1430
  }
1429
1431
 
1430
1432
  _out: {}
1431
1433
  }
1432
1434
 
1433
- #line 436 "edn_parser.rl"
1435
+ #line 438 "edn_parser.rl"
1434
1436
 
1435
1437
  if (cs >= EDN_operator_first_final) {
1436
1438
  return p;
@@ -1449,7 +1451,7 @@ case 11:
1449
1451
  // escaped char parsing - handles \c, \newline, \formfeed, etc.
1450
1452
  //
1451
1453
 
1452
- #line 1453 "edn_parser.cc"
1454
+ #line 1455 "edn_parser.cc"
1453
1455
  static const int EDN_escaped_char_start = 1;
1454
1456
  static const int EDN_escaped_char_first_final = 26;
1455
1457
  static const int EDN_escaped_char_error = 0;
@@ -1457,7 +1459,7 @@ static const int EDN_escaped_char_error = 0;
1457
1459
  static const int EDN_escaped_char_en_main = 1;
1458
1460
 
1459
1461
 
1460
- #line 466 "edn_parser.rl"
1462
+ #line 468 "edn_parser.rl"
1461
1463
 
1462
1464
 
1463
1465
 
@@ -1466,15 +1468,15 @@ const char* edn::Parser::parse_esc_char(const char *p, const char *pe, VALUE& v)
1466
1468
  int cs;
1467
1469
 
1468
1470
 
1469
- #line 1470 "edn_parser.cc"
1471
+ #line 1472 "edn_parser.cc"
1470
1472
  {
1471
1473
  cs = EDN_escaped_char_start;
1472
1474
  }
1473
1475
 
1474
- #line 474 "edn_parser.rl"
1476
+ #line 476 "edn_parser.rl"
1475
1477
  const char* p_save = p;
1476
1478
 
1477
- #line 1478 "edn_parser.cc"
1479
+ #line 1480 "edn_parser.cc"
1478
1480
  {
1479
1481
  if ( p == pe )
1480
1482
  goto _test_eof;
@@ -1519,20 +1521,20 @@ case 26:
1519
1521
  goto tr28;
1520
1522
  goto st0;
1521
1523
  tr10:
1522
- #line 20 "edn_parser.rl"
1524
+ #line 22 "edn_parser.rl"
1523
1525
  { line_number++; }
1524
- #line 53 "edn_parser.rl"
1526
+ #line 55 "edn_parser.rl"
1525
1527
  { p--; {p++; cs = 27; goto _out;} }
1526
1528
  goto st27;
1527
1529
  tr28:
1528
- #line 53 "edn_parser.rl"
1530
+ #line 55 "edn_parser.rl"
1529
1531
  { p--; {p++; cs = 27; goto _out;} }
1530
1532
  goto st27;
1531
1533
  st27:
1532
1534
  if ( ++p == pe )
1533
1535
  goto _test_eof27;
1534
1536
  case 27:
1535
- #line 1536 "edn_parser.cc"
1537
+ #line 1538 "edn_parser.cc"
1536
1538
  switch( (*p) ) {
1537
1539
  case 10: goto tr10;
1538
1540
  case 32: goto tr28;
@@ -1550,14 +1552,14 @@ case 3:
1550
1552
  goto tr10;
1551
1553
  goto st3;
1552
1554
  tr29:
1553
- #line 53 "edn_parser.rl"
1555
+ #line 55 "edn_parser.rl"
1554
1556
  { p--; {p++; cs = 28; goto _out;} }
1555
1557
  goto st28;
1556
1558
  st28:
1557
1559
  if ( ++p == pe )
1558
1560
  goto _test_eof28;
1559
1561
  case 28:
1560
- #line 1561 "edn_parser.cc"
1562
+ #line 1563 "edn_parser.cc"
1561
1563
  goto st0;
1562
1564
  st29:
1563
1565
  if ( ++p == pe )
@@ -1866,7 +1868,7 @@ case 25:
1866
1868
  _out: {}
1867
1869
  }
1868
1870
 
1869
- #line 476 "edn_parser.rl"
1871
+ #line 478 "edn_parser.rl"
1870
1872
 
1871
1873
  if (cs >= EDN_escaped_char_first_final) {
1872
1874
  // convert the escaped value to a character
@@ -1893,7 +1895,7 @@ case 25:
1893
1895
  //
1894
1896
  //
1895
1897
 
1896
- #line 1897 "edn_parser.cc"
1898
+ #line 1899 "edn_parser.cc"
1897
1899
  static const int EDN_symbol_start = 1;
1898
1900
  static const int EDN_symbol_first_final = 4;
1899
1901
  static const int EDN_symbol_error = 0;
@@ -1901,7 +1903,7 @@ static const int EDN_symbol_error = 0;
1901
1903
  static const int EDN_symbol_en_main = 1;
1902
1904
 
1903
1905
 
1904
- #line 527 "edn_parser.rl"
1906
+ #line 529 "edn_parser.rl"
1905
1907
 
1906
1908
 
1907
1909
 
@@ -1910,15 +1912,15 @@ const char* edn::Parser::parse_symbol(const char *p, const char *pe, VALUE& s)
1910
1912
  int cs;
1911
1913
 
1912
1914
 
1913
- #line 1914 "edn_parser.cc"
1915
+ #line 1916 "edn_parser.cc"
1914
1916
  {
1915
1917
  cs = EDN_symbol_start;
1916
1918
  }
1917
1919
 
1918
- #line 535 "edn_parser.rl"
1920
+ #line 537 "edn_parser.rl"
1919
1921
  const char* p_save = p;
1920
1922
 
1921
- #line 1922 "edn_parser.cc"
1923
+ #line 1924 "edn_parser.cc"
1922
1924
  {
1923
1925
  if ( p == pe )
1924
1926
  goto _test_eof;
@@ -1980,34 +1982,34 @@ case 4:
1980
1982
  goto st4;
1981
1983
  goto tr7;
1982
1984
  tr7:
1983
- #line 53 "edn_parser.rl"
1985
+ #line 55 "edn_parser.rl"
1984
1986
  { p--; {p++; cs = 5; goto _out;} }
1985
1987
  goto st5;
1986
1988
  st5:
1987
1989
  if ( ++p == pe )
1988
1990
  goto _test_eof5;
1989
1991
  case 5:
1990
- #line 1991 "edn_parser.cc"
1992
+ #line 1993 "edn_parser.cc"
1991
1993
  goto st0;
1992
1994
  tr4:
1993
- #line 20 "edn_parser.rl"
1995
+ #line 22 "edn_parser.rl"
1994
1996
  { line_number++; }
1995
1997
  goto st6;
1996
1998
  tr8:
1997
- #line 53 "edn_parser.rl"
1999
+ #line 55 "edn_parser.rl"
1998
2000
  { p--; {p++; cs = 6; goto _out;} }
1999
2001
  goto st6;
2000
2002
  tr9:
2001
- #line 20 "edn_parser.rl"
2003
+ #line 22 "edn_parser.rl"
2002
2004
  { line_number++; }
2003
- #line 53 "edn_parser.rl"
2005
+ #line 55 "edn_parser.rl"
2004
2006
  { p--; {p++; cs = 6; goto _out;} }
2005
2007
  goto st6;
2006
2008
  st6:
2007
2009
  if ( ++p == pe )
2008
2010
  goto _test_eof6;
2009
2011
  case 6:
2010
- #line 2011 "edn_parser.cc"
2012
+ #line 2013 "edn_parser.cc"
2011
2013
  switch( (*p) ) {
2012
2014
  case 10: goto tr9;
2013
2015
  case 32: goto tr8;
@@ -2032,14 +2034,14 @@ case 6:
2032
2034
  goto st0;
2033
2035
  goto tr7;
2034
2036
  tr11:
2035
- #line 53 "edn_parser.rl"
2037
+ #line 55 "edn_parser.rl"
2036
2038
  { p--; {p++; cs = 7; goto _out;} }
2037
2039
  goto st7;
2038
2040
  st7:
2039
2041
  if ( ++p == pe )
2040
2042
  goto _test_eof7;
2041
2043
  case 7:
2042
- #line 2043 "edn_parser.cc"
2044
+ #line 2045 "edn_parser.cc"
2043
2045
  if ( (*p) == 10 )
2044
2046
  goto tr4;
2045
2047
  goto st2;
@@ -2147,7 +2149,7 @@ case 9:
2147
2149
  _out: {}
2148
2150
  }
2149
2151
 
2150
- #line 537 "edn_parser.rl"
2152
+ #line 539 "edn_parser.rl"
2151
2153
 
2152
2154
  if (cs >= EDN_symbol_first_final) {
2153
2155
  // copy the symbol text
@@ -2172,13 +2174,13 @@ case 9:
2172
2174
  // sets the same array is used)
2173
2175
  //
2174
2176
 
2175
- #line 615 "edn_parser.rl"
2177
+ #line 617 "edn_parser.rl"
2176
2178
 
2177
2179
 
2178
2180
  //
2179
2181
  // vector-specific machine
2180
2182
 
2181
- #line 2182 "edn_parser.cc"
2183
+ #line 2184 "edn_parser.cc"
2182
2184
  static const int EDN_vector_start = 1;
2183
2185
  static const int EDN_vector_first_final = 4;
2184
2186
  static const int EDN_vector_error = 0;
@@ -2186,7 +2188,7 @@ static const int EDN_vector_error = 0;
2186
2188
  static const int EDN_vector_en_main = 1;
2187
2189
 
2188
2190
 
2189
- #line 630 "edn_parser.rl"
2191
+ #line 632 "edn_parser.rl"
2190
2192
 
2191
2193
 
2192
2194
 
@@ -2201,14 +2203,14 @@ const char* edn::Parser::parse_vector(const char *p, const char *pe, VALUE& v)
2201
2203
  VALUE elems; // will store the vector's elements - allocated in @open_seq
2202
2204
 
2203
2205
 
2204
- #line 2205 "edn_parser.cc"
2206
+ #line 2207 "edn_parser.cc"
2205
2207
  {
2206
2208
  cs = EDN_vector_start;
2207
2209
  }
2208
2210
 
2209
- #line 644 "edn_parser.rl"
2211
+ #line 646 "edn_parser.rl"
2210
2212
 
2211
- #line 2212 "edn_parser.cc"
2213
+ #line 2214 "edn_parser.cc"
2212
2214
  {
2213
2215
  if ( p == pe )
2214
2216
  goto _test_eof;
@@ -2219,7 +2221,7 @@ case 1:
2219
2221
  goto tr0;
2220
2222
  goto st0;
2221
2223
  tr2:
2222
- #line 46 "edn_parser.rl"
2224
+ #line 48 "edn_parser.rl"
2223
2225
  {
2224
2226
  std::stringstream s;
2225
2227
  s << "unterminated " << EDN_TYPE;
@@ -2227,12 +2229,12 @@ tr2:
2227
2229
  p--; {p++; cs = 0; goto _out;}
2228
2230
  }
2229
2231
  goto st0;
2230
- #line 2231 "edn_parser.cc"
2232
+ #line 2233 "edn_parser.cc"
2231
2233
  st0:
2232
2234
  cs = 0;
2233
2235
  goto _out;
2234
2236
  tr0:
2235
- #line 564 "edn_parser.rl"
2237
+ #line 566 "edn_parser.rl"
2236
2238
  {
2237
2239
  // sequences store elements in an array, then process it to
2238
2240
  // convert it to a list, set, or map as needed once the
@@ -2244,11 +2246,11 @@ tr0:
2244
2246
  }
2245
2247
  goto st2;
2246
2248
  tr4:
2247
- #line 20 "edn_parser.rl"
2249
+ #line 22 "edn_parser.rl"
2248
2250
  { line_number++; }
2249
2251
  goto st2;
2250
2252
  tr5:
2251
- #line 579 "edn_parser.rl"
2253
+ #line 581 "edn_parser.rl"
2252
2254
  {
2253
2255
  // reads an item within a sequence (vector, list, map, or
2254
2256
  // set). Regardless of the sequence type, an array of the
@@ -2286,7 +2288,7 @@ st2:
2286
2288
  if ( ++p == pe )
2287
2289
  goto _test_eof2;
2288
2290
  case 2:
2289
- #line 2290 "edn_parser.cc"
2291
+ #line 2292 "edn_parser.cc"
2290
2292
  switch( (*p) ) {
2291
2293
  case 10: goto tr4;
2292
2294
  case 32: goto st2;
@@ -2317,19 +2319,19 @@ case 3:
2317
2319
  goto tr4;
2318
2320
  goto st3;
2319
2321
  tr7:
2320
- #line 574 "edn_parser.rl"
2322
+ #line 576 "edn_parser.rl"
2321
2323
  {
2322
2324
  // remove the current metadata level
2323
2325
  del_top_meta_list();
2324
2326
  }
2325
- #line 53 "edn_parser.rl"
2327
+ #line 55 "edn_parser.rl"
2326
2328
  { p--; {p++; cs = 4; goto _out;} }
2327
2329
  goto st4;
2328
2330
  st4:
2329
2331
  if ( ++p == pe )
2330
2332
  goto _test_eof4;
2331
2333
  case 4:
2332
- #line 2333 "edn_parser.cc"
2334
+ #line 2335 "edn_parser.cc"
2333
2335
  goto st0;
2334
2336
  }
2335
2337
  _test_eof2: cs = 2; goto _test_eof;
@@ -2342,7 +2344,7 @@ case 4:
2342
2344
  switch ( cs ) {
2343
2345
  case 2:
2344
2346
  case 3:
2345
- #line 46 "edn_parser.rl"
2347
+ #line 48 "edn_parser.rl"
2346
2348
  {
2347
2349
  std::stringstream s;
2348
2350
  s << "unterminated " << EDN_TYPE;
@@ -2350,14 +2352,14 @@ case 4:
2350
2352
  p--; {p++; cs = 0; goto _out;}
2351
2353
  }
2352
2354
  break;
2353
- #line 2354 "edn_parser.cc"
2355
+ #line 2356 "edn_parser.cc"
2354
2356
  }
2355
2357
  }
2356
2358
 
2357
2359
  _out: {}
2358
2360
  }
2359
2361
 
2360
- #line 645 "edn_parser.rl"
2362
+ #line 647 "edn_parser.rl"
2361
2363
 
2362
2364
  if (cs >= EDN_vector_first_final) {
2363
2365
  v = elems;
@@ -2377,7 +2379,7 @@ case 4:
2377
2379
  // list parsing machine
2378
2380
  //
2379
2381
 
2380
- #line 2381 "edn_parser.cc"
2382
+ #line 2383 "edn_parser.cc"
2381
2383
  static const int EDN_list_start = 1;
2382
2384
  static const int EDN_list_first_final = 4;
2383
2385
  static const int EDN_list_error = 0;
@@ -2385,7 +2387,7 @@ static const int EDN_list_error = 0;
2385
2387
  static const int EDN_list_en_main = 1;
2386
2388
 
2387
2389
 
2388
- #line 674 "edn_parser.rl"
2390
+ #line 676 "edn_parser.rl"
2389
2391
 
2390
2392
 
2391
2393
  //
@@ -2399,14 +2401,14 @@ const char* edn::Parser::parse_list(const char *p, const char *pe, VALUE& v)
2399
2401
  VALUE elems; // stores the list's elements - allocated in @open_seq
2400
2402
 
2401
2403
 
2402
- #line 2403 "edn_parser.cc"
2404
+ #line 2405 "edn_parser.cc"
2403
2405
  {
2404
2406
  cs = EDN_list_start;
2405
2407
  }
2406
2408
 
2407
- #line 687 "edn_parser.rl"
2409
+ #line 689 "edn_parser.rl"
2408
2410
 
2409
- #line 2410 "edn_parser.cc"
2411
+ #line 2412 "edn_parser.cc"
2410
2412
  {
2411
2413
  if ( p == pe )
2412
2414
  goto _test_eof;
@@ -2417,7 +2419,7 @@ case 1:
2417
2419
  goto tr0;
2418
2420
  goto st0;
2419
2421
  tr2:
2420
- #line 46 "edn_parser.rl"
2422
+ #line 48 "edn_parser.rl"
2421
2423
  {
2422
2424
  std::stringstream s;
2423
2425
  s << "unterminated " << EDN_TYPE;
@@ -2425,12 +2427,12 @@ tr2:
2425
2427
  p--; {p++; cs = 0; goto _out;}
2426
2428
  }
2427
2429
  goto st0;
2428
- #line 2429 "edn_parser.cc"
2430
+ #line 2431 "edn_parser.cc"
2429
2431
  st0:
2430
2432
  cs = 0;
2431
2433
  goto _out;
2432
2434
  tr0:
2433
- #line 564 "edn_parser.rl"
2435
+ #line 566 "edn_parser.rl"
2434
2436
  {
2435
2437
  // sequences store elements in an array, then process it to
2436
2438
  // convert it to a list, set, or map as needed once the
@@ -2442,11 +2444,11 @@ tr0:
2442
2444
  }
2443
2445
  goto st2;
2444
2446
  tr4:
2445
- #line 20 "edn_parser.rl"
2447
+ #line 22 "edn_parser.rl"
2446
2448
  { line_number++; }
2447
2449
  goto st2;
2448
2450
  tr5:
2449
- #line 579 "edn_parser.rl"
2451
+ #line 581 "edn_parser.rl"
2450
2452
  {
2451
2453
  // reads an item within a sequence (vector, list, map, or
2452
2454
  // set). Regardless of the sequence type, an array of the
@@ -2484,7 +2486,7 @@ st2:
2484
2486
  if ( ++p == pe )
2485
2487
  goto _test_eof2;
2486
2488
  case 2:
2487
- #line 2488 "edn_parser.cc"
2489
+ #line 2490 "edn_parser.cc"
2488
2490
  switch( (*p) ) {
2489
2491
  case 10: goto tr4;
2490
2492
  case 32: goto st2;
@@ -2508,19 +2510,19 @@ case 2:
2508
2510
  goto tr5;
2509
2511
  goto tr2;
2510
2512
  tr6:
2511
- #line 574 "edn_parser.rl"
2513
+ #line 576 "edn_parser.rl"
2512
2514
  {
2513
2515
  // remove the current metadata level
2514
2516
  del_top_meta_list();
2515
2517
  }
2516
- #line 53 "edn_parser.rl"
2518
+ #line 55 "edn_parser.rl"
2517
2519
  { p--; {p++; cs = 4; goto _out;} }
2518
2520
  goto st4;
2519
2521
  st4:
2520
2522
  if ( ++p == pe )
2521
2523
  goto _test_eof4;
2522
2524
  case 4:
2523
- #line 2524 "edn_parser.cc"
2525
+ #line 2526 "edn_parser.cc"
2524
2526
  goto st0;
2525
2527
  st3:
2526
2528
  if ( ++p == pe )
@@ -2540,7 +2542,7 @@ case 3:
2540
2542
  switch ( cs ) {
2541
2543
  case 2:
2542
2544
  case 3:
2543
- #line 46 "edn_parser.rl"
2545
+ #line 48 "edn_parser.rl"
2544
2546
  {
2545
2547
  std::stringstream s;
2546
2548
  s << "unterminated " << EDN_TYPE;
@@ -2548,14 +2550,14 @@ case 3:
2548
2550
  p--; {p++; cs = 0; goto _out;}
2549
2551
  }
2550
2552
  break;
2551
- #line 2552 "edn_parser.cc"
2553
+ #line 2554 "edn_parser.cc"
2552
2554
  }
2553
2555
  }
2554
2556
 
2555
2557
  _out: {}
2556
2558
  }
2557
2559
 
2558
- #line 688 "edn_parser.rl"
2560
+ #line 690 "edn_parser.rl"
2559
2561
 
2560
2562
  if (cs >= EDN_list_first_final) {
2561
2563
  v = elems;
@@ -2577,7 +2579,7 @@ case 3:
2577
2579
  // hash parsing
2578
2580
  //
2579
2581
 
2580
- #line 2581 "edn_parser.cc"
2582
+ #line 2583 "edn_parser.cc"
2581
2583
  static const int EDN_map_start = 1;
2582
2584
  static const int EDN_map_first_final = 4;
2583
2585
  static const int EDN_map_error = 0;
@@ -2585,7 +2587,7 @@ static const int EDN_map_error = 0;
2585
2587
  static const int EDN_map_en_main = 1;
2586
2588
 
2587
2589
 
2588
- #line 720 "edn_parser.rl"
2590
+ #line 722 "edn_parser.rl"
2589
2591
 
2590
2592
 
2591
2593
 
@@ -2599,14 +2601,14 @@ const char* edn::Parser::parse_map(const char *p, const char *pe, VALUE& v)
2599
2601
  VALUE elems;
2600
2602
 
2601
2603
 
2602
- #line 2603 "edn_parser.cc"
2604
+ #line 2605 "edn_parser.cc"
2603
2605
  {
2604
2606
  cs = EDN_map_start;
2605
2607
  }
2606
2608
 
2607
- #line 733 "edn_parser.rl"
2609
+ #line 735 "edn_parser.rl"
2608
2610
 
2609
- #line 2610 "edn_parser.cc"
2611
+ #line 2612 "edn_parser.cc"
2610
2612
  {
2611
2613
  if ( p == pe )
2612
2614
  goto _test_eof;
@@ -2617,7 +2619,7 @@ case 1:
2617
2619
  goto tr0;
2618
2620
  goto st0;
2619
2621
  tr2:
2620
- #line 46 "edn_parser.rl"
2622
+ #line 48 "edn_parser.rl"
2621
2623
  {
2622
2624
  std::stringstream s;
2623
2625
  s << "unterminated " << EDN_TYPE;
@@ -2625,12 +2627,12 @@ tr2:
2625
2627
  p--; {p++; cs = 0; goto _out;}
2626
2628
  }
2627
2629
  goto st0;
2628
- #line 2629 "edn_parser.cc"
2630
+ #line 2631 "edn_parser.cc"
2629
2631
  st0:
2630
2632
  cs = 0;
2631
2633
  goto _out;
2632
2634
  tr0:
2633
- #line 564 "edn_parser.rl"
2635
+ #line 566 "edn_parser.rl"
2634
2636
  {
2635
2637
  // sequences store elements in an array, then process it to
2636
2638
  // convert it to a list, set, or map as needed once the
@@ -2642,11 +2644,11 @@ tr0:
2642
2644
  }
2643
2645
  goto st2;
2644
2646
  tr4:
2645
- #line 20 "edn_parser.rl"
2647
+ #line 22 "edn_parser.rl"
2646
2648
  { line_number++; }
2647
2649
  goto st2;
2648
2650
  tr5:
2649
- #line 579 "edn_parser.rl"
2651
+ #line 581 "edn_parser.rl"
2650
2652
  {
2651
2653
  // reads an item within a sequence (vector, list, map, or
2652
2654
  // set). Regardless of the sequence type, an array of the
@@ -2684,7 +2686,7 @@ st2:
2684
2686
  if ( ++p == pe )
2685
2687
  goto _test_eof2;
2686
2688
  case 2:
2687
- #line 2688 "edn_parser.cc"
2689
+ #line 2690 "edn_parser.cc"
2688
2690
  switch( (*p) ) {
2689
2691
  case 10: goto tr4;
2690
2692
  case 32: goto st2;
@@ -2718,19 +2720,19 @@ case 3:
2718
2720
  goto tr4;
2719
2721
  goto st3;
2720
2722
  tr7:
2721
- #line 574 "edn_parser.rl"
2723
+ #line 576 "edn_parser.rl"
2722
2724
  {
2723
2725
  // remove the current metadata level
2724
2726
  del_top_meta_list();
2725
2727
  }
2726
- #line 53 "edn_parser.rl"
2728
+ #line 55 "edn_parser.rl"
2727
2729
  { p--; {p++; cs = 4; goto _out;} }
2728
2730
  goto st4;
2729
2731
  st4:
2730
2732
  if ( ++p == pe )
2731
2733
  goto _test_eof4;
2732
2734
  case 4:
2733
- #line 2734 "edn_parser.cc"
2735
+ #line 2736 "edn_parser.cc"
2734
2736
  goto st0;
2735
2737
  }
2736
2738
  _test_eof2: cs = 2; goto _test_eof;
@@ -2743,7 +2745,7 @@ case 4:
2743
2745
  switch ( cs ) {
2744
2746
  case 2:
2745
2747
  case 3:
2746
- #line 46 "edn_parser.rl"
2748
+ #line 48 "edn_parser.rl"
2747
2749
  {
2748
2750
  std::stringstream s;
2749
2751
  s << "unterminated " << EDN_TYPE;
@@ -2751,14 +2753,14 @@ case 4:
2751
2753
  p--; {p++; cs = 0; goto _out;}
2752
2754
  }
2753
2755
  break;
2754
- #line 2755 "edn_parser.cc"
2756
+ #line 2757 "edn_parser.cc"
2755
2757
  }
2756
2758
  }
2757
2759
 
2758
2760
  _out: {}
2759
2761
  }
2760
2762
 
2761
- #line 734 "edn_parser.rl"
2763
+ #line 736 "edn_parser.rl"
2762
2764
 
2763
2765
  if (cs >= EDN_map_first_final) {
2764
2766
 
@@ -2794,7 +2796,7 @@ case 4:
2794
2796
  // the remaining data to the correct parser
2795
2797
  //
2796
2798
 
2797
- #line 2798 "edn_parser.cc"
2799
+ #line 2800 "edn_parser.cc"
2798
2800
  static const int EDN_dispatch_start = 1;
2799
2801
  static const int EDN_dispatch_first_final = 2;
2800
2802
  static const int EDN_dispatch_error = 0;
@@ -2802,7 +2804,7 @@ static const int EDN_dispatch_error = 0;
2802
2804
  static const int EDN_dispatch_en_main = 1;
2803
2805
 
2804
2806
 
2805
- #line 798 "edn_parser.rl"
2807
+ #line 800 "edn_parser.rl"
2806
2808
 
2807
2809
 
2808
2810
 
@@ -2811,14 +2813,14 @@ const char* edn::Parser::parse_dispatch(const char *p, const char *pe, VALUE& v)
2811
2813
  int cs;
2812
2814
 
2813
2815
 
2814
- #line 2815 "edn_parser.cc"
2816
+ #line 2817 "edn_parser.cc"
2815
2817
  {
2816
2818
  cs = EDN_dispatch_start;
2817
2819
  }
2818
2820
 
2819
- #line 806 "edn_parser.rl"
2821
+ #line 808 "edn_parser.rl"
2820
2822
 
2821
- #line 2822 "edn_parser.cc"
2823
+ #line 2824 "edn_parser.cc"
2822
2824
  {
2823
2825
  if ( p == pe )
2824
2826
  goto _test_eof;
@@ -2839,40 +2841,40 @@ st0:
2839
2841
  cs = 0;
2840
2842
  goto _out;
2841
2843
  tr0:
2842
- #line 786 "edn_parser.rl"
2844
+ #line 788 "edn_parser.rl"
2843
2845
  {
2844
2846
  // #inst, #uuid, or #user/tag
2845
2847
  const char *np = parse_tagged(p, pe, v);
2846
2848
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2847
2849
  }
2848
- #line 53 "edn_parser.rl"
2850
+ #line 55 "edn_parser.rl"
2849
2851
  { p--; {p++; cs = 2; goto _out;} }
2850
2852
  goto st2;
2851
2853
  tr2:
2852
- #line 780 "edn_parser.rl"
2854
+ #line 782 "edn_parser.rl"
2853
2855
  {
2854
2856
  // discard token #_
2855
2857
  const char *np = parse_discard(p, pe);
2856
2858
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2857
2859
  }
2858
- #line 53 "edn_parser.rl"
2860
+ #line 55 "edn_parser.rl"
2859
2861
  { p--; {p++; cs = 2; goto _out;} }
2860
2862
  goto st2;
2861
2863
  tr3:
2862
- #line 774 "edn_parser.rl"
2864
+ #line 776 "edn_parser.rl"
2863
2865
  {
2864
2866
  // #{ }
2865
2867
  const char *np = parse_set(p, pe, v);
2866
2868
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2867
2869
  }
2868
- #line 53 "edn_parser.rl"
2870
+ #line 55 "edn_parser.rl"
2869
2871
  { p--; {p++; cs = 2; goto _out;} }
2870
2872
  goto st2;
2871
2873
  st2:
2872
2874
  if ( ++p == pe )
2873
2875
  goto _test_eof2;
2874
2876
  case 2:
2875
- #line 2876 "edn_parser.cc"
2877
+ #line 2878 "edn_parser.cc"
2876
2878
  goto st0;
2877
2879
  }
2878
2880
  _test_eof2: cs = 2; goto _test_eof;
@@ -2881,7 +2883,7 @@ case 2:
2881
2883
  _out: {}
2882
2884
  }
2883
2885
 
2884
- #line 807 "edn_parser.rl"
2886
+ #line 809 "edn_parser.rl"
2885
2887
 
2886
2888
  if (cs >= EDN_dispatch_first_final) {
2887
2889
  return p + 1;
@@ -2900,7 +2902,7 @@ case 2:
2900
2902
  // set parsing machine
2901
2903
  //
2902
2904
 
2903
- #line 2904 "edn_parser.cc"
2905
+ #line 2906 "edn_parser.cc"
2904
2906
  static const int EDN_set_start = 1;
2905
2907
  static const int EDN_set_first_final = 4;
2906
2908
  static const int EDN_set_error = 0;
@@ -2908,7 +2910,7 @@ static const int EDN_set_error = 0;
2908
2910
  static const int EDN_set_en_main = 1;
2909
2911
 
2910
2912
 
2911
- #line 836 "edn_parser.rl"
2913
+ #line 838 "edn_parser.rl"
2912
2914
 
2913
2915
 
2914
2916
  //
@@ -2922,14 +2924,14 @@ const char* edn::Parser::parse_set(const char *p, const char *pe, VALUE& v)
2922
2924
  VALUE elems; // holds the set's elements as an array allocated in @open_seq
2923
2925
 
2924
2926
 
2925
- #line 2926 "edn_parser.cc"
2927
+ #line 2928 "edn_parser.cc"
2926
2928
  {
2927
2929
  cs = EDN_set_start;
2928
2930
  }
2929
2931
 
2930
- #line 849 "edn_parser.rl"
2932
+ #line 851 "edn_parser.rl"
2931
2933
 
2932
- #line 2933 "edn_parser.cc"
2934
+ #line 2935 "edn_parser.cc"
2933
2935
  {
2934
2936
  if ( p == pe )
2935
2937
  goto _test_eof;
@@ -2940,7 +2942,7 @@ case 1:
2940
2942
  goto tr0;
2941
2943
  goto st0;
2942
2944
  tr2:
2943
- #line 46 "edn_parser.rl"
2945
+ #line 48 "edn_parser.rl"
2944
2946
  {
2945
2947
  std::stringstream s;
2946
2948
  s << "unterminated " << EDN_TYPE;
@@ -2948,12 +2950,12 @@ tr2:
2948
2950
  p--; {p++; cs = 0; goto _out;}
2949
2951
  }
2950
2952
  goto st0;
2951
- #line 2952 "edn_parser.cc"
2953
+ #line 2954 "edn_parser.cc"
2952
2954
  st0:
2953
2955
  cs = 0;
2954
2956
  goto _out;
2955
2957
  tr0:
2956
- #line 564 "edn_parser.rl"
2958
+ #line 566 "edn_parser.rl"
2957
2959
  {
2958
2960
  // sequences store elements in an array, then process it to
2959
2961
  // convert it to a list, set, or map as needed once the
@@ -2965,11 +2967,11 @@ tr0:
2965
2967
  }
2966
2968
  goto st2;
2967
2969
  tr4:
2968
- #line 20 "edn_parser.rl"
2970
+ #line 22 "edn_parser.rl"
2969
2971
  { line_number++; }
2970
2972
  goto st2;
2971
2973
  tr5:
2972
- #line 579 "edn_parser.rl"
2974
+ #line 581 "edn_parser.rl"
2973
2975
  {
2974
2976
  // reads an item within a sequence (vector, list, map, or
2975
2977
  // set). Regardless of the sequence type, an array of the
@@ -3007,7 +3009,7 @@ st2:
3007
3009
  if ( ++p == pe )
3008
3010
  goto _test_eof2;
3009
3011
  case 2:
3010
- #line 3011 "edn_parser.cc"
3012
+ #line 3013 "edn_parser.cc"
3011
3013
  switch( (*p) ) {
3012
3014
  case 10: goto tr4;
3013
3015
  case 32: goto st2;
@@ -3041,19 +3043,19 @@ case 3:
3041
3043
  goto tr4;
3042
3044
  goto st3;
3043
3045
  tr7:
3044
- #line 574 "edn_parser.rl"
3046
+ #line 576 "edn_parser.rl"
3045
3047
  {
3046
3048
  // remove the current metadata level
3047
3049
  del_top_meta_list();
3048
3050
  }
3049
- #line 53 "edn_parser.rl"
3051
+ #line 55 "edn_parser.rl"
3050
3052
  { p--; {p++; cs = 4; goto _out;} }
3051
3053
  goto st4;
3052
3054
  st4:
3053
3055
  if ( ++p == pe )
3054
3056
  goto _test_eof4;
3055
3057
  case 4:
3056
- #line 3057 "edn_parser.cc"
3058
+ #line 3059 "edn_parser.cc"
3057
3059
  goto st0;
3058
3060
  }
3059
3061
  _test_eof2: cs = 2; goto _test_eof;
@@ -3066,7 +3068,7 @@ case 4:
3066
3068
  switch ( cs ) {
3067
3069
  case 2:
3068
3070
  case 3:
3069
- #line 46 "edn_parser.rl"
3071
+ #line 48 "edn_parser.rl"
3070
3072
  {
3071
3073
  std::stringstream s;
3072
3074
  s << "unterminated " << EDN_TYPE;
@@ -3074,14 +3076,14 @@ case 4:
3074
3076
  p--; {p++; cs = 0; goto _out;}
3075
3077
  }
3076
3078
  break;
3077
- #line 3078 "edn_parser.cc"
3079
+ #line 3080 "edn_parser.cc"
3078
3080
  }
3079
3081
  }
3080
3082
 
3081
3083
  _out: {}
3082
3084
  }
3083
3085
 
3084
- #line 850 "edn_parser.rl"
3086
+ #line 852 "edn_parser.rl"
3085
3087
 
3086
3088
  if (cs >= EDN_set_first_final) {
3087
3089
  // all elements collected; now convert to a set
@@ -3104,7 +3106,7 @@ case 4:
3104
3106
  // defining a machine to consume items within container delimiters
3105
3107
  //
3106
3108
 
3107
- #line 3108 "edn_parser.cc"
3109
+ #line 3110 "edn_parser.cc"
3108
3110
  static const int EDN_discard_start = 1;
3109
3111
  static const int EDN_discard_first_final = 4;
3110
3112
  static const int EDN_discard_error = 0;
@@ -3112,7 +3114,7 @@ static const int EDN_discard_error = 0;
3112
3114
  static const int EDN_discard_en_main = 1;
3113
3115
 
3114
3116
 
3115
- #line 900 "edn_parser.rl"
3117
+ #line 902 "edn_parser.rl"
3116
3118
 
3117
3119
 
3118
3120
 
@@ -3122,14 +3124,14 @@ const char* edn::Parser::parse_discard(const char *p, const char *pe)
3122
3124
  VALUE v;
3123
3125
 
3124
3126
 
3125
- #line 3126 "edn_parser.cc"
3127
+ #line 3128 "edn_parser.cc"
3126
3128
  {
3127
3129
  cs = EDN_discard_start;
3128
3130
  }
3129
3131
 
3130
- #line 909 "edn_parser.rl"
3132
+ #line 911 "edn_parser.rl"
3131
3133
 
3132
- #line 3133 "edn_parser.cc"
3134
+ #line 3135 "edn_parser.cc"
3133
3135
  {
3134
3136
  if ( p == pe )
3135
3137
  goto _test_eof;
@@ -3140,7 +3142,7 @@ case 1:
3140
3142
  goto st2;
3141
3143
  goto st0;
3142
3144
  tr2:
3143
- #line 890 "edn_parser.rl"
3145
+ #line 892 "edn_parser.rl"
3144
3146
  {
3145
3147
  std::stringstream s;
3146
3148
  s << "discard sequence without element to discard";
@@ -3148,19 +3150,19 @@ tr2:
3148
3150
  p--; {p++; cs = 0; goto _out;}
3149
3151
  }
3150
3152
  goto st0;
3151
- #line 3152 "edn_parser.cc"
3153
+ #line 3154 "edn_parser.cc"
3152
3154
  st0:
3153
3155
  cs = 0;
3154
3156
  goto _out;
3155
3157
  tr3:
3156
- #line 20 "edn_parser.rl"
3158
+ #line 22 "edn_parser.rl"
3157
3159
  { line_number++; }
3158
3160
  goto st2;
3159
3161
  st2:
3160
3162
  if ( ++p == pe )
3161
3163
  goto _test_eof2;
3162
3164
  case 2:
3163
- #line 3164 "edn_parser.cc"
3165
+ #line 3166 "edn_parser.cc"
3164
3166
  switch( (*p) ) {
3165
3167
  case 10: goto tr3;
3166
3168
  case 32: goto st2;
@@ -3186,7 +3188,7 @@ case 2:
3186
3188
  goto tr4;
3187
3189
  goto tr2;
3188
3190
  tr4:
3189
- #line 879 "edn_parser.rl"
3191
+ #line 881 "edn_parser.rl"
3190
3192
  {
3191
3193
  const char *np = parse_value(p, pe, v);
3192
3194
  if (np == NULL) { p--; {p++; cs = 4; goto _out;} } else {
@@ -3197,14 +3199,14 @@ tr4:
3197
3199
  {p = (( np))-1;}
3198
3200
  }
3199
3201
  }
3200
- #line 53 "edn_parser.rl"
3202
+ #line 55 "edn_parser.rl"
3201
3203
  { p--; {p++; cs = 4; goto _out;} }
3202
3204
  goto st4;
3203
3205
  st4:
3204
3206
  if ( ++p == pe )
3205
3207
  goto _test_eof4;
3206
3208
  case 4:
3207
- #line 3208 "edn_parser.cc"
3209
+ #line 3210 "edn_parser.cc"
3208
3210
  goto st0;
3209
3211
  st3:
3210
3212
  if ( ++p == pe )
@@ -3223,7 +3225,7 @@ case 3:
3223
3225
  {
3224
3226
  switch ( cs ) {
3225
3227
  case 2:
3226
- #line 890 "edn_parser.rl"
3228
+ #line 892 "edn_parser.rl"
3227
3229
  {
3228
3230
  std::stringstream s;
3229
3231
  s << "discard sequence without element to discard";
@@ -3231,14 +3233,14 @@ case 3:
3231
3233
  p--; {p++; cs = 0; goto _out;}
3232
3234
  }
3233
3235
  break;
3234
- #line 3235 "edn_parser.cc"
3236
+ #line 3237 "edn_parser.cc"
3235
3237
  }
3236
3238
  }
3237
3239
 
3238
3240
  _out: {}
3239
3241
  }
3240
3242
 
3241
- #line 910 "edn_parser.rl"
3243
+ #line 912 "edn_parser.rl"
3242
3244
 
3243
3245
  if (cs >= EDN_discard_first_final) {
3244
3246
  return p + 1;
@@ -3269,7 +3271,7 @@ case 3:
3269
3271
  // 2. add parse checks for uuid and inst for better error reporting
3270
3272
  //
3271
3273
 
3272
- #line 3273 "edn_parser.cc"
3274
+ #line 3275 "edn_parser.cc"
3273
3275
  static const int EDN_tagged_start = 1;
3274
3276
  static const int EDN_tagged_first_final = 7;
3275
3277
  static const int EDN_tagged_error = 0;
@@ -3277,7 +3279,7 @@ static const int EDN_tagged_error = 0;
3277
3279
  static const int EDN_tagged_en_main = 1;
3278
3280
 
3279
3281
 
3280
- #line 978 "edn_parser.rl"
3282
+ #line 980 "edn_parser.rl"
3281
3283
 
3282
3284
 
3283
3285
 
@@ -3291,14 +3293,14 @@ const char* edn::Parser::parse_tagged(const char *p, const char *pe, VALUE& v)
3291
3293
  int cs;
3292
3294
 
3293
3295
 
3294
- #line 3295 "edn_parser.cc"
3296
+ #line 3297 "edn_parser.cc"
3295
3297
  {
3296
3298
  cs = EDN_tagged_start;
3297
3299
  }
3298
3300
 
3299
- #line 991 "edn_parser.rl"
3301
+ #line 993 "edn_parser.rl"
3300
3302
 
3301
- #line 3302 "edn_parser.cc"
3303
+ #line 3304 "edn_parser.cc"
3302
3304
  {
3303
3305
  if ( p == pe )
3304
3306
  goto _test_eof;
@@ -3315,7 +3317,7 @@ st0:
3315
3317
  cs = 0;
3316
3318
  goto _out;
3317
3319
  tr0:
3318
- #line 957 "edn_parser.rl"
3320
+ #line 959 "edn_parser.rl"
3319
3321
  {
3320
3322
  // parses the symbol portion of the pair
3321
3323
  const char *np = parse_symbol(p, pe, sym_name);
@@ -3329,7 +3331,7 @@ st2:
3329
3331
  if ( ++p == pe )
3330
3332
  goto _test_eof2;
3331
3333
  case 2:
3332
- #line 3333 "edn_parser.cc"
3334
+ #line 3335 "edn_parser.cc"
3333
3335
  switch( (*p) ) {
3334
3336
  case 10: goto tr3;
3335
3337
  case 32: goto st3;
@@ -3355,14 +3357,14 @@ case 2:
3355
3357
  goto st2;
3356
3358
  goto st0;
3357
3359
  tr3:
3358
- #line 20 "edn_parser.rl"
3360
+ #line 22 "edn_parser.rl"
3359
3361
  { line_number++; }
3360
3362
  goto st3;
3361
3363
  st3:
3362
3364
  if ( ++p == pe )
3363
3365
  goto _test_eof3;
3364
3366
  case 3:
3365
- #line 3366 "edn_parser.cc"
3367
+ #line 3368 "edn_parser.cc"
3366
3368
  switch( (*p) ) {
3367
3369
  case 10: goto tr3;
3368
3370
  case 32: goto st3;
@@ -3388,7 +3390,7 @@ case 3:
3388
3390
  goto tr7;
3389
3391
  goto st0;
3390
3392
  tr7:
3391
- #line 965 "edn_parser.rl"
3393
+ #line 967 "edn_parser.rl"
3392
3394
  {
3393
3395
  // parses the value portion
3394
3396
  const char *np = parse_value(p, pe, data);
@@ -3397,14 +3399,14 @@ tr7:
3397
3399
  {p = (( np))-1;}
3398
3400
  }
3399
3401
  }
3400
- #line 53 "edn_parser.rl"
3402
+ #line 55 "edn_parser.rl"
3401
3403
  { p--; {p++; cs = 7; goto _out;} }
3402
3404
  goto st7;
3403
3405
  st7:
3404
3406
  if ( ++p == pe )
3405
3407
  goto _test_eof7;
3406
3408
  case 7:
3407
- #line 3408 "edn_parser.cc"
3409
+ #line 3410 "edn_parser.cc"
3408
3410
  goto st0;
3409
3411
  st4:
3410
3412
  if ( ++p == pe )
@@ -3482,7 +3484,7 @@ case 6:
3482
3484
  _out: {}
3483
3485
  }
3484
3486
 
3485
- #line 992 "edn_parser.rl"
3487
+ #line 994 "edn_parser.rl"
3486
3488
 
3487
3489
  if (cs >= EDN_tagged_first_final) {
3488
3490
  //std::cerr << __FUNCTION__ << " parse symbol name as '" << sym_name << "', value is: " << data << std::endl;
@@ -3520,7 +3522,7 @@ case 6:
3520
3522
  // useful?
3521
3523
  //
3522
3524
 
3523
- #line 3524 "edn_parser.cc"
3525
+ #line 3526 "edn_parser.cc"
3524
3526
  static const int EDN_meta_start = 1;
3525
3527
  static const int EDN_meta_first_final = 3;
3526
3528
  static const int EDN_meta_error = 0;
@@ -3528,7 +3530,7 @@ static const int EDN_meta_error = 0;
3528
3530
  static const int EDN_meta_en_main = 1;
3529
3531
 
3530
3532
 
3531
- #line 1042 "edn_parser.rl"
3533
+ #line 1044 "edn_parser.rl"
3532
3534
 
3533
3535
 
3534
3536
 
@@ -3538,14 +3540,14 @@ const char* edn::Parser::parse_meta(const char *p, const char *pe)
3538
3540
  VALUE v;
3539
3541
 
3540
3542
 
3541
- #line 3542 "edn_parser.cc"
3543
+ #line 3544 "edn_parser.cc"
3542
3544
  {
3543
3545
  cs = EDN_meta_start;
3544
3546
  }
3545
3547
 
3546
- #line 1051 "edn_parser.rl"
3548
+ #line 1053 "edn_parser.rl"
3547
3549
 
3548
- #line 3549 "edn_parser.cc"
3550
+ #line 3551 "edn_parser.cc"
3549
3551
  {
3550
3552
  if ( p == pe )
3551
3553
  goto _test_eof;
@@ -3584,19 +3586,19 @@ case 2:
3584
3586
  goto tr2;
3585
3587
  goto st0;
3586
3588
  tr2:
3587
- #line 1034 "edn_parser.rl"
3589
+ #line 1036 "edn_parser.rl"
3588
3590
  {
3589
3591
  const char *np = parse_value(p, pe, v);
3590
3592
  if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else { {p = (( np))-1;} }
3591
3593
  }
3592
- #line 53 "edn_parser.rl"
3594
+ #line 55 "edn_parser.rl"
3593
3595
  { p--; {p++; cs = 3; goto _out;} }
3594
3596
  goto st3;
3595
3597
  st3:
3596
3598
  if ( ++p == pe )
3597
3599
  goto _test_eof3;
3598
3600
  case 3:
3599
- #line 3600 "edn_parser.cc"
3601
+ #line 3602 "edn_parser.cc"
3600
3602
  goto st0;
3601
3603
  }
3602
3604
  _test_eof2: cs = 2; goto _test_eof;
@@ -3606,7 +3608,7 @@ case 3:
3606
3608
  _out: {}
3607
3609
  }
3608
3610
 
3609
- #line 1052 "edn_parser.rl"
3611
+ #line 1054 "edn_parser.rl"
3610
3612
 
3611
3613
  if (cs >= EDN_meta_first_final) {
3612
3614
  append_to_meta(v);
@@ -3628,7 +3630,7 @@ case 3:
3628
3630
  // top-level, therefore, does not tokenize source stream
3629
3631
  //
3630
3632
 
3631
- #line 3632 "edn_parser.cc"
3633
+ #line 3634 "edn_parser.cc"
3632
3634
  static const int EDN_parser_start = 2;
3633
3635
  static const int EDN_parser_first_final = 2;
3634
3636
  static const int EDN_parser_error = 0;
@@ -3636,7 +3638,7 @@ static const int EDN_parser_error = 0;
3636
3638
  static const int EDN_parser_en_main = 2;
3637
3639
 
3638
3640
 
3639
- #line 1101 "edn_parser.rl"
3641
+ #line 1103 "edn_parser.rl"
3640
3642
 
3641
3643
 
3642
3644
 
@@ -3646,26 +3648,26 @@ VALUE edn::Parser::parse(const char* src, std::size_t len)
3646
3648
  VALUE result = EDNT_EOF_CONST;
3647
3649
 
3648
3650
 
3649
- #line 3650 "edn_parser.cc"
3651
+ #line 3652 "edn_parser.cc"
3650
3652
  {
3651
3653
  cs = EDN_parser_start;
3652
3654
  }
3653
3655
 
3654
- #line 1110 "edn_parser.rl"
3656
+ #line 1112 "edn_parser.rl"
3655
3657
  set_source(src, len);
3656
3658
 
3657
- #line 3658 "edn_parser.cc"
3659
+ #line 3660 "edn_parser.cc"
3658
3660
  {
3659
3661
  if ( p == pe )
3660
3662
  goto _test_eof;
3661
3663
  switch ( cs )
3662
3664
  {
3663
3665
  tr1:
3664
- #line 20 "edn_parser.rl"
3666
+ #line 22 "edn_parser.rl"
3665
3667
  { line_number++; }
3666
3668
  goto st2;
3667
3669
  tr4:
3668
- #line 1078 "edn_parser.rl"
3670
+ #line 1080 "edn_parser.rl"
3669
3671
  {
3670
3672
  // save the count of metadata items before we parse this value
3671
3673
  // so we can determine if we've read another metadata value or
@@ -3688,7 +3690,7 @@ st2:
3688
3690
  if ( ++p == pe )
3689
3691
  goto _test_eof2;
3690
3692
  case 2:
3691
- #line 3692 "edn_parser.cc"
3693
+ #line 3694 "edn_parser.cc"
3692
3694
  switch( (*p) ) {
3693
3695
  case 10: goto tr1;
3694
3696
  case 32: goto st2;
@@ -3731,7 +3733,7 @@ case 1:
3731
3733
  _out: {}
3732
3734
  }
3733
3735
 
3734
- #line 1112 "edn_parser.rl"
3736
+ #line 1114 "edn_parser.rl"
3735
3737
 
3736
3738
  if (cs == EDN_parser_error) {
3737
3739
  error(__FUNCTION__, *p);
@@ -3749,13 +3751,13 @@ case 1:
3749
3751
  // token-by-token machine
3750
3752
  //
3751
3753
 
3752
- #line 3753 "edn_parser.cc"
3754
+ #line 3755 "edn_parser.cc"
3753
3755
  static const int EDN_tokens_start = 1;
3754
3756
 
3755
3757
  static const int EDN_tokens_en_main = 1;
3756
3758
 
3757
3759
 
3758
- #line 1166 "edn_parser.rl"
3760
+ #line 1168 "edn_parser.rl"
3759
3761
 
3760
3762
 
3761
3763
 
@@ -3774,28 +3776,28 @@ edn::Parser::eTokenState edn::Parser::parse_next(VALUE& value)
3774
3776
  discard.clear();
3775
3777
 
3776
3778
 
3777
- #line 3778 "edn_parser.cc"
3779
+ #line 3780 "edn_parser.cc"
3778
3780
  {
3779
3781
  cs = EDN_tokens_start;
3780
3782
  }
3781
3783
 
3782
- #line 1184 "edn_parser.rl"
3784
+ #line 1186 "edn_parser.rl"
3783
3785
 
3784
- #line 3785 "edn_parser.cc"
3786
+ #line 3787 "edn_parser.cc"
3785
3787
  {
3786
3788
  if ( p == pe )
3787
3789
  goto _test_eof;
3788
3790
  switch ( cs )
3789
3791
  {
3790
3792
  tr2:
3791
- #line 20 "edn_parser.rl"
3793
+ #line 22 "edn_parser.rl"
3792
3794
  { line_number++; }
3793
3795
  goto st1;
3794
3796
  st1:
3795
3797
  if ( ++p == pe )
3796
3798
  goto _test_eof1;
3797
3799
  case 1:
3798
- #line 3799 "edn_parser.cc"
3800
+ #line 3801 "edn_parser.cc"
3799
3801
  switch( (*p) ) {
3800
3802
  case 10: goto tr2;
3801
3803
  case 32: goto st1;
@@ -3824,11 +3826,11 @@ st0:
3824
3826
  cs = 0;
3825
3827
  goto _out;
3826
3828
  tr6:
3827
- #line 20 "edn_parser.rl"
3829
+ #line 22 "edn_parser.rl"
3828
3830
  { line_number++; }
3829
3831
  goto st4;
3830
3832
  tr3:
3831
- #line 1134 "edn_parser.rl"
3833
+ #line 1136 "edn_parser.rl"
3832
3834
  {
3833
3835
  // we won't know if we've parsed a discard or a metadata until
3834
3836
  // after parse_value() is done. Save the current number of
@@ -3864,7 +3866,7 @@ st4:
3864
3866
  if ( ++p == pe )
3865
3867
  goto _test_eof4;
3866
3868
  case 4:
3867
- #line 3868 "edn_parser.cc"
3869
+ #line 3870 "edn_parser.cc"
3868
3870
  switch( (*p) ) {
3869
3871
  case 10: goto tr6;
3870
3872
  case 32: goto st4;
@@ -3898,7 +3900,7 @@ case 3:
3898
3900
  _out: {}
3899
3901
  }
3900
3902
 
3901
- #line 1185 "edn_parser.rl"
3903
+ #line 1187 "edn_parser.rl"
3902
3904
 
3903
3905
  if (cs == EDN_tokens_en_main) {} // silence ragel warning
3904
3906
  return state;