edn_turbo 0.2.0 → 0.2.1

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.
@@ -19,7 +19,7 @@
19
19
  //
20
20
 
21
21
 
22
- #line 66 "edn_parser.rl"
22
+ #line 61 "edn_parser.rl"
23
23
 
24
24
 
25
25
  // ============================================================
@@ -29,19 +29,19 @@
29
29
 
30
30
  #line 31 "edn_parser.cc"
31
31
  static const int EDN_value_start = 1;
32
- static const int EDN_value_first_final = 3;
32
+ static const int EDN_value_first_final = 2;
33
33
  static const int EDN_value_error = 0;
34
34
 
35
35
  static const int EDN_value_en_main = 1;
36
36
 
37
37
 
38
- #line 164 "edn_parser.rl"
38
+ #line 160 "edn_parser.rl"
39
39
 
40
40
 
41
41
 
42
42
  const char *edn::Parser::parse_value(const char *p, const char *pe, Rice::Object& o)
43
43
  {
44
- // std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
44
+ //std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
45
45
  int cs;
46
46
 
47
47
 
@@ -50,7 +50,7 @@ const char *edn::Parser::parse_value(const char *p, const char *pe, Rice::Object
50
50
  cs = EDN_value_start;
51
51
  }
52
52
 
53
- #line 173 "edn_parser.rl"
53
+ #line 169 "edn_parser.rl"
54
54
 
55
55
  #line 56 "edn_parser.cc"
56
56
  {
@@ -63,19 +63,20 @@ case 1:
63
63
  case 34: goto tr2;
64
64
  case 35: goto tr3;
65
65
  case 40: goto tr4;
66
- case 42: goto tr0;
67
- case 45: goto tr5;
68
66
  case 58: goto tr6;
69
- case 91: goto tr7;
70
- case 92: goto st2;
67
+ case 91: goto tr8;
68
+ case 92: goto tr9;
71
69
  case 95: goto tr0;
72
- case 123: goto tr9;
70
+ case 123: goto tr10;
73
71
  }
74
72
  if ( (*p) < 48 ) {
75
- if ( (*p) > 38 ) {
76
- if ( 46 <= (*p) && (*p) <= 47 )
73
+ if ( (*p) < 42 ) {
74
+ if ( 33 <= (*p) && (*p) <= 38 )
77
75
  goto tr0;
78
- } else if ( (*p) >= 33 )
76
+ } else if ( (*p) > 43 ) {
77
+ if ( 45 <= (*p) && (*p) <= 47 )
78
+ goto tr0;
79
+ } else
79
80
  goto tr0;
80
81
  } else if ( (*p) > 57 ) {
81
82
  if ( (*p) < 65 ) {
@@ -83,9 +84,9 @@ case 1:
83
84
  goto tr0;
84
85
  } else if ( (*p) > 90 ) {
85
86
  if ( 97 <= (*p) && (*p) <= 122 )
86
- goto tr0;
87
+ goto tr7;
87
88
  } else
88
- goto tr0;
89
+ goto tr7;
89
90
  } else
90
91
  goto tr5;
91
92
  goto st0;
@@ -93,42 +94,33 @@ st0:
93
94
  cs = 0;
94
95
  goto _out;
95
96
  tr0:
96
- #line 78 "edn_parser.rl"
97
+ #line 93 "edn_parser.rl"
97
98
  {
98
- std::string sym;
99
- const char *np = parse_symbol(p, pe, sym);
100
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {
101
- if (sym == "true") { o = Qtrue; }
102
- else if (sym == "false") { o = Qfalse; }
103
- else if (sym == "nil") { o = Qnil; }
104
- else {
105
- o = Parser::make_edn_symbol(sym);
106
- }
107
- {p = (( np))-1;}
108
- }
99
+ const char *np = parse_operator(p, pe, o);
100
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
109
101
  }
110
- goto st3;
102
+ goto st2;
111
103
  tr2:
112
- #line 107 "edn_parser.rl"
104
+ #line 83 "edn_parser.rl"
113
105
  {
114
106
  const char *np = parse_string(p, pe, o);
115
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
107
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
116
108
  }
117
- goto st3;
109
+ goto st2;
118
110
  tr3:
119
- #line 146 "edn_parser.rl"
111
+ #line 73 "edn_parser.rl"
120
112
  {
121
113
  const char *np = parse_dispatch(p + 1, pe, o);
122
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
114
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
123
115
  }
124
- goto st3;
116
+ goto st2;
125
117
  tr4:
126
118
  #line 136 "edn_parser.rl"
127
119
  {
128
120
  const char *np = parse_list(p, pe, o);
129
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
121
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
130
122
  }
131
- goto st3;
123
+ goto st2;
132
124
  tr5:
133
125
  #line 112 "edn_parser.rl"
134
126
  {
@@ -142,71 +134,74 @@ tr5:
142
134
  if (np) {
143
135
  {p = (( np))-1;}
144
136
  p--;
145
- {p++; cs = 3; goto _out;}
137
+ {p++; cs = 2; goto _out;}
146
138
  }
147
139
  else {
148
140
  error(__FUNCTION__, *p);
149
141
  {p = (( pe))-1;}
150
142
  }
151
143
  }
152
- goto st3;
144
+ goto st2;
153
145
  tr6:
154
- #line 92 "edn_parser.rl"
146
+ #line 88 "edn_parser.rl"
155
147
  {
156
148
  const char *np = parse_keyword(p, pe, o);
157
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
149
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
158
150
  }
159
- goto st3;
151
+ goto st2;
160
152
  tr7:
153
+ #line 98 "edn_parser.rl"
154
+ {
155
+ std::string sym;
156
+ const char *np = parse_symbol(p, pe, sym);
157
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {
158
+ if (sym == "true") { o = Qtrue; }
159
+ else if (sym == "false") { o = Qfalse; }
160
+ else if (sym == "nil") { o = Qnil; }
161
+ else {
162
+ o = Parser::make_edn_symbol(sym);
163
+ }
164
+ {p = (( np))-1;}
165
+ }
166
+ }
167
+ goto st2;
168
+ tr8:
161
169
  #line 131 "edn_parser.rl"
162
170
  {
163
171
  const char *np = parse_vector(p, pe, o);
164
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
172
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
165
173
  }
166
- goto st3;
174
+ goto st2;
167
175
  tr9:
168
- #line 141 "edn_parser.rl"
176
+ #line 78 "edn_parser.rl"
169
177
  {
170
- const char *np = parse_map(p, pe, o);
171
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
178
+ const char *np = parse_esc_char(p, pe, o);
179
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
172
180
  }
173
- goto st3;
181
+ goto st2;
174
182
  tr10:
175
- #line 97 "edn_parser.rl"
183
+ #line 141 "edn_parser.rl"
176
184
  {
177
- Rice::String s;
178
-
179
- if (!parse_escaped_char(*p, s)) {
180
- p--; {p++; cs = 3; goto _out;}
181
- } else {
182
- o = s;
183
- }
185
+ const char *np = parse_map(p, pe, o);
186
+ if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
184
187
  }
185
- goto st3;
186
- st3:
187
- if ( ++p == pe )
188
- goto _test_eof3;
189
- case 3:
190
- #line 151 "edn_parser.rl"
191
- { p--; {p++; cs = 3; goto _out;} }
192
- #line 193 "edn_parser.cc"
193
- goto st0;
188
+ goto st2;
194
189
  st2:
195
190
  if ( ++p == pe )
196
191
  goto _test_eof2;
197
192
  case 2:
198
- if ( 33 <= (*p) && (*p) <= 126 )
199
- goto tr10;
193
+ #line 146 "edn_parser.rl"
194
+ { p--; {p++; cs = 2; goto _out;} }
195
+ #line 196 "edn_parser.cc"
200
196
  goto st0;
201
197
  }
202
- _test_eof3: cs = 3; goto _test_eof;
203
198
  _test_eof2: cs = 2; goto _test_eof;
204
199
 
205
200
  _test_eof: {}
206
201
  _out: {}
207
202
  }
208
203
 
209
- #line 174 "edn_parser.rl"
204
+ #line 170 "edn_parser.rl"
210
205
 
211
206
  if (cs >= EDN_value_first_final) {
212
207
  return p;
@@ -222,36 +217,37 @@ case 2:
222
217
 
223
218
 
224
219
  // ============================================================
225
- // symbol parsing
220
+ // operator parsing
226
221
  //
227
222
 
228
- #line 229 "edn_parser.cc"
229
- static const int EDN_symbol_start = 1;
230
- static const int EDN_symbol_first_final = 3;
231
- static const int EDN_symbol_error = 0;
223
+ #line 224 "edn_parser.cc"
224
+ static const int EDN_operator_start = 1;
225
+ static const int EDN_operator_first_final = 3;
226
+ static const int EDN_operator_error = 0;
232
227
 
233
- static const int EDN_symbol_en_main = 1;
228
+ static const int EDN_operator_en_main = 1;
234
229
 
235
230
 
236
- #line 202 "edn_parser.rl"
231
+ #line 237 "edn_parser.rl"
237
232
 
238
233
 
239
234
 
240
- const char* edn::Parser::parse_symbol(const char *p, const char *pe, std::string& s)
235
+ const char* edn::Parser::parse_operator(const char *p, const char *pe, Rice::Object& o)
241
236
  {
242
- //std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
237
+ // std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
243
238
  int cs;
239
+ std::string op;
244
240
 
245
241
 
246
- #line 247 "edn_parser.cc"
242
+ #line 243 "edn_parser.cc"
247
243
  {
248
- cs = EDN_symbol_start;
244
+ cs = EDN_operator_start;
249
245
  }
250
246
 
251
- #line 211 "edn_parser.rl"
247
+ #line 247 "edn_parser.rl"
252
248
  p_save = p;
253
249
 
254
- #line 255 "edn_parser.cc"
250
+ #line 251 "edn_parser.cc"
255
251
  {
256
252
  if ( p == pe )
257
253
  goto _test_eof;
@@ -260,24 +256,17 @@ const char* edn::Parser::parse_symbol(const char *p, const char *pe, std::string
260
256
  case 1:
261
257
  switch( (*p) ) {
262
258
  case 33: goto st3;
259
+ case 42: goto st3;
260
+ case 43: goto st7;
261
+ case 45: goto st7;
262
+ case 46: goto st9;
263
+ case 47: goto st3;
263
264
  case 95: goto st3;
264
265
  }
265
- if ( (*p) < 45 ) {
266
- if ( (*p) > 38 ) {
267
- if ( 42 <= (*p) && (*p) <= 43 )
268
- goto st3;
269
- } else if ( (*p) >= 36 )
270
- goto st3;
271
- } else if ( (*p) > 47 ) {
272
- if ( (*p) < 65 ) {
273
- if ( 60 <= (*p) && (*p) <= 63 )
274
- goto st3;
275
- } else if ( (*p) > 90 ) {
276
- if ( 97 <= (*p) && (*p) <= 122 )
277
- goto st3;
278
- } else
266
+ if ( (*p) > 38 ) {
267
+ if ( 60 <= (*p) && (*p) <= 63 )
279
268
  goto st3;
280
- } else
269
+ } else if ( (*p) >= 36 )
281
270
  goto st3;
282
271
  goto st0;
283
272
  st0:
@@ -288,111 +277,745 @@ st3:
288
277
  goto _test_eof3;
289
278
  case 3:
290
279
  switch( (*p) ) {
291
- case 10: goto tr6;
292
- case 32: goto tr5;
293
- case 33: goto st3;
294
- case 44: goto tr5;
295
- case 59: goto tr7;
296
- case 95: goto st3;
280
+ case 10: goto tr8;
281
+ case 32: goto tr7;
282
+ case 33: goto st0;
283
+ case 44: goto tr7;
284
+ case 59: goto tr9;
285
+ case 95: goto st0;
297
286
  }
298
287
  if ( (*p) < 42 ) {
299
288
  if ( (*p) > 13 ) {
300
- if ( 35 <= (*p) && (*p) <= 38 )
301
- goto st3;
289
+ if ( 36 <= (*p) && (*p) <= 38 )
290
+ goto st0;
302
291
  } else if ( (*p) >= 9 )
303
- goto tr5;
304
- } else if ( (*p) > 63 ) {
305
- if ( (*p) > 90 ) {
292
+ goto tr7;
293
+ } else if ( (*p) > 57 ) {
294
+ if ( (*p) < 65 ) {
295
+ if ( 60 <= (*p) && (*p) <= 63 )
296
+ goto st0;
297
+ } else if ( (*p) > 90 ) {
306
298
  if ( 97 <= (*p) && (*p) <= 122 )
307
- goto st3;
308
- } else if ( (*p) >= 65 )
309
- goto st3;
299
+ goto st0;
300
+ } else
301
+ goto st0;
310
302
  } else
311
- goto st3;
312
- goto tr4;
313
- tr4:
314
- #line 197 "edn_parser.rl"
303
+ goto st0;
304
+ goto tr6;
305
+ tr6:
306
+ #line 223 "edn_parser.rl"
307
+ {
308
+ // std::cerr << "PARSE OP::OP '" << *(fpc-1) << "', pe: '" << *pe << "'" << std::endl;
309
+ std::string sym;
310
+ sym += *(p - 1);
311
+ o = Parser::make_edn_symbol(sym);
312
+ }
313
+ #line 230 "edn_parser.rl"
314
+ { p--; {p++; cs = 4; goto _out;} }
315
+ goto st4;
316
+ tr10:
317
+ #line 230 "edn_parser.rl"
315
318
  { p--; {p++; cs = 4; goto _out;} }
316
319
  goto st4;
317
320
  st4:
318
321
  if ( ++p == pe )
319
322
  goto _test_eof4;
320
323
  case 4:
321
- #line 322 "edn_parser.cc"
324
+ #line 325 "edn_parser.cc"
322
325
  goto st0;
323
- tr3:
326
+ tr5:
324
327
  #line 23 "edn_parser.rl"
325
328
  { line_number++; }
326
329
  goto st5;
327
- tr5:
328
- #line 197 "edn_parser.rl"
330
+ tr7:
331
+ #line 223 "edn_parser.rl"
332
+ {
333
+ // std::cerr << "PARSE OP::OP '" << *(fpc-1) << "', pe: '" << *pe << "'" << std::endl;
334
+ std::string sym;
335
+ sym += *(p - 1);
336
+ o = Parser::make_edn_symbol(sym);
337
+ }
338
+ #line 230 "edn_parser.rl"
329
339
  { p--; {p++; cs = 5; goto _out;} }
330
340
  goto st5;
331
- tr6:
341
+ tr8:
342
+ #line 223 "edn_parser.rl"
343
+ {
344
+ // std::cerr << "PARSE OP::OP '" << *(fpc-1) << "', pe: '" << *pe << "'" << std::endl;
345
+ std::string sym;
346
+ sym += *(p - 1);
347
+ o = Parser::make_edn_symbol(sym);
348
+ }
349
+ #line 23 "edn_parser.rl"
350
+ { line_number++; }
351
+ #line 230 "edn_parser.rl"
352
+ { p--; {p++; cs = 5; goto _out;} }
353
+ goto st5;
354
+ tr11:
355
+ #line 230 "edn_parser.rl"
356
+ { p--; {p++; cs = 5; goto _out;} }
357
+ goto st5;
358
+ tr12:
332
359
  #line 23 "edn_parser.rl"
333
360
  { line_number++; }
334
- #line 197 "edn_parser.rl"
361
+ #line 230 "edn_parser.rl"
335
362
  { p--; {p++; cs = 5; goto _out;} }
336
363
  goto st5;
337
364
  st5:
338
365
  if ( ++p == pe )
339
366
  goto _test_eof5;
340
367
  case 5:
341
- #line 342 "edn_parser.cc"
368
+ #line 369 "edn_parser.cc"
342
369
  switch( (*p) ) {
343
- case 10: goto tr6;
344
- case 32: goto tr5;
370
+ case 10: goto tr12;
371
+ case 32: goto tr11;
345
372
  case 33: goto st0;
346
- case 44: goto tr5;
347
- case 59: goto tr7;
373
+ case 44: goto tr11;
374
+ case 59: goto tr13;
348
375
  case 95: goto st0;
349
376
  }
350
377
  if ( (*p) < 42 ) {
351
378
  if ( (*p) > 13 ) {
352
- if ( 35 <= (*p) && (*p) <= 38 )
379
+ if ( 36 <= (*p) && (*p) <= 38 )
353
380
  goto st0;
354
381
  } else if ( (*p) >= 9 )
355
- goto tr5;
356
- } else if ( (*p) > 63 ) {
357
- if ( (*p) > 90 ) {
382
+ goto tr11;
383
+ } else if ( (*p) > 57 ) {
384
+ if ( (*p) < 65 ) {
385
+ if ( 60 <= (*p) && (*p) <= 63 )
386
+ goto st0;
387
+ } else if ( (*p) > 90 ) {
388
+ if ( 97 <= (*p) && (*p) <= 122 )
389
+ goto st0;
390
+ } else
391
+ goto st0;
392
+ } else
393
+ goto st0;
394
+ goto tr10;
395
+ tr9:
396
+ #line 223 "edn_parser.rl"
397
+ {
398
+ // std::cerr << "PARSE OP::OP '" << *(fpc-1) << "', pe: '" << *pe << "'" << std::endl;
399
+ std::string sym;
400
+ sym += *(p - 1);
401
+ o = Parser::make_edn_symbol(sym);
402
+ }
403
+ #line 230 "edn_parser.rl"
404
+ { p--; {p++; cs = 6; goto _out;} }
405
+ goto st6;
406
+ tr13:
407
+ #line 230 "edn_parser.rl"
408
+ { p--; {p++; cs = 6; goto _out;} }
409
+ goto st6;
410
+ st6:
411
+ if ( ++p == pe )
412
+ goto _test_eof6;
413
+ case 6:
414
+ #line 415 "edn_parser.cc"
415
+ if ( (*p) == 10 )
416
+ goto tr5;
417
+ goto st2;
418
+ st2:
419
+ if ( ++p == pe )
420
+ goto _test_eof2;
421
+ case 2:
422
+ if ( (*p) == 10 )
423
+ goto tr5;
424
+ goto st2;
425
+ st7:
426
+ if ( ++p == pe )
427
+ goto _test_eof7;
428
+ case 7:
429
+ switch( (*p) ) {
430
+ case 10: goto tr8;
431
+ case 32: goto tr7;
432
+ case 33: goto st0;
433
+ case 44: goto tr7;
434
+ case 59: goto tr9;
435
+ case 95: goto st0;
436
+ }
437
+ if ( (*p) < 48 ) {
438
+ if ( (*p) < 36 ) {
439
+ if ( 9 <= (*p) && (*p) <= 13 )
440
+ goto tr7;
441
+ } else if ( (*p) > 38 ) {
442
+ if ( 42 <= (*p) && (*p) <= 47 )
443
+ goto st0;
444
+ } else
445
+ goto st0;
446
+ } else if ( (*p) > 57 ) {
447
+ if ( (*p) < 65 ) {
448
+ if ( 60 <= (*p) && (*p) <= 63 )
449
+ goto st0;
450
+ } else if ( (*p) > 90 ) {
451
+ if ( 97 <= (*p) && (*p) <= 122 )
452
+ goto tr15;
453
+ } else
454
+ goto tr15;
455
+ } else
456
+ goto tr14;
457
+ goto tr6;
458
+ tr14:
459
+ #line 203 "edn_parser.rl"
460
+ {
461
+ //std::cerr << "PARSE OP::NUM '" << (fpc - 1) << "'" << std::endl;
462
+ // try to parse a decimal first
463
+ const char *np = parse_decimal(p_save, pe, o);
464
+ if (np == NULL) {
465
+ // if we can't, try to parse it as an int
466
+ np = parse_integer(p_save, pe, o);
467
+ }
468
+
469
+ if (np) {
470
+ {p = (( np))-1;}
471
+ p--;
472
+ {p++; cs = 8; goto _out;}
473
+ }
474
+ else {
475
+ error(__FUNCTION__, *p);
476
+ {p = (( pe))-1;}
477
+ }
478
+ }
479
+ goto st8;
480
+ tr15:
481
+ #line 193 "edn_parser.rl"
482
+ {
483
+ // std::cerr << "PARSE OP::SYM '" << (fpc - 1) << "'" << std::endl;
484
+ std::string sym;
485
+ const char *np = parse_symbol(p_save, pe, sym);
486
+ if (np == NULL) { p--; {p++; cs = 8; goto _out;} } else {
487
+ o = Parser::make_edn_symbol(sym);
488
+ {p = (( np))-1;}
489
+ }
490
+ }
491
+ goto st8;
492
+ st8:
493
+ if ( ++p == pe )
494
+ goto _test_eof8;
495
+ case 8:
496
+ #line 497 "edn_parser.cc"
497
+ switch( (*p) ) {
498
+ case 33: goto st0;
499
+ case 95: goto st0;
500
+ }
501
+ if ( (*p) < 45 ) {
502
+ if ( (*p) > 38 ) {
503
+ if ( 42 <= (*p) && (*p) <= 43 )
504
+ goto st0;
505
+ } else if ( (*p) >= 36 )
506
+ goto st0;
507
+ } else if ( (*p) > 57 ) {
508
+ if ( (*p) < 65 ) {
509
+ if ( 60 <= (*p) && (*p) <= 63 )
510
+ goto st0;
511
+ } else if ( (*p) > 90 ) {
512
+ if ( 97 <= (*p) && (*p) <= 122 )
513
+ goto st0;
514
+ } else
515
+ goto st0;
516
+ } else
517
+ goto st0;
518
+ goto tr10;
519
+ st9:
520
+ if ( ++p == pe )
521
+ goto _test_eof9;
522
+ case 9:
523
+ switch( (*p) ) {
524
+ case 10: goto tr8;
525
+ case 32: goto tr7;
526
+ case 33: goto st0;
527
+ case 44: goto tr7;
528
+ case 59: goto tr9;
529
+ case 95: goto st0;
530
+ }
531
+ if ( (*p) < 42 ) {
532
+ if ( (*p) > 13 ) {
533
+ if ( 36 <= (*p) && (*p) <= 38 )
534
+ goto st0;
535
+ } else if ( (*p) >= 9 )
536
+ goto tr7;
537
+ } else if ( (*p) > 57 ) {
538
+ if ( (*p) < 65 ) {
539
+ if ( 60 <= (*p) && (*p) <= 63 )
540
+ goto st0;
541
+ } else if ( (*p) > 90 ) {
542
+ if ( 97 <= (*p) && (*p) <= 122 )
543
+ goto tr15;
544
+ } else
545
+ goto tr15;
546
+ } else
547
+ goto st0;
548
+ goto tr6;
549
+ }
550
+ _test_eof3: cs = 3; goto _test_eof;
551
+ _test_eof4: cs = 4; goto _test_eof;
552
+ _test_eof5: cs = 5; goto _test_eof;
553
+ _test_eof6: cs = 6; goto _test_eof;
554
+ _test_eof2: cs = 2; goto _test_eof;
555
+ _test_eof7: cs = 7; goto _test_eof;
556
+ _test_eof8: cs = 8; goto _test_eof;
557
+ _test_eof9: cs = 9; goto _test_eof;
558
+
559
+ _test_eof: {}
560
+ if ( p == eof )
561
+ {
562
+ switch ( cs ) {
563
+ case 3:
564
+ case 7:
565
+ case 9:
566
+ #line 223 "edn_parser.rl"
567
+ {
568
+ // std::cerr << "PARSE OP::OP '" << *(fpc-1) << "', pe: '" << *pe << "'" << std::endl;
569
+ std::string sym;
570
+ sym += *(p - 1);
571
+ o = Parser::make_edn_symbol(sym);
572
+ }
573
+ break;
574
+ #line 575 "edn_parser.cc"
575
+ }
576
+ }
577
+
578
+ _out: {}
579
+ }
580
+
581
+ #line 249 "edn_parser.rl"
582
+
583
+ if (cs >= EDN_operator_first_final) {
584
+ return p;
585
+ }
586
+ else if (cs == EDN_operator_error) {
587
+ error(__FUNCTION__, *p);
588
+ return pe;
589
+ }
590
+ else if (cs == EDN_operator_en_main) {} // silence ragel warning
591
+ return NULL;
592
+ }
593
+
594
+
595
+
596
+ // ============================================================
597
+ // escaped char parsing
598
+ //
599
+
600
+ #line 601 "edn_parser.cc"
601
+ static const int EDN_escaped_char_start = 1;
602
+ static const int EDN_escaped_char_first_final = 4;
603
+ static const int EDN_escaped_char_error = 0;
604
+
605
+ static const int EDN_escaped_char_en_main = 1;
606
+
607
+
608
+ #line 279 "edn_parser.rl"
609
+
610
+
611
+
612
+ const char* edn::Parser::parse_esc_char(const char *p, const char *pe, Rice::Object& o)
613
+ {
614
+ //std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
615
+ int cs;
616
+
617
+
618
+ #line 619 "edn_parser.cc"
619
+ {
620
+ cs = EDN_escaped_char_start;
621
+ }
622
+
623
+ #line 288 "edn_parser.rl"
624
+ p_save = p;
625
+
626
+ #line 627 "edn_parser.cc"
627
+ {
628
+ if ( p == pe )
629
+ goto _test_eof;
630
+ switch ( cs )
631
+ {
632
+ case 1:
633
+ if ( (*p) == 92 )
634
+ goto st2;
635
+ goto st0;
636
+ st0:
637
+ cs = 0;
638
+ goto _out;
639
+ st2:
640
+ if ( ++p == pe )
641
+ goto _test_eof2;
642
+ case 2:
643
+ if ( (*p) > 90 ) {
644
+ if ( 97 <= (*p) && (*p) <= 122 )
645
+ goto st4;
646
+ } else if ( (*p) >= 65 )
647
+ goto st4;
648
+ goto st0;
649
+ st4:
650
+ if ( ++p == pe )
651
+ goto _test_eof4;
652
+ case 4:
653
+ switch( (*p) ) {
654
+ case 10: goto tr7;
655
+ case 32: goto tr6;
656
+ case 44: goto tr6;
657
+ case 59: goto tr8;
658
+ case 92: goto st0;
659
+ }
660
+ if ( (*p) < 65 ) {
661
+ if ( 9 <= (*p) && (*p) <= 13 )
662
+ goto tr6;
663
+ } else if ( (*p) > 90 ) {
664
+ if ( 97 <= (*p) && (*p) <= 122 )
665
+ goto st4;
666
+ } else
667
+ goto st4;
668
+ goto tr5;
669
+ tr5:
670
+ #line 274 "edn_parser.rl"
671
+ { p--; {p++; cs = 5; goto _out;} }
672
+ goto st5;
673
+ st5:
674
+ if ( ++p == pe )
675
+ goto _test_eof5;
676
+ case 5:
677
+ #line 678 "edn_parser.cc"
678
+ goto st0;
679
+ tr4:
680
+ #line 23 "edn_parser.rl"
681
+ { line_number++; }
682
+ goto st6;
683
+ tr6:
684
+ #line 274 "edn_parser.rl"
685
+ { p--; {p++; cs = 6; goto _out;} }
686
+ goto st6;
687
+ tr7:
688
+ #line 23 "edn_parser.rl"
689
+ { line_number++; }
690
+ #line 274 "edn_parser.rl"
691
+ { p--; {p++; cs = 6; goto _out;} }
692
+ goto st6;
693
+ st6:
694
+ if ( ++p == pe )
695
+ goto _test_eof6;
696
+ case 6:
697
+ #line 698 "edn_parser.cc"
698
+ switch( (*p) ) {
699
+ case 10: goto tr7;
700
+ case 32: goto tr6;
701
+ case 44: goto tr6;
702
+ case 59: goto tr8;
703
+ case 92: goto st0;
704
+ }
705
+ if ( (*p) < 65 ) {
706
+ if ( 9 <= (*p) && (*p) <= 13 )
707
+ goto tr6;
708
+ } else if ( (*p) > 90 ) {
709
+ if ( 97 <= (*p) && (*p) <= 122 )
710
+ goto st0;
711
+ } else
712
+ goto st0;
713
+ goto tr5;
714
+ tr8:
715
+ #line 274 "edn_parser.rl"
716
+ { p--; {p++; cs = 7; goto _out;} }
717
+ goto st7;
718
+ st7:
719
+ if ( ++p == pe )
720
+ goto _test_eof7;
721
+ case 7:
722
+ #line 723 "edn_parser.cc"
723
+ if ( (*p) == 10 )
724
+ goto tr4;
725
+ goto st3;
726
+ st3:
727
+ if ( ++p == pe )
728
+ goto _test_eof3;
729
+ case 3:
730
+ if ( (*p) == 10 )
731
+ goto tr4;
732
+ goto st3;
733
+ }
734
+ _test_eof2: cs = 2; goto _test_eof;
735
+ _test_eof4: cs = 4; goto _test_eof;
736
+ _test_eof5: cs = 5; goto _test_eof;
737
+ _test_eof6: cs = 6; goto _test_eof;
738
+ _test_eof7: cs = 7; goto _test_eof;
739
+ _test_eof3: cs = 3; goto _test_eof;
740
+
741
+ _test_eof: {}
742
+ _out: {}
743
+ }
744
+
745
+ #line 290 "edn_parser.rl"
746
+
747
+ if (cs >= EDN_escaped_char_first_final) {
748
+ if (!Parser::parse_escaped_char(p_save + 1, p, o)) {
749
+ return pe;
750
+ }
751
+ return p;
752
+ }
753
+ else if (cs == EDN_escaped_char_error) {
754
+ error(__FUNCTION__, *p);
755
+ return pe;
756
+ }
757
+ else if (cs == EDN_escaped_char_en_main) {} // silence ragel warning
758
+ return NULL;
759
+ }
760
+
761
+
762
+
763
+
764
+ // ============================================================
765
+ // symbol parsing
766
+ //
767
+
768
+ #line 769 "edn_parser.cc"
769
+ static const int EDN_symbol_start = 1;
770
+ static const int EDN_symbol_first_final = 4;
771
+ static const int EDN_symbol_error = 0;
772
+
773
+ static const int EDN_symbol_en_main = 1;
774
+
775
+
776
+ #line 323 "edn_parser.rl"
777
+
778
+
779
+
780
+ const char* edn::Parser::parse_symbol(const char *p, const char *pe, std::string& s)
781
+ {
782
+ // std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
783
+ int cs;
784
+
785
+
786
+ #line 787 "edn_parser.cc"
787
+ {
788
+ cs = EDN_symbol_start;
789
+ }
790
+
791
+ #line 332 "edn_parser.rl"
792
+ p_save = p;
793
+
794
+ #line 795 "edn_parser.cc"
795
+ {
796
+ if ( p == pe )
797
+ goto _test_eof;
798
+ switch ( cs )
799
+ {
800
+ case 1:
801
+ switch( (*p) ) {
802
+ case 33: goto st4;
803
+ case 95: goto st4;
804
+ }
805
+ if ( (*p) < 45 ) {
806
+ if ( (*p) > 38 ) {
807
+ if ( 42 <= (*p) && (*p) <= 43 )
808
+ goto st4;
809
+ } else if ( (*p) >= 36 )
810
+ goto st4;
811
+ } else if ( (*p) > 47 ) {
812
+ if ( (*p) < 65 ) {
813
+ if ( 60 <= (*p) && (*p) <= 63 )
814
+ goto st4;
815
+ } else if ( (*p) > 90 ) {
816
+ if ( 97 <= (*p) && (*p) <= 122 )
817
+ goto st8;
818
+ } else
819
+ goto st8;
820
+ } else
821
+ goto st4;
822
+ goto st0;
823
+ st0:
824
+ cs = 0;
825
+ goto _out;
826
+ st4:
827
+ if ( ++p == pe )
828
+ goto _test_eof4;
829
+ case 4:
830
+ switch( (*p) ) {
831
+ case 10: goto tr8;
832
+ case 32: goto tr7;
833
+ case 33: goto st0;
834
+ case 44: goto tr7;
835
+ case 59: goto tr9;
836
+ case 95: goto st0;
837
+ }
838
+ if ( (*p) < 42 ) {
839
+ if ( (*p) > 13 ) {
840
+ if ( 35 <= (*p) && (*p) <= 38 )
841
+ goto st0;
842
+ } else if ( (*p) >= 9 )
843
+ goto tr7;
844
+ } else if ( (*p) > 63 ) {
845
+ if ( (*p) > 90 ) {
846
+ if ( 97 <= (*p) && (*p) <= 122 )
847
+ goto st8;
848
+ } else if ( (*p) >= 65 )
849
+ goto st8;
850
+ } else
851
+ goto st0;
852
+ goto tr6;
853
+ tr6:
854
+ #line 317 "edn_parser.rl"
855
+ { p--; {p++; cs = 5; goto _out;} }
856
+ goto st5;
857
+ st5:
858
+ if ( ++p == pe )
859
+ goto _test_eof5;
860
+ case 5:
861
+ #line 862 "edn_parser.cc"
862
+ goto st0;
863
+ tr4:
864
+ #line 23 "edn_parser.rl"
865
+ { line_number++; }
866
+ goto st6;
867
+ tr7:
868
+ #line 317 "edn_parser.rl"
869
+ { p--; {p++; cs = 6; goto _out;} }
870
+ goto st6;
871
+ tr8:
872
+ #line 23 "edn_parser.rl"
873
+ { line_number++; }
874
+ #line 317 "edn_parser.rl"
875
+ { p--; {p++; cs = 6; goto _out;} }
876
+ goto st6;
877
+ st6:
878
+ if ( ++p == pe )
879
+ goto _test_eof6;
880
+ case 6:
881
+ #line 882 "edn_parser.cc"
882
+ switch( (*p) ) {
883
+ case 10: goto tr8;
884
+ case 32: goto tr7;
885
+ case 33: goto st0;
886
+ case 44: goto tr7;
887
+ case 59: goto tr9;
888
+ case 95: goto st0;
889
+ }
890
+ if ( (*p) < 42 ) {
891
+ if ( (*p) > 13 ) {
892
+ if ( 35 <= (*p) && (*p) <= 38 )
893
+ goto st0;
894
+ } else if ( (*p) >= 9 )
895
+ goto tr7;
896
+ } else if ( (*p) > 63 ) {
897
+ if ( (*p) > 90 ) {
898
+ if ( 97 <= (*p) && (*p) <= 122 )
899
+ goto st0;
900
+ } else if ( (*p) >= 65 )
901
+ goto st0;
902
+ } else
903
+ goto st0;
904
+ goto tr6;
905
+ tr9:
906
+ #line 317 "edn_parser.rl"
907
+ { p--; {p++; cs = 7; goto _out;} }
908
+ goto st7;
909
+ st7:
910
+ if ( ++p == pe )
911
+ goto _test_eof7;
912
+ case 7:
913
+ #line 914 "edn_parser.cc"
914
+ if ( (*p) == 10 )
915
+ goto tr4;
916
+ goto st2;
917
+ st2:
918
+ if ( ++p == pe )
919
+ goto _test_eof2;
920
+ case 2:
921
+ if ( (*p) == 10 )
922
+ goto tr4;
923
+ goto st2;
924
+ st8:
925
+ if ( ++p == pe )
926
+ goto _test_eof8;
927
+ case 8:
928
+ switch( (*p) ) {
929
+ case 10: goto tr8;
930
+ case 32: goto tr7;
931
+ case 33: goto st0;
932
+ case 35: goto st8;
933
+ case 44: goto tr7;
934
+ case 47: goto st3;
935
+ case 59: goto tr9;
936
+ case 95: goto st8;
937
+ }
938
+ if ( (*p) < 45 ) {
939
+ if ( (*p) < 36 ) {
940
+ if ( 9 <= (*p) && (*p) <= 13 )
941
+ goto tr7;
942
+ } else if ( (*p) > 38 ) {
943
+ if ( 42 <= (*p) && (*p) <= 43 )
944
+ goto st0;
945
+ } else
946
+ goto st0;
947
+ } else if ( (*p) > 58 ) {
948
+ if ( (*p) < 65 ) {
949
+ if ( 60 <= (*p) && (*p) <= 63 )
950
+ goto st0;
951
+ } else if ( (*p) > 90 ) {
952
+ if ( 97 <= (*p) && (*p) <= 122 )
953
+ goto st8;
954
+ } else
955
+ goto st8;
956
+ } else
957
+ goto st8;
958
+ goto tr6;
959
+ st3:
960
+ if ( ++p == pe )
961
+ goto _test_eof3;
962
+ case 3:
963
+ if ( (*p) > 90 ) {
964
+ if ( 97 <= (*p) && (*p) <= 122 )
965
+ goto st9;
966
+ } else if ( (*p) >= 65 )
967
+ goto st9;
968
+ goto st0;
969
+ st9:
970
+ if ( ++p == pe )
971
+ goto _test_eof9;
972
+ case 9:
973
+ switch( (*p) ) {
974
+ case 10: goto tr8;
975
+ case 32: goto tr7;
976
+ case 33: goto st0;
977
+ case 35: goto st9;
978
+ case 44: goto tr7;
979
+ case 47: goto st0;
980
+ case 59: goto tr9;
981
+ case 95: goto st9;
982
+ }
983
+ if ( (*p) < 45 ) {
984
+ if ( (*p) < 36 ) {
985
+ if ( 9 <= (*p) && (*p) <= 13 )
986
+ goto tr7;
987
+ } else if ( (*p) > 38 ) {
988
+ if ( 42 <= (*p) && (*p) <= 43 )
989
+ goto st0;
990
+ } else
991
+ goto st0;
992
+ } else if ( (*p) > 58 ) {
993
+ if ( (*p) < 65 ) {
994
+ if ( 60 <= (*p) && (*p) <= 63 )
995
+ goto st0;
996
+ } else if ( (*p) > 90 ) {
358
997
  if ( 97 <= (*p) && (*p) <= 122 )
359
- goto st0;
360
- } else if ( (*p) >= 65 )
361
- goto st0;
998
+ goto st9;
999
+ } else
1000
+ goto st9;
362
1001
  } else
363
- goto st0;
364
- goto tr4;
365
- tr7:
366
- #line 197 "edn_parser.rl"
367
- { p--; {p++; cs = 6; goto _out;} }
368
- goto st6;
369
- st6:
370
- if ( ++p == pe )
371
- goto _test_eof6;
372
- case 6:
373
- #line 374 "edn_parser.cc"
374
- if ( (*p) == 10 )
375
- goto tr3;
376
- goto st2;
377
- st2:
378
- if ( ++p == pe )
379
- goto _test_eof2;
380
- case 2:
381
- if ( (*p) == 10 )
382
- goto tr3;
383
- goto st2;
1002
+ goto st9;
1003
+ goto tr6;
384
1004
  }
385
- _test_eof3: cs = 3; goto _test_eof;
386
1005
  _test_eof4: cs = 4; goto _test_eof;
387
1006
  _test_eof5: cs = 5; goto _test_eof;
388
1007
  _test_eof6: cs = 6; goto _test_eof;
1008
+ _test_eof7: cs = 7; goto _test_eof;
389
1009
  _test_eof2: cs = 2; goto _test_eof;
1010
+ _test_eof8: cs = 8; goto _test_eof;
1011
+ _test_eof3: cs = 3; goto _test_eof;
1012
+ _test_eof9: cs = 9; goto _test_eof;
390
1013
 
391
1014
  _test_eof: {}
392
1015
  _out: {}
393
1016
  }
394
1017
 
395
- #line 213 "edn_parser.rl"
1018
+ #line 334 "edn_parser.rl"
396
1019
 
397
1020
  if (cs >= EDN_symbol_first_final) {
398
1021
  uint32_t len = p - p_save;
@@ -417,7 +1040,7 @@ case 2:
417
1040
  // keyword parsing
418
1041
  //
419
1042
 
420
- #line 421 "edn_parser.cc"
1043
+ #line 1044 "edn_parser.cc"
421
1044
  static const int EDN_keyword_start = 1;
422
1045
  static const int EDN_keyword_first_final = 3;
423
1046
  static const int EDN_keyword_error = 0;
@@ -425,24 +1048,25 @@ static const int EDN_keyword_error = 0;
425
1048
  static const int EDN_keyword_en_main = 1;
426
1049
 
427
1050
 
428
- #line 250 "edn_parser.rl"
1051
+ #line 371 "edn_parser.rl"
429
1052
 
430
1053
 
431
1054
 
432
1055
  const char* edn::Parser::parse_keyword(const char *p, const char *pe, Rice::Object& o)
433
1056
  {
434
1057
  int cs;
1058
+ // std::cerr << __FUNCTION__ << " - p: '" << p << "'" << std::endl;
435
1059
 
436
1060
 
437
- #line 438 "edn_parser.cc"
1061
+ #line 1062 "edn_parser.cc"
438
1062
  {
439
1063
  cs = EDN_keyword_start;
440
1064
  }
441
1065
 
442
- #line 258 "edn_parser.rl"
1066
+ #line 380 "edn_parser.rl"
443
1067
  p_save = p;
444
1068
 
445
- #line 446 "edn_parser.cc"
1069
+ #line 1070 "edn_parser.cc"
446
1070
  {
447
1071
  if ( p == pe )
448
1072
  goto _test_eof;
@@ -459,24 +1083,13 @@ st2:
459
1083
  if ( ++p == pe )
460
1084
  goto _test_eof2;
461
1085
  case 2:
462
- switch( (*p) ) {
463
- case 33: goto st3;
464
- case 95: goto st3;
465
- }
466
- if ( (*p) < 45 ) {
467
- if ( (*p) > 38 ) {
468
- if ( 42 <= (*p) && (*p) <= 43 )
469
- goto st3;
470
- } else if ( (*p) >= 35 )
1086
+ if ( (*p) == 35 )
1087
+ goto st3;
1088
+ if ( (*p) < 65 ) {
1089
+ if ( 46 <= (*p) && (*p) <= 47 )
471
1090
  goto st3;
472
- } else if ( (*p) > 47 ) {
473
- if ( (*p) < 65 ) {
474
- if ( 60 <= (*p) && (*p) <= 63 )
475
- goto st3;
476
- } else if ( (*p) > 90 ) {
477
- if ( 97 <= (*p) && (*p) <= 122 )
478
- goto st3;
479
- } else
1091
+ } else if ( (*p) > 90 ) {
1092
+ if ( 97 <= (*p) && (*p) <= 122 )
480
1093
  goto st3;
481
1094
  } else
482
1095
  goto st3;
@@ -508,14 +1121,14 @@ case 3:
508
1121
  goto st3;
509
1122
  goto tr3;
510
1123
  tr3:
511
- #line 247 "edn_parser.rl"
1124
+ #line 368 "edn_parser.rl"
512
1125
  { p--; {p++; cs = 4; goto _out;} }
513
1126
  goto st4;
514
1127
  st4:
515
1128
  if ( ++p == pe )
516
1129
  goto _test_eof4;
517
1130
  case 4:
518
- #line 519 "edn_parser.cc"
1131
+ #line 1132 "edn_parser.cc"
519
1132
  goto st0;
520
1133
  }
521
1134
  _test_eof2: cs = 2; goto _test_eof;
@@ -526,7 +1139,7 @@ case 4:
526
1139
  _out: {}
527
1140
  }
528
1141
 
529
- #line 260 "edn_parser.rl"
1142
+ #line 382 "edn_parser.rl"
530
1143
 
531
1144
  if (cs >= EDN_keyword_first_final) {
532
1145
  uint32_t len = p - p_save - 1; // don't include leading ':' because Rice::Symbol will handle it
@@ -549,7 +1162,7 @@ case 4:
549
1162
  // string parsing
550
1163
  //
551
1164
 
552
- #line 553 "edn_parser.cc"
1165
+ #line 1166 "edn_parser.cc"
553
1166
  static const int EDN_string_start = 1;
554
1167
  static const int EDN_string_first_final = 8;
555
1168
  static const int EDN_string_error = 0;
@@ -557,7 +1170,7 @@ static const int EDN_string_error = 0;
557
1170
  static const int EDN_string_en_main = 1;
558
1171
 
559
1172
 
560
- #line 305 "edn_parser.rl"
1173
+ #line 426 "edn_parser.rl"
561
1174
 
562
1175
 
563
1176
 
@@ -570,15 +1183,15 @@ const char* edn::Parser::parse_string(const char *p, const char *pe, Rice::Objec
570
1183
 
571
1184
  Rice::String s;
572
1185
 
573
- #line 574 "edn_parser.cc"
1186
+ #line 1187 "edn_parser.cc"
574
1187
  {
575
1188
  cs = EDN_string_start;
576
1189
  }
577
1190
 
578
- #line 317 "edn_parser.rl"
1191
+ #line 438 "edn_parser.rl"
579
1192
  p_save = p;
580
1193
 
581
- #line 582 "edn_parser.cc"
1194
+ #line 1195 "edn_parser.cc"
582
1195
  {
583
1196
  if ( p == pe )
584
1197
  goto _test_eof;
@@ -589,15 +1202,15 @@ case 1:
589
1202
  goto st2;
590
1203
  goto st0;
591
1204
  tr2:
592
- #line 60 "edn_parser.rl"
1205
+ #line 55 "edn_parser.rl"
593
1206
  {
594
1207
  std::stringstream s;
595
1208
  s << "unterminated " << EDN_TYPE;
596
1209
  error(__FUNCTION__, s.str());
597
- exit(-1);
1210
+ p--; {p++; cs = 0; goto _out;}
598
1211
  }
599
1212
  goto st0;
600
- #line 601 "edn_parser.cc"
1213
+ #line 1214 "edn_parser.cc"
601
1214
  st0:
602
1215
  cs = 0;
603
1216
  goto _out;
@@ -613,23 +1226,23 @@ case 2:
613
1226
  goto tr2;
614
1227
  goto st2;
615
1228
  tr3:
616
- #line 287 "edn_parser.rl"
1229
+ #line 409 "edn_parser.rl"
617
1230
  {
618
- if (!parse_byte_stream(p_save + 1, p, s)) {
1231
+ if (!Parser::parse_byte_stream(p_save + 1, p, s)) {
619
1232
  p--;
620
1233
  {p++; cs = 8; goto _out;}
621
1234
  } else {
622
1235
  {p = (( p + 1))-1;}
623
1236
  }
624
1237
  }
625
- #line 296 "edn_parser.rl"
1238
+ #line 418 "edn_parser.rl"
626
1239
  { p--; {p++; cs = 8; goto _out;} }
627
1240
  goto st8;
628
1241
  st8:
629
1242
  if ( ++p == pe )
630
1243
  goto _test_eof8;
631
1244
  case 8:
632
- #line 633 "edn_parser.cc"
1245
+ #line 1246 "edn_parser.cc"
633
1246
  goto st0;
634
1247
  st3:
635
1248
  if ( ++p == pe )
@@ -706,22 +1319,22 @@ case 7:
706
1319
  {
707
1320
  switch ( cs ) {
708
1321
  case 2:
709
- #line 60 "edn_parser.rl"
1322
+ #line 55 "edn_parser.rl"
710
1323
  {
711
1324
  std::stringstream s;
712
1325
  s << "unterminated " << EDN_TYPE;
713
1326
  error(__FUNCTION__, s.str());
714
- exit(-1);
1327
+ p--; {p++; cs = 0; goto _out;}
715
1328
  }
716
1329
  break;
717
- #line 718 "edn_parser.cc"
1330
+ #line 1331 "edn_parser.cc"
718
1331
  }
719
1332
  }
720
1333
 
721
1334
  _out: {}
722
1335
  }
723
1336
 
724
- #line 319 "edn_parser.rl"
1337
+ #line 440 "edn_parser.rl"
725
1338
 
726
1339
  if (cs >= EDN_string_first_final) {
727
1340
  o = s;
@@ -738,14 +1351,14 @@ case 7:
738
1351
  // decimal parsing grammar
739
1352
  //
740
1353
 
741
- #line 742 "edn_parser.cc"
1354
+ #line 1355 "edn_parser.cc"
742
1355
  static const int EDN_decimal_start = 1;
743
1356
  static const int EDN_decimal_first_final = 9;
744
1357
 
745
1358
  static const int EDN_decimal_en_main = 1;
746
1359
 
747
1360
 
748
- #line 347 "edn_parser.rl"
1361
+ #line 467 "edn_parser.rl"
749
1362
 
750
1363
 
751
1364
 
@@ -754,15 +1367,15 @@ const char* edn::Parser::parse_decimal(const char *p, const char *pe, Rice::Obje
754
1367
  int cs;
755
1368
 
756
1369
 
757
- #line 758 "edn_parser.cc"
1370
+ #line 1371 "edn_parser.cc"
758
1371
  {
759
1372
  cs = EDN_decimal_start;
760
1373
  }
761
1374
 
762
- #line 355 "edn_parser.rl"
1375
+ #line 475 "edn_parser.rl"
763
1376
  p_save = p;
764
1377
 
765
- #line 766 "edn_parser.cc"
1378
+ #line 1379 "edn_parser.cc"
766
1379
  {
767
1380
  if ( p == pe )
768
1381
  goto _test_eof;
@@ -770,6 +1383,7 @@ const char* edn::Parser::parse_decimal(const char *p, const char *pe, Rice::Obje
770
1383
  {
771
1384
  case 1:
772
1385
  switch( (*p) ) {
1386
+ case 43: goto st2;
773
1387
  case 45: goto st2;
774
1388
  case 48: goto st3;
775
1389
  }
@@ -815,14 +1429,14 @@ case 9:
815
1429
  goto st0;
816
1430
  goto tr10;
817
1431
  tr10:
818
- #line 340 "edn_parser.rl"
1432
+ #line 461 "edn_parser.rl"
819
1433
  { p--; {p++; cs = 10; goto _out;} }
820
1434
  goto st10;
821
1435
  st10:
822
1436
  if ( ++p == pe )
823
1437
  goto _test_eof10;
824
1438
  case 10:
825
- #line 826 "edn_parser.cc"
1439
+ #line 1440 "edn_parser.cc"
826
1440
  goto st0;
827
1441
  st4:
828
1442
  if ( ++p == pe )
@@ -938,11 +1552,10 @@ case 8:
938
1552
  _out: {}
939
1553
  }
940
1554
 
941
- #line 357 "edn_parser.rl"
1555
+ #line 477 "edn_parser.rl"
942
1556
 
943
1557
  if (cs >= EDN_decimal_first_final) {
944
- double value;
945
- o = Parser::buftotype<double>(p_save, p - p_save, value);
1558
+ o = Parser::float_to_ruby(p_save, p - p_save);
946
1559
  return p + 1;
947
1560
  }
948
1561
  else if (cs == EDN_decimal_en_main) {} // silence ragel warning
@@ -954,14 +1567,14 @@ case 8:
954
1567
  // integer parsing grammar
955
1568
  //
956
1569
 
957
- #line 958 "edn_parser.cc"
1570
+ #line 1571 "edn_parser.cc"
958
1571
  static const int EDN_integer_start = 1;
959
1572
  static const int EDN_integer_first_final = 3;
960
1573
 
961
1574
  static const int EDN_integer_en_main = 1;
962
1575
 
963
1576
 
964
- #line 380 "edn_parser.rl"
1577
+ #line 501 "edn_parser.rl"
965
1578
 
966
1579
 
967
1580
  const char* edn::Parser::parse_integer(const char *p, const char *pe, Rice::Object& o)
@@ -969,15 +1582,15 @@ const char* edn::Parser::parse_integer(const char *p, const char *pe, Rice::Obje
969
1582
  int cs;
970
1583
 
971
1584
 
972
- #line 973 "edn_parser.cc"
1585
+ #line 1586 "edn_parser.cc"
973
1586
  {
974
1587
  cs = EDN_integer_start;
975
1588
  }
976
1589
 
977
- #line 387 "edn_parser.rl"
1590
+ #line 508 "edn_parser.rl"
978
1591
  p_save = p;
979
1592
 
980
- #line 981 "edn_parser.cc"
1593
+ #line 1594 "edn_parser.cc"
981
1594
  {
982
1595
  if ( p == pe )
983
1596
  goto _test_eof;
@@ -985,6 +1598,7 @@ const char* edn::Parser::parse_integer(const char *p, const char *pe, Rice::Obje
985
1598
  {
986
1599
  case 1:
987
1600
  switch( (*p) ) {
1601
+ case 43: goto st2;
988
1602
  case 45: goto st2;
989
1603
  case 48: goto st3;
990
1604
  }
@@ -1007,8 +1621,10 @@ st3:
1007
1621
  if ( ++p == pe )
1008
1622
  goto _test_eof3;
1009
1623
  case 3:
1010
- if ( (*p) == 124 )
1011
- goto tr6;
1624
+ switch( (*p) ) {
1625
+ case 43: goto st0;
1626
+ case 45: goto st0;
1627
+ }
1012
1628
  if ( (*p) > 57 ) {
1013
1629
  if ( 77 <= (*p) && (*p) <= 78 )
1014
1630
  goto st5;
@@ -1016,24 +1632,23 @@ case 3:
1016
1632
  goto st0;
1017
1633
  goto tr4;
1018
1634
  tr4:
1019
- #line 377 "edn_parser.rl"
1635
+ #line 496 "edn_parser.rl"
1020
1636
  { p--; {p++; cs = 4; goto _out;} }
1021
1637
  goto st4;
1022
1638
  st4:
1023
1639
  if ( ++p == pe )
1024
1640
  goto _test_eof4;
1025
1641
  case 4:
1026
- #line 1027 "edn_parser.cc"
1642
+ #line 1643 "edn_parser.cc"
1027
1643
  goto st0;
1028
- tr6:
1029
- #line 377 "edn_parser.rl"
1030
- { p--; {p++; cs = 5; goto _out;} }
1031
- goto st5;
1032
1644
  st5:
1033
1645
  if ( ++p == pe )
1034
1646
  goto _test_eof5;
1035
1647
  case 5:
1036
- #line 1037 "edn_parser.cc"
1648
+ switch( (*p) ) {
1649
+ case 43: goto st0;
1650
+ case 45: goto st0;
1651
+ }
1037
1652
  if ( (*p) > 57 ) {
1038
1653
  if ( 77 <= (*p) && (*p) <= 78 )
1039
1654
  goto st0;
@@ -1044,8 +1659,10 @@ st6:
1044
1659
  if ( ++p == pe )
1045
1660
  goto _test_eof6;
1046
1661
  case 6:
1047
- if ( (*p) == 124 )
1048
- goto tr6;
1662
+ switch( (*p) ) {
1663
+ case 43: goto st0;
1664
+ case 45: goto st0;
1665
+ }
1049
1666
  if ( (*p) > 57 ) {
1050
1667
  if ( 77 <= (*p) && (*p) <= 78 )
1051
1668
  goto st5;
@@ -1063,11 +1680,10 @@ case 6:
1063
1680
  _out: {}
1064
1681
  }
1065
1682
 
1066
- #line 389 "edn_parser.rl"
1683
+ #line 510 "edn_parser.rl"
1067
1684
 
1068
1685
  if (cs >= EDN_integer_first_final) {
1069
- int value;
1070
- o = Parser::buftotype<int>(p_save, p - p_save, value);
1686
+ o = Parser::integer_to_ruby(p_save, p - p_save);
1071
1687
  return p + 1;
1072
1688
  }
1073
1689
  else if (cs == EDN_integer_en_main) {} // silence ragel warning
@@ -1082,13 +1698,13 @@ case 6:
1082
1698
  // sets the same array is used)
1083
1699
  //
1084
1700
 
1085
- #line 434 "edn_parser.rl"
1701
+ #line 554 "edn_parser.rl"
1086
1702
 
1087
1703
 
1088
1704
  //
1089
1705
  // vector-specific machine
1090
1706
 
1091
- #line 1092 "edn_parser.cc"
1707
+ #line 1708 "edn_parser.cc"
1092
1708
  static const int EDN_vector_start = 1;
1093
1709
  static const int EDN_vector_first_final = 4;
1094
1710
  static const int EDN_vector_error = 0;
@@ -1096,7 +1712,7 @@ static const int EDN_vector_error = 0;
1096
1712
  static const int EDN_vector_en_main = 1;
1097
1713
 
1098
1714
 
1099
- #line 446 "edn_parser.rl"
1715
+ #line 570 "edn_parser.rl"
1100
1716
 
1101
1717
 
1102
1718
 
@@ -1112,14 +1728,14 @@ const char* edn::Parser::parse_vector(const char *p, const char *pe, Rice::Objec
1112
1728
  Rice::Array arr;
1113
1729
 
1114
1730
 
1115
- #line 1116 "edn_parser.cc"
1731
+ #line 1732 "edn_parser.cc"
1116
1732
  {
1117
1733
  cs = EDN_vector_start;
1118
1734
  }
1119
1735
 
1120
- #line 461 "edn_parser.rl"
1736
+ #line 585 "edn_parser.rl"
1121
1737
 
1122
- #line 1123 "edn_parser.cc"
1738
+ #line 1739 "edn_parser.cc"
1123
1739
  {
1124
1740
  if ( p == pe )
1125
1741
  goto _test_eof;
@@ -1130,15 +1746,15 @@ case 1:
1130
1746
  goto st2;
1131
1747
  goto st0;
1132
1748
  tr2:
1133
- #line 60 "edn_parser.rl"
1749
+ #line 55 "edn_parser.rl"
1134
1750
  {
1135
1751
  std::stringstream s;
1136
1752
  s << "unterminated " << EDN_TYPE;
1137
1753
  error(__FUNCTION__, s.str());
1138
- exit(-1);
1754
+ p--; {p++; cs = 0; goto _out;}
1139
1755
  }
1140
1756
  goto st0;
1141
- #line 1142 "edn_parser.cc"
1757
+ #line 1758 "edn_parser.cc"
1142
1758
  st0:
1143
1759
  cs = 0;
1144
1760
  goto _out;
@@ -1147,7 +1763,7 @@ tr3:
1147
1763
  { line_number++; }
1148
1764
  goto st2;
1149
1765
  tr4:
1150
- #line 410 "edn_parser.rl"
1766
+ #line 530 "edn_parser.rl"
1151
1767
  {
1152
1768
  Rice::Object v;
1153
1769
  const char *np = parse_value(p, pe, v);
@@ -1171,7 +1787,7 @@ st2:
1171
1787
  if ( ++p == pe )
1172
1788
  goto _test_eof2;
1173
1789
  case 2:
1174
- #line 1175 "edn_parser.cc"
1790
+ #line 1791 "edn_parser.cc"
1175
1791
  switch( (*p) ) {
1176
1792
  case 10: goto tr3;
1177
1793
  case 32: goto st2;
@@ -1204,14 +1820,14 @@ case 3:
1204
1820
  goto tr3;
1205
1821
  goto st3;
1206
1822
  tr6:
1207
- #line 433 "edn_parser.rl"
1823
+ #line 553 "edn_parser.rl"
1208
1824
  { p--; {p++; cs = 4; goto _out;} }
1209
1825
  goto st4;
1210
1826
  st4:
1211
1827
  if ( ++p == pe )
1212
1828
  goto _test_eof4;
1213
1829
  case 4:
1214
- #line 1215 "edn_parser.cc"
1830
+ #line 1831 "edn_parser.cc"
1215
1831
  goto st0;
1216
1832
  }
1217
1833
  _test_eof2: cs = 2; goto _test_eof;
@@ -1223,22 +1839,23 @@ case 4:
1223
1839
  {
1224
1840
  switch ( cs ) {
1225
1841
  case 2:
1226
- #line 60 "edn_parser.rl"
1842
+ case 3:
1843
+ #line 55 "edn_parser.rl"
1227
1844
  {
1228
1845
  std::stringstream s;
1229
1846
  s << "unterminated " << EDN_TYPE;
1230
1847
  error(__FUNCTION__, s.str());
1231
- exit(-1);
1848
+ p--; {p++; cs = 0; goto _out;}
1232
1849
  }
1233
1850
  break;
1234
- #line 1235 "edn_parser.cc"
1851
+ #line 1852 "edn_parser.cc"
1235
1852
  }
1236
1853
  }
1237
1854
 
1238
1855
  _out: {}
1239
1856
  }
1240
1857
 
1241
- #line 462 "edn_parser.rl"
1858
+ #line 586 "edn_parser.rl"
1242
1859
 
1243
1860
  if (cs >= EDN_vector_first_final) {
1244
1861
  o = arr;
@@ -1258,7 +1875,7 @@ case 4:
1258
1875
  // list parsing machine
1259
1876
  //
1260
1877
 
1261
- #line 1262 "edn_parser.cc"
1878
+ #line 1879 "edn_parser.cc"
1262
1879
  static const int EDN_list_start = 1;
1263
1880
  static const int EDN_list_first_final = 4;
1264
1881
  static const int EDN_list_error = 0;
@@ -1266,7 +1883,7 @@ static const int EDN_list_error = 0;
1266
1883
  static const int EDN_list_en_main = 1;
1267
1884
 
1268
1885
 
1269
- #line 488 "edn_parser.rl"
1886
+ #line 615 "edn_parser.rl"
1270
1887
 
1271
1888
 
1272
1889
  //
@@ -1280,14 +1897,14 @@ const char* edn::Parser::parse_list(const char *p, const char *pe, Rice::Object&
1280
1897
  Rice::Array arr;
1281
1898
 
1282
1899
 
1283
- #line 1284 "edn_parser.cc"
1900
+ #line 1901 "edn_parser.cc"
1284
1901
  {
1285
1902
  cs = EDN_list_start;
1286
1903
  }
1287
1904
 
1288
- #line 501 "edn_parser.rl"
1905
+ #line 628 "edn_parser.rl"
1289
1906
 
1290
- #line 1291 "edn_parser.cc"
1907
+ #line 1908 "edn_parser.cc"
1291
1908
  {
1292
1909
  if ( p == pe )
1293
1910
  goto _test_eof;
@@ -1298,15 +1915,15 @@ case 1:
1298
1915
  goto st2;
1299
1916
  goto st0;
1300
1917
  tr2:
1301
- #line 60 "edn_parser.rl"
1918
+ #line 55 "edn_parser.rl"
1302
1919
  {
1303
1920
  std::stringstream s;
1304
1921
  s << "unterminated " << EDN_TYPE;
1305
1922
  error(__FUNCTION__, s.str());
1306
- exit(-1);
1923
+ p--; {p++; cs = 0; goto _out;}
1307
1924
  }
1308
1925
  goto st0;
1309
- #line 1310 "edn_parser.cc"
1926
+ #line 1927 "edn_parser.cc"
1310
1927
  st0:
1311
1928
  cs = 0;
1312
1929
  goto _out;
@@ -1315,7 +1932,7 @@ tr3:
1315
1932
  { line_number++; }
1316
1933
  goto st2;
1317
1934
  tr4:
1318
- #line 410 "edn_parser.rl"
1935
+ #line 530 "edn_parser.rl"
1319
1936
  {
1320
1937
  Rice::Object v;
1321
1938
  const char *np = parse_value(p, pe, v);
@@ -1339,7 +1956,7 @@ st2:
1339
1956
  if ( ++p == pe )
1340
1957
  goto _test_eof2;
1341
1958
  case 2:
1342
- #line 1343 "edn_parser.cc"
1959
+ #line 1960 "edn_parser.cc"
1343
1960
  switch( (*p) ) {
1344
1961
  case 10: goto tr3;
1345
1962
  case 32: goto st2;
@@ -1364,14 +1981,14 @@ case 2:
1364
1981
  goto tr4;
1365
1982
  goto tr2;
1366
1983
  tr5:
1367
- #line 433 "edn_parser.rl"
1984
+ #line 553 "edn_parser.rl"
1368
1985
  { p--; {p++; cs = 4; goto _out;} }
1369
1986
  goto st4;
1370
1987
  st4:
1371
1988
  if ( ++p == pe )
1372
1989
  goto _test_eof4;
1373
1990
  case 4:
1374
- #line 1375 "edn_parser.cc"
1991
+ #line 1992 "edn_parser.cc"
1375
1992
  goto st0;
1376
1993
  st3:
1377
1994
  if ( ++p == pe )
@@ -1390,22 +2007,23 @@ case 3:
1390
2007
  {
1391
2008
  switch ( cs ) {
1392
2009
  case 2:
1393
- #line 60 "edn_parser.rl"
2010
+ case 3:
2011
+ #line 55 "edn_parser.rl"
1394
2012
  {
1395
2013
  std::stringstream s;
1396
2014
  s << "unterminated " << EDN_TYPE;
1397
2015
  error(__FUNCTION__, s.str());
1398
- exit(-1);
2016
+ p--; {p++; cs = 0; goto _out;}
1399
2017
  }
1400
2018
  break;
1401
- #line 1402 "edn_parser.cc"
2019
+ #line 2020 "edn_parser.cc"
1402
2020
  }
1403
2021
  }
1404
2022
 
1405
2023
  _out: {}
1406
2024
  }
1407
2025
 
1408
- #line 502 "edn_parser.rl"
2026
+ #line 629 "edn_parser.rl"
1409
2027
 
1410
2028
  if (cs >= EDN_list_first_final) {
1411
2029
  o = arr;
@@ -1425,7 +2043,7 @@ case 3:
1425
2043
  // set parsing machine
1426
2044
  //
1427
2045
 
1428
- #line 1429 "edn_parser.cc"
2046
+ #line 2047 "edn_parser.cc"
1429
2047
  static const int EDN_set_start = 1;
1430
2048
  static const int EDN_set_first_final = 4;
1431
2049
  static const int EDN_set_error = 0;
@@ -1433,7 +2051,7 @@ static const int EDN_set_error = 0;
1433
2051
  static const int EDN_set_en_main = 1;
1434
2052
 
1435
2053
 
1436
- #line 530 "edn_parser.rl"
2054
+ #line 659 "edn_parser.rl"
1437
2055
 
1438
2056
 
1439
2057
  //
@@ -1448,14 +2066,14 @@ const char* edn::Parser::parse_set(const char *p, const char *pe, Rice::Object&
1448
2066
  Rice::Array arr; // store as a vector; then convert to a set once done
1449
2067
 
1450
2068
 
1451
- #line 1452 "edn_parser.cc"
2069
+ #line 2070 "edn_parser.cc"
1452
2070
  {
1453
2071
  cs = EDN_set_start;
1454
2072
  }
1455
2073
 
1456
- #line 544 "edn_parser.rl"
2074
+ #line 673 "edn_parser.rl"
1457
2075
 
1458
- #line 1459 "edn_parser.cc"
2076
+ #line 2077 "edn_parser.cc"
1459
2077
  {
1460
2078
  if ( p == pe )
1461
2079
  goto _test_eof;
@@ -1466,15 +2084,15 @@ case 1:
1466
2084
  goto st2;
1467
2085
  goto st0;
1468
2086
  tr2:
1469
- #line 60 "edn_parser.rl"
2087
+ #line 55 "edn_parser.rl"
1470
2088
  {
1471
2089
  std::stringstream s;
1472
2090
  s << "unterminated " << EDN_TYPE;
1473
2091
  error(__FUNCTION__, s.str());
1474
- exit(-1);
2092
+ p--; {p++; cs = 0; goto _out;}
1475
2093
  }
1476
2094
  goto st0;
1477
- #line 1478 "edn_parser.cc"
2095
+ #line 2096 "edn_parser.cc"
1478
2096
  st0:
1479
2097
  cs = 0;
1480
2098
  goto _out;
@@ -1483,7 +2101,7 @@ tr3:
1483
2101
  { line_number++; }
1484
2102
  goto st2;
1485
2103
  tr4:
1486
- #line 410 "edn_parser.rl"
2104
+ #line 530 "edn_parser.rl"
1487
2105
  {
1488
2106
  Rice::Object v;
1489
2107
  const char *np = parse_value(p, pe, v);
@@ -1507,7 +2125,7 @@ st2:
1507
2125
  if ( ++p == pe )
1508
2126
  goto _test_eof2;
1509
2127
  case 2:
1510
- #line 1511 "edn_parser.cc"
2128
+ #line 2129 "edn_parser.cc"
1511
2129
  switch( (*p) ) {
1512
2130
  case 10: goto tr3;
1513
2131
  case 32: goto st2;
@@ -1540,14 +2158,14 @@ case 3:
1540
2158
  goto tr3;
1541
2159
  goto st3;
1542
2160
  tr6:
1543
- #line 433 "edn_parser.rl"
2161
+ #line 553 "edn_parser.rl"
1544
2162
  { p--; {p++; cs = 4; goto _out;} }
1545
2163
  goto st4;
1546
2164
  st4:
1547
2165
  if ( ++p == pe )
1548
2166
  goto _test_eof4;
1549
2167
  case 4:
1550
- #line 1551 "edn_parser.cc"
2168
+ #line 2169 "edn_parser.cc"
1551
2169
  goto st0;
1552
2170
  }
1553
2171
  _test_eof2: cs = 2; goto _test_eof;
@@ -1559,25 +2177,26 @@ case 4:
1559
2177
  {
1560
2178
  switch ( cs ) {
1561
2179
  case 2:
1562
- #line 60 "edn_parser.rl"
2180
+ case 3:
2181
+ #line 55 "edn_parser.rl"
1563
2182
  {
1564
2183
  std::stringstream s;
1565
2184
  s << "unterminated " << EDN_TYPE;
1566
2185
  error(__FUNCTION__, s.str());
1567
- exit(-1);
2186
+ p--; {p++; cs = 0; goto _out;}
1568
2187
  }
1569
2188
  break;
1570
- #line 1571 "edn_parser.cc"
2189
+ #line 2190 "edn_parser.cc"
1571
2190
  }
1572
2191
  }
1573
2192
 
1574
2193
  _out: {}
1575
2194
  }
1576
2195
 
1577
- #line 545 "edn_parser.rl"
2196
+ #line 674 "edn_parser.rl"
1578
2197
 
1579
2198
  if (cs >= EDN_set_first_final) {
1580
- o = make_ruby_set(arr);
2199
+ o = Parser::make_ruby_set(arr);
1581
2200
  return p + 1;
1582
2201
  }
1583
2202
  else if (cs == EDN_set_error) {
@@ -1594,7 +2213,7 @@ case 4:
1594
2213
  // hash parsing
1595
2214
  //
1596
2215
 
1597
- #line 1598 "edn_parser.cc"
2216
+ #line 2217 "edn_parser.cc"
1598
2217
  static const int EDN_map_start = 1;
1599
2218
  static const int EDN_map_first_final = 4;
1600
2219
  static const int EDN_map_error = 0;
@@ -1602,7 +2221,7 @@ static const int EDN_map_error = 0;
1602
2221
  static const int EDN_map_en_main = 1;
1603
2222
 
1604
2223
 
1605
- #line 578 "edn_parser.rl"
2224
+ #line 709 "edn_parser.rl"
1606
2225
 
1607
2226
 
1608
2227
 
@@ -1614,14 +2233,14 @@ const char* edn::Parser::parse_map(const char *p, const char *pe, Rice::Object&
1614
2233
  int cs;
1615
2234
 
1616
2235
 
1617
- #line 1618 "edn_parser.cc"
2236
+ #line 2237 "edn_parser.cc"
1618
2237
  {
1619
2238
  cs = EDN_map_start;
1620
2239
  }
1621
2240
 
1622
- #line 589 "edn_parser.rl"
2241
+ #line 720 "edn_parser.rl"
1623
2242
 
1624
- #line 1625 "edn_parser.cc"
2243
+ #line 2244 "edn_parser.cc"
1625
2244
  {
1626
2245
  if ( p == pe )
1627
2246
  goto _test_eof;
@@ -1632,15 +2251,15 @@ case 1:
1632
2251
  goto st2;
1633
2252
  goto st0;
1634
2253
  tr2:
1635
- #line 60 "edn_parser.rl"
2254
+ #line 55 "edn_parser.rl"
1636
2255
  {
1637
2256
  std::stringstream s;
1638
2257
  s << "unterminated " << EDN_TYPE;
1639
2258
  error(__FUNCTION__, s.str());
1640
- exit(-1);
2259
+ p--; {p++; cs = 0; goto _out;}
1641
2260
  }
1642
2261
  goto st0;
1643
- #line 1644 "edn_parser.cc"
2262
+ #line 2263 "edn_parser.cc"
1644
2263
  st0:
1645
2264
  cs = 0;
1646
2265
  goto _out;
@@ -1649,7 +2268,7 @@ tr3:
1649
2268
  { line_number++; }
1650
2269
  goto st2;
1651
2270
  tr4:
1652
- #line 410 "edn_parser.rl"
2271
+ #line 530 "edn_parser.rl"
1653
2272
  {
1654
2273
  Rice::Object v;
1655
2274
  const char *np = parse_value(p, pe, v);
@@ -1673,7 +2292,7 @@ st2:
1673
2292
  if ( ++p == pe )
1674
2293
  goto _test_eof2;
1675
2294
  case 2:
1676
- #line 1677 "edn_parser.cc"
2295
+ #line 2296 "edn_parser.cc"
1677
2296
  switch( (*p) ) {
1678
2297
  case 10: goto tr3;
1679
2298
  case 32: goto st2;
@@ -1706,14 +2325,14 @@ case 3:
1706
2325
  goto tr3;
1707
2326
  goto st3;
1708
2327
  tr6:
1709
- #line 433 "edn_parser.rl"
2328
+ #line 553 "edn_parser.rl"
1710
2329
  { p--; {p++; cs = 4; goto _out;} }
1711
2330
  goto st4;
1712
2331
  st4:
1713
2332
  if ( ++p == pe )
1714
2333
  goto _test_eof4;
1715
2334
  case 4:
1716
- #line 1717 "edn_parser.cc"
2335
+ #line 2336 "edn_parser.cc"
1717
2336
  goto st0;
1718
2337
  }
1719
2338
  _test_eof2: cs = 2; goto _test_eof;
@@ -1725,22 +2344,23 @@ case 4:
1725
2344
  {
1726
2345
  switch ( cs ) {
1727
2346
  case 2:
1728
- #line 60 "edn_parser.rl"
2347
+ case 3:
2348
+ #line 55 "edn_parser.rl"
1729
2349
  {
1730
2350
  std::stringstream s;
1731
2351
  s << "unterminated " << EDN_TYPE;
1732
2352
  error(__FUNCTION__, s.str());
1733
- exit(-1);
2353
+ p--; {p++; cs = 0; goto _out;}
1734
2354
  }
1735
2355
  break;
1736
- #line 1737 "edn_parser.cc"
2356
+ #line 2357 "edn_parser.cc"
1737
2357
  }
1738
2358
  }
1739
2359
 
1740
2360
  _out: {}
1741
2361
  }
1742
2362
 
1743
- #line 590 "edn_parser.rl"
2363
+ #line 721 "edn_parser.rl"
1744
2364
 
1745
2365
  if (cs >= EDN_map_first_final) {
1746
2366
 
@@ -1771,68 +2391,52 @@ case 4:
1771
2391
  // tagged element parsing - #uuid, #inst, #{, #_
1772
2392
  //
1773
2393
 
1774
- #line 1775 "edn_parser.cc"
2394
+ #line 2395 "edn_parser.cc"
1775
2395
  static const int EDN_tagged_start = 1;
1776
- static const int EDN_tagged_first_final = 5;
2396
+ static const int EDN_tagged_first_final = 6;
1777
2397
  static const int EDN_tagged_error = 0;
1778
2398
 
1779
2399
  static const int EDN_tagged_en_main = 1;
1780
2400
 
1781
2401
 
1782
- #line 645 "edn_parser.rl"
2402
+ #line 771 "edn_parser.rl"
1783
2403
 
1784
2404
 
1785
2405
 
1786
2406
  const char* edn::Parser::parse_tagged(const char *p, const char *pe, Rice::Object& o)
1787
2407
  {
1788
- // std::cerr << __FUNCTION__ << " p '" << p << "'" << std::endl;
2408
+ // std::cerr << __FUNCTION__ << " p '" << p << "'" << std::endl;
1789
2409
  std::string sym_name;
1790
2410
  Rice::Object object;
1791
2411
 
1792
2412
  int cs;
1793
2413
 
1794
2414
 
1795
- #line 1796 "edn_parser.cc"
2415
+ #line 2416 "edn_parser.cc"
1796
2416
  {
1797
2417
  cs = EDN_tagged_start;
1798
2418
  }
1799
2419
 
1800
- #line 657 "edn_parser.rl"
2420
+ #line 783 "edn_parser.rl"
1801
2421
 
1802
- #line 1803 "edn_parser.cc"
2422
+ #line 2423 "edn_parser.cc"
1803
2423
  {
1804
2424
  if ( p == pe )
1805
2425
  goto _test_eof;
1806
2426
  switch ( cs )
1807
2427
  {
1808
2428
  case 1:
1809
- switch( (*p) ) {
1810
- case 33: goto tr0;
1811
- case 95: goto tr0;
1812
- }
1813
- if ( (*p) < 45 ) {
1814
- if ( (*p) > 38 ) {
1815
- if ( 42 <= (*p) && (*p) <= 43 )
1816
- goto tr0;
1817
- } else if ( (*p) >= 36 )
1818
- goto tr0;
1819
- } else if ( (*p) > 47 ) {
1820
- if ( (*p) < 65 ) {
1821
- if ( 60 <= (*p) && (*p) <= 63 )
1822
- goto tr0;
1823
- } else if ( (*p) > 90 ) {
1824
- if ( 97 <= (*p) && (*p) <= 122 )
1825
- goto tr0;
1826
- } else
2429
+ if ( (*p) > 90 ) {
2430
+ if ( 97 <= (*p) && (*p) <= 122 )
1827
2431
  goto tr0;
1828
- } else
2432
+ } else if ( (*p) >= 65 )
1829
2433
  goto tr0;
1830
2434
  goto st0;
1831
2435
  st0:
1832
2436
  cs = 0;
1833
2437
  goto _out;
1834
2438
  tr0:
1835
- #line 633 "edn_parser.rl"
2439
+ #line 759 "edn_parser.rl"
1836
2440
  {
1837
2441
  const char *np = parse_symbol(p, pe, sym_name);
1838
2442
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else { {p = (( np))-1;} }
@@ -1842,34 +2446,41 @@ st2:
1842
2446
  if ( ++p == pe )
1843
2447
  goto _test_eof2;
1844
2448
  case 2:
1845
- #line 1846 "edn_parser.cc"
2449
+ #line 2450 "edn_parser.cc"
1846
2450
  switch( (*p) ) {
1847
2451
  case 10: goto tr3;
1848
2452
  case 32: goto st3;
1849
- case 34: goto tr5;
1850
- case 40: goto tr5;
2453
+ case 35: goto tr5;
2454
+ case 40: goto tr4;
1851
2455
  case 44: goto st3;
2456
+ case 47: goto tr6;
1852
2457
  case 59: goto st4;
1853
- case 95: goto tr4;
1854
- case 123: goto tr5;
2458
+ case 95: goto tr5;
2459
+ case 123: goto tr4;
1855
2460
  }
1856
- if ( (*p) < 42 ) {
1857
- if ( (*p) > 13 ) {
1858
- if ( 33 <= (*p) && (*p) <= 38 )
2461
+ if ( (*p) < 45 ) {
2462
+ if ( (*p) < 33 ) {
2463
+ if ( 9 <= (*p) && (*p) <= 13 )
2464
+ goto st3;
2465
+ } else if ( (*p) > 38 ) {
2466
+ if ( 42 <= (*p) && (*p) <= 43 )
1859
2467
  goto tr4;
1860
- } else if ( (*p) >= 9 )
1861
- goto st3;
1862
- } else if ( (*p) > 63 ) {
1863
- if ( (*p) < 91 ) {
1864
- if ( 65 <= (*p) && (*p) <= 90 )
2468
+ } else
2469
+ goto tr4;
2470
+ } else if ( (*p) > 58 ) {
2471
+ if ( (*p) < 65 ) {
2472
+ if ( 60 <= (*p) && (*p) <= 63 )
1865
2473
  goto tr4;
1866
- } else if ( (*p) > 92 ) {
1867
- if ( 97 <= (*p) && (*p) <= 122 )
2474
+ } else if ( (*p) > 90 ) {
2475
+ if ( (*p) > 92 ) {
2476
+ if ( 97 <= (*p) && (*p) <= 122 )
2477
+ goto tr5;
2478
+ } else if ( (*p) >= 91 )
1868
2479
  goto tr4;
1869
2480
  } else
1870
2481
  goto tr5;
1871
2482
  } else
1872
- goto tr4;
2483
+ goto tr5;
1873
2484
  goto st0;
1874
2485
  tr3:
1875
2486
  #line 23 "edn_parser.rl"
@@ -1879,44 +2490,44 @@ st3:
1879
2490
  if ( ++p == pe )
1880
2491
  goto _test_eof3;
1881
2492
  case 3:
1882
- #line 1883 "edn_parser.cc"
2493
+ #line 2494 "edn_parser.cc"
1883
2494
  switch( (*p) ) {
1884
2495
  case 10: goto tr3;
1885
2496
  case 32: goto st3;
1886
- case 40: goto tr5;
2497
+ case 40: goto tr4;
1887
2498
  case 44: goto st3;
1888
2499
  case 59: goto st4;
1889
- case 95: goto tr5;
2500
+ case 95: goto tr4;
1890
2501
  }
1891
2502
  if ( (*p) < 42 ) {
1892
2503
  if ( (*p) > 13 ) {
1893
2504
  if ( 33 <= (*p) && (*p) <= 38 )
1894
- goto tr5;
2505
+ goto tr4;
1895
2506
  } else if ( (*p) >= 9 )
1896
2507
  goto st3;
1897
2508
  } else if ( (*p) > 63 ) {
1898
2509
  if ( (*p) > 92 ) {
1899
2510
  if ( 97 <= (*p) && (*p) <= 123 )
1900
- goto tr5;
2511
+ goto tr4;
1901
2512
  } else if ( (*p) >= 65 )
1902
- goto tr5;
2513
+ goto tr4;
1903
2514
  } else
1904
- goto tr5;
2515
+ goto tr4;
1905
2516
  goto st0;
1906
- tr5:
1907
- #line 637 "edn_parser.rl"
2517
+ tr4:
2518
+ #line 763 "edn_parser.rl"
1908
2519
  {
1909
2520
  const char *np = parse_value(p, pe, object);
1910
- if (np == NULL) { p--; {p++; cs = 5; goto _out;} } else { {p = (( np))-1;} }
2521
+ if (np == NULL) { p--; {p++; cs = 6; goto _out;} } else { {p = (( np))-1;} }
1911
2522
  }
1912
- #line 642 "edn_parser.rl"
1913
- { p--; {p++; cs = 5; goto _out;} }
1914
- goto st5;
1915
- st5:
2523
+ #line 768 "edn_parser.rl"
2524
+ { p--; {p++; cs = 6; goto _out;} }
2525
+ goto st6;
2526
+ st6:
1916
2527
  if ( ++p == pe )
1917
- goto _test_eof5;
1918
- case 5:
1919
- #line 1920 "edn_parser.cc"
2528
+ goto _test_eof6;
2529
+ case 6:
2530
+ #line 2531 "edn_parser.cc"
1920
2531
  goto st0;
1921
2532
  st4:
1922
2533
  if ( ++p == pe )
@@ -1925,63 +2536,181 @@ case 4:
1925
2536
  if ( (*p) == 10 )
1926
2537
  goto tr3;
1927
2538
  goto st4;
1928
- tr4:
1929
- #line 637 "edn_parser.rl"
2539
+ tr5:
2540
+ #line 763 "edn_parser.rl"
1930
2541
  {
1931
2542
  const char *np = parse_value(p, pe, object);
1932
- if (np == NULL) { p--; {p++; cs = 6; goto _out;} } else { {p = (( np))-1;} }
2543
+ if (np == NULL) { p--; {p++; cs = 7; goto _out;} } else { {p = (( np))-1;} }
1933
2544
  }
1934
- #line 642 "edn_parser.rl"
1935
- { p--; {p++; cs = 6; goto _out;} }
1936
- goto st6;
1937
- st6:
2545
+ #line 768 "edn_parser.rl"
2546
+ { p--; {p++; cs = 7; goto _out;} }
2547
+ goto st7;
2548
+ st7:
1938
2549
  if ( ++p == pe )
1939
- goto _test_eof6;
1940
- case 6:
1941
- #line 1942 "edn_parser.cc"
2550
+ goto _test_eof7;
2551
+ case 7:
2552
+ #line 2553 "edn_parser.cc"
1942
2553
  switch( (*p) ) {
1943
2554
  case 10: goto tr3;
1944
2555
  case 32: goto st3;
1945
- case 34: goto tr5;
1946
- case 40: goto tr5;
2556
+ case 35: goto tr5;
2557
+ case 40: goto tr4;
1947
2558
  case 44: goto st3;
2559
+ case 47: goto tr6;
1948
2560
  case 59: goto st4;
1949
- case 95: goto tr4;
1950
- case 123: goto tr5;
2561
+ case 95: goto tr5;
2562
+ case 123: goto tr4;
1951
2563
  }
1952
- if ( (*p) < 42 ) {
1953
- if ( (*p) > 13 ) {
1954
- if ( 33 <= (*p) && (*p) <= 38 )
2564
+ if ( (*p) < 45 ) {
2565
+ if ( (*p) < 33 ) {
2566
+ if ( 9 <= (*p) && (*p) <= 13 )
2567
+ goto st3;
2568
+ } else if ( (*p) > 38 ) {
2569
+ if ( 42 <= (*p) && (*p) <= 43 )
1955
2570
  goto tr4;
1956
- } else if ( (*p) >= 9 )
1957
- goto st3;
1958
- } else if ( (*p) > 63 ) {
1959
- if ( (*p) < 91 ) {
1960
- if ( 65 <= (*p) && (*p) <= 90 )
2571
+ } else
2572
+ goto tr4;
2573
+ } else if ( (*p) > 58 ) {
2574
+ if ( (*p) < 65 ) {
2575
+ if ( 60 <= (*p) && (*p) <= 63 )
1961
2576
  goto tr4;
1962
- } else if ( (*p) > 92 ) {
1963
- if ( 97 <= (*p) && (*p) <= 122 )
2577
+ } else if ( (*p) > 90 ) {
2578
+ if ( (*p) > 92 ) {
2579
+ if ( 97 <= (*p) && (*p) <= 122 )
2580
+ goto tr5;
2581
+ } else if ( (*p) >= 91 )
1964
2582
  goto tr4;
1965
2583
  } else
1966
2584
  goto tr5;
1967
2585
  } else
1968
- goto tr4;
2586
+ goto tr5;
2587
+ goto st0;
2588
+ tr6:
2589
+ #line 763 "edn_parser.rl"
2590
+ {
2591
+ const char *np = parse_value(p, pe, object);
2592
+ if (np == NULL) { p--; {p++; cs = 8; goto _out;} } else { {p = (( np))-1;} }
2593
+ }
2594
+ #line 768 "edn_parser.rl"
2595
+ { p--; {p++; cs = 8; goto _out;} }
2596
+ goto st8;
2597
+ st8:
2598
+ if ( ++p == pe )
2599
+ goto _test_eof8;
2600
+ case 8:
2601
+ #line 2602 "edn_parser.cc"
2602
+ if ( (*p) > 90 ) {
2603
+ if ( 97 <= (*p) && (*p) <= 122 )
2604
+ goto st5;
2605
+ } else if ( (*p) >= 65 )
2606
+ goto st5;
2607
+ goto st0;
2608
+ st5:
2609
+ if ( ++p == pe )
2610
+ goto _test_eof5;
2611
+ case 5:
2612
+ switch( (*p) ) {
2613
+ case 10: goto tr3;
2614
+ case 32: goto st3;
2615
+ case 35: goto tr8;
2616
+ case 40: goto tr4;
2617
+ case 44: goto st3;
2618
+ case 47: goto tr4;
2619
+ case 59: goto st4;
2620
+ case 95: goto tr8;
2621
+ case 123: goto tr4;
2622
+ }
2623
+ if ( (*p) < 45 ) {
2624
+ if ( (*p) < 33 ) {
2625
+ if ( 9 <= (*p) && (*p) <= 13 )
2626
+ goto st3;
2627
+ } else if ( (*p) > 38 ) {
2628
+ if ( 42 <= (*p) && (*p) <= 43 )
2629
+ goto tr4;
2630
+ } else
2631
+ goto tr4;
2632
+ } else if ( (*p) > 58 ) {
2633
+ if ( (*p) < 65 ) {
2634
+ if ( 60 <= (*p) && (*p) <= 63 )
2635
+ goto tr4;
2636
+ } else if ( (*p) > 90 ) {
2637
+ if ( (*p) > 92 ) {
2638
+ if ( 97 <= (*p) && (*p) <= 122 )
2639
+ goto tr8;
2640
+ } else if ( (*p) >= 91 )
2641
+ goto tr4;
2642
+ } else
2643
+ goto tr8;
2644
+ } else
2645
+ goto tr8;
2646
+ goto st0;
2647
+ tr8:
2648
+ #line 763 "edn_parser.rl"
2649
+ {
2650
+ const char *np = parse_value(p, pe, object);
2651
+ if (np == NULL) { p--; {p++; cs = 9; goto _out;} } else { {p = (( np))-1;} }
2652
+ }
2653
+ #line 768 "edn_parser.rl"
2654
+ { p--; {p++; cs = 9; goto _out;} }
2655
+ goto st9;
2656
+ st9:
2657
+ if ( ++p == pe )
2658
+ goto _test_eof9;
2659
+ case 9:
2660
+ #line 2661 "edn_parser.cc"
2661
+ switch( (*p) ) {
2662
+ case 10: goto tr3;
2663
+ case 32: goto st3;
2664
+ case 35: goto tr8;
2665
+ case 40: goto tr4;
2666
+ case 44: goto st3;
2667
+ case 47: goto tr4;
2668
+ case 59: goto st4;
2669
+ case 95: goto tr8;
2670
+ case 123: goto tr4;
2671
+ }
2672
+ if ( (*p) < 45 ) {
2673
+ if ( (*p) < 33 ) {
2674
+ if ( 9 <= (*p) && (*p) <= 13 )
2675
+ goto st3;
2676
+ } else if ( (*p) > 38 ) {
2677
+ if ( 42 <= (*p) && (*p) <= 43 )
2678
+ goto tr4;
2679
+ } else
2680
+ goto tr4;
2681
+ } else if ( (*p) > 58 ) {
2682
+ if ( (*p) < 65 ) {
2683
+ if ( 60 <= (*p) && (*p) <= 63 )
2684
+ goto tr4;
2685
+ } else if ( (*p) > 90 ) {
2686
+ if ( (*p) > 92 ) {
2687
+ if ( 97 <= (*p) && (*p) <= 122 )
2688
+ goto tr8;
2689
+ } else if ( (*p) >= 91 )
2690
+ goto tr4;
2691
+ } else
2692
+ goto tr8;
2693
+ } else
2694
+ goto tr8;
1969
2695
  goto st0;
1970
2696
  }
1971
2697
  _test_eof2: cs = 2; goto _test_eof;
1972
2698
  _test_eof3: cs = 3; goto _test_eof;
1973
- _test_eof5: cs = 5; goto _test_eof;
1974
- _test_eof4: cs = 4; goto _test_eof;
1975
2699
  _test_eof6: cs = 6; goto _test_eof;
2700
+ _test_eof4: cs = 4; goto _test_eof;
2701
+ _test_eof7: cs = 7; goto _test_eof;
2702
+ _test_eof8: cs = 8; goto _test_eof;
2703
+ _test_eof5: cs = 5; goto _test_eof;
2704
+ _test_eof9: cs = 9; goto _test_eof;
1976
2705
 
1977
2706
  _test_eof: {}
1978
2707
  _out: {}
1979
2708
  }
1980
2709
 
1981
- #line 658 "edn_parser.rl"
2710
+ #line 784 "edn_parser.rl"
1982
2711
 
1983
2712
  if (cs >= EDN_tagged_first_final) {
1984
- // std::cerr << __FUNCTION__ << " parse symbol name as '" << sym_name << "', value is: " << object << std::endl;
2713
+ //std::cerr << __FUNCTION__ << " parse symbol name as '" << sym_name << "', value is: " << object << std::endl;
1985
2714
  o = Parser::tagged_element(sym_name, object);
1986
2715
  return p + 1;
1987
2716
  }
@@ -1997,7 +2726,7 @@ case 6:
1997
2726
  // discard
1998
2727
  //
1999
2728
 
2000
- #line 2001 "edn_parser.cc"
2729
+ #line 2730 "edn_parser.cc"
2001
2730
  static const int EDN_discard_start = 1;
2002
2731
  static const int EDN_discard_first_final = 4;
2003
2732
  static const int EDN_discard_error = 0;
@@ -2005,7 +2734,7 @@ static const int EDN_discard_error = 0;
2005
2734
  static const int EDN_discard_en_main = 1;
2006
2735
 
2007
2736
 
2008
- #line 695 "edn_parser.rl"
2737
+ #line 821 "edn_parser.rl"
2009
2738
 
2010
2739
 
2011
2740
 
@@ -2016,14 +2745,14 @@ const char* edn::Parser::parse_discard(const char *p, const char *pe)
2016
2745
  Rice::Object o;
2017
2746
 
2018
2747
 
2019
- #line 2020 "edn_parser.cc"
2748
+ #line 2749 "edn_parser.cc"
2020
2749
  {
2021
2750
  cs = EDN_discard_start;
2022
2751
  }
2023
2752
 
2024
- #line 705 "edn_parser.rl"
2753
+ #line 831 "edn_parser.rl"
2025
2754
 
2026
- #line 2027 "edn_parser.cc"
2755
+ #line 2756 "edn_parser.cc"
2027
2756
  {
2028
2757
  if ( p == pe )
2029
2758
  goto _test_eof;
@@ -2044,7 +2773,7 @@ st2:
2044
2773
  if ( ++p == pe )
2045
2774
  goto _test_eof2;
2046
2775
  case 2:
2047
- #line 2048 "edn_parser.cc"
2776
+ #line 2777 "edn_parser.cc"
2048
2777
  switch( (*p) ) {
2049
2778
  case 10: goto tr2;
2050
2779
  case 32: goto st2;
@@ -2069,12 +2798,12 @@ case 2:
2069
2798
  goto tr3;
2070
2799
  goto st0;
2071
2800
  tr3:
2072
- #line 683 "edn_parser.rl"
2801
+ #line 809 "edn_parser.rl"
2073
2802
  {
2074
2803
  const char *np = parse_value(p, pe, o);
2075
2804
  if (np == NULL) { p--; {p++; cs = 4; goto _out;} } else { discard.push(o); {p = (( np))-1;} }
2076
2805
  }
2077
- #line 688 "edn_parser.rl"
2806
+ #line 814 "edn_parser.rl"
2078
2807
  {
2079
2808
  p--; {p++; cs = 4; goto _out;}
2080
2809
  }
@@ -2083,7 +2812,7 @@ st4:
2083
2812
  if ( ++p == pe )
2084
2813
  goto _test_eof4;
2085
2814
  case 4:
2086
- #line 2087 "edn_parser.cc"
2815
+ #line 2816 "edn_parser.cc"
2087
2816
  goto st0;
2088
2817
  st3:
2089
2818
  if ( ++p == pe )
@@ -2101,7 +2830,7 @@ case 3:
2101
2830
  _out: {}
2102
2831
  }
2103
2832
 
2104
- #line 706 "edn_parser.rl"
2833
+ #line 832 "edn_parser.rl"
2105
2834
 
2106
2835
  if (cs >= EDN_discard_first_final) {
2107
2836
  return p + 1;
@@ -2121,7 +2850,7 @@ case 3:
2121
2850
  // dispatch
2122
2851
  //
2123
2852
 
2124
- #line 2125 "edn_parser.cc"
2853
+ #line 2854 "edn_parser.cc"
2125
2854
  static const int EDN_dispatch_start = 1;
2126
2855
  static const int EDN_dispatch_first_final = 2;
2127
2856
  static const int EDN_dispatch_error = 0;
@@ -2129,7 +2858,7 @@ static const int EDN_dispatch_error = 0;
2129
2858
  static const int EDN_dispatch_en_main = 1;
2130
2859
 
2131
2860
 
2132
- #line 755 "edn_parser.rl"
2861
+ #line 878 "edn_parser.rl"
2133
2862
 
2134
2863
 
2135
2864
 
@@ -2139,14 +2868,14 @@ const char* edn::Parser::parse_dispatch(const char *p, const char *pe, Rice::Obj
2139
2868
  int cs;
2140
2869
 
2141
2870
 
2142
- #line 2143 "edn_parser.cc"
2871
+ #line 2872 "edn_parser.cc"
2143
2872
  {
2144
2873
  cs = EDN_dispatch_start;
2145
2874
  }
2146
2875
 
2147
- #line 764 "edn_parser.rl"
2876
+ #line 887 "edn_parser.rl"
2148
2877
 
2149
- #line 2150 "edn_parser.cc"
2878
+ #line 2879 "edn_parser.cc"
2150
2879
  {
2151
2880
  if ( p == pe )
2152
2881
  goto _test_eof;
@@ -2167,40 +2896,37 @@ st0:
2167
2896
  cs = 0;
2168
2897
  goto _out;
2169
2898
  tr0:
2170
- #line 742 "edn_parser.rl"
2899
+ #line 866 "edn_parser.rl"
2171
2900
  {
2172
- // std::cerr << "--- DISPATCH TAGGED: fpc is '" << fpc << "'" << std::endl;
2173
2901
  const char *np = parse_tagged(p, pe, o);
2174
2902
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2175
2903
  }
2176
- #line 748 "edn_parser.rl"
2904
+ #line 871 "edn_parser.rl"
2177
2905
  { p--; {p++; cs = 2; goto _out;} }
2178
2906
  goto st2;
2179
2907
  tr2:
2180
- #line 730 "edn_parser.rl"
2908
+ #line 856 "edn_parser.rl"
2181
2909
  {
2182
- // std::cerr << "--- DISPATCH DISCARD: fpc is '" << fpc << "'" << std::endl;
2183
2910
  const char *np = parse_discard(p, pe);
2184
2911
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2185
2912
  }
2186
- #line 748 "edn_parser.rl"
2913
+ #line 871 "edn_parser.rl"
2187
2914
  { p--; {p++; cs = 2; goto _out;} }
2188
2915
  goto st2;
2189
2916
  tr3:
2190
- #line 736 "edn_parser.rl"
2917
+ #line 861 "edn_parser.rl"
2191
2918
  {
2192
- // std::cerr << "--- DISPATCH SET: fpc is '" << fpc << "'" << std::endl;
2193
2919
  const char *np = parse_set(p, pe, o);
2194
2920
  if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2195
2921
  }
2196
- #line 748 "edn_parser.rl"
2922
+ #line 871 "edn_parser.rl"
2197
2923
  { p--; {p++; cs = 2; goto _out;} }
2198
2924
  goto st2;
2199
2925
  st2:
2200
2926
  if ( ++p == pe )
2201
2927
  goto _test_eof2;
2202
2928
  case 2:
2203
- #line 2204 "edn_parser.cc"
2929
+ #line 2930 "edn_parser.cc"
2204
2930
  goto st0;
2205
2931
  }
2206
2932
  _test_eof2: cs = 2; goto _test_eof;
@@ -2209,7 +2935,7 @@ case 2:
2209
2935
  _out: {}
2210
2936
  }
2211
2937
 
2212
- #line 765 "edn_parser.rl"
2938
+ #line 888 "edn_parser.rl"
2213
2939
 
2214
2940
  if (cs >= EDN_dispatch_first_final) {
2215
2941
  return p + 1;
@@ -2227,14 +2953,14 @@ case 2:
2227
2953
  // main parsing machine
2228
2954
  //
2229
2955
 
2230
- #line 2231 "edn_parser.cc"
2956
+ #line 2957 "edn_parser.cc"
2231
2957
  static const int EDN_start = 2;
2232
2958
  static const int EDN_error = 0;
2233
2959
 
2234
2960
  static const int EDN_en_main = 2;
2235
2961
 
2236
2962
 
2237
- #line 798 "edn_parser.rl"
2963
+ #line 921 "edn_parser.rl"
2238
2964
 
2239
2965
 
2240
2966
  //
@@ -2254,17 +2980,17 @@ Rice::Object edn::Parser::parse(const char* buf, std::size_t len)
2254
2980
  discard.pop();
2255
2981
 
2256
2982
 
2257
- #line 2258 "edn_parser.cc"
2983
+ #line 2984 "edn_parser.cc"
2258
2984
  {
2259
2985
  cs = EDN_start;
2260
2986
  }
2261
2987
 
2262
- #line 817 "edn_parser.rl"
2988
+ #line 940 "edn_parser.rl"
2263
2989
  p = &buf[0];
2264
2990
  pe = p + len;
2265
2991
  eof = pe; // eof defined in Parser class
2266
2992
 
2267
- #line 2268 "edn_parser.cc"
2993
+ #line 2994 "edn_parser.cc"
2268
2994
  {
2269
2995
  if ( p == pe )
2270
2996
  goto _test_eof;
@@ -2275,7 +3001,7 @@ tr1:
2275
3001
  { line_number++; }
2276
3002
  goto st2;
2277
3003
  tr4:
2278
- #line 787 "edn_parser.rl"
3004
+ #line 910 "edn_parser.rl"
2279
3005
  {
2280
3006
  const char* np = parse_value(p, pe, result);
2281
3007
  if (np == NULL) { {p = (( pe))-1;} {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
@@ -2285,7 +3011,7 @@ st2:
2285
3011
  if ( ++p == pe )
2286
3012
  goto _test_eof2;
2287
3013
  case 2:
2288
- #line 2289 "edn_parser.cc"
3014
+ #line 3015 "edn_parser.cc"
2289
3015
  switch( (*p) ) {
2290
3016
  case 10: goto tr1;
2291
3017
  case 32: goto st2;
@@ -2327,7 +3053,7 @@ case 1:
2327
3053
  _out: {}
2328
3054
  }
2329
3055
 
2330
- #line 821 "edn_parser.rl"
3056
+ #line 944 "edn_parser.rl"
2331
3057
 
2332
3058
  if (cs == EDN_error) {
2333
3059
  error(__FUNCTION__, *p);