edn_turbo 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 846fd6b6a142bea1696ae918087fc9ae2c89264b
4
- data.tar.gz: 0a6c9520a17d1cd2967c1f0e61efba2bfbb40fde
2
+ SHA256:
3
+ metadata.gz: 409d493aab7167c3bac13a53580bea45735c02fc1918f57fd5b386a390d43750
4
+ data.tar.gz: 3c9b3786db7a9b2f7732735898b3b78c7dfab041b3f11511d8866b7093629cf5
5
5
  SHA512:
6
- metadata.gz: 4c4a5d4d8357b9bcf773cc3cfdb66d191f0248326c8772ef15c2ff31904740d3b4df1bea8db54edf5a0817b0bb55446bd064b1bf25ad721cd46ee5df2f7171cb
7
- data.tar.gz: a4dc313919664ffd6881e9be561ec9453b77c78569ddb5726a7c8ef6e4c34ccaddab25385920cbcbd7ff811865cc8ae081fe58f880bae9fed179edce6f291c78
6
+ metadata.gz: a1b753f68eadd7e5466dd863606085dd8eeaa489c01e0ef5473ccb9e5562d70611ff35999db5263ffef42813a1404f118f26672482b36e7ca2e8fde50e96d187
7
+ data.tar.gz: d0ab9b94babb9c4d0293f270266963555e805edbaf09a28c55de59281fba52e6fb6cb0af189eecd4daa96029d254d5521d1fa916d3f91ff9e2c638b4cbc7c08b
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -0,0 +1,15 @@
1
+ # Change Log
2
+ All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/).
3
+
4
+ ## 0.6.0 - 2019-05-13
5
+ ### Changed
6
+ - switched from MiniTest to RSpec.
7
+ - replaced `NULL` with `nullptr`.
8
+ - replaced old-style casts.
9
+ - prohibit Parser copy and move ops.
10
+ - assigning a source that does not respond to `read` now throws
11
+ `ArgumentError` instead of `RuntimeError`.
12
+
13
+ ### Added
14
+ - initial version of docker configs for testing on Ubuntu.
15
+
@@ -0,0 +1,34 @@
1
+ FROM buildpack-deps:stretch
2
+ MAINTAINER github@digressed.net
3
+
4
+ ENV LC_ALL C.UTF-8
5
+
6
+ # Update Ubuntu Software repository
7
+ RUN apt-get update
8
+
9
+ # install dependencies & utils
10
+ RUN apt-get install -y \
11
+ libicu-dev \
12
+ curl \
13
+ libreadline-dev
14
+
15
+ # aliases, environment
16
+ RUN echo 'alias h="history"' >> /root/.bashrc
17
+ RUN echo 'alias be="bundle exec"' >> /root/.bashrc
18
+ ENV PATH "/root/.rbenv/bin:/root/.rbenv/shims:$PATH"
19
+
20
+ # install rbenv & ruby
21
+ RUN \curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -
22
+ RUN eval "$(rbenv init -)"
23
+
24
+ ENV RUBY_VERSION=2.6.3
25
+ RUN rbenv install ${RUBY_VERSION}
26
+ RUN rbenv global ${RUBY_VERSION}
27
+
28
+ # mute bundle warning about root user
29
+ RUN bundle config --global silence_root_warning 1
30
+
31
+ WORKDIR /gem
32
+
33
+ # cleanup
34
+ RUN rm -rf /var/lib/apt/lists/*
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) <year> <copyright holders>
3
+ Copyright (c) 2015-2019 Ed Porras
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,14 +1,13 @@
1
- edn_turbo 0.5.7
1
+ edn_turbo 0.6.0
2
2
  ===============
3
3
 
4
- Fast Ragel-based EDN parser for Ruby.
4
+ Fast (Ragel)[http://www.colm.net/open-source/ragel/]-based EDN parser for Ruby.
5
5
 
6
- `edn_turbo` is a parser plugin for
6
+ `edn_turbo` can be used as a parser plugin for
7
7
  [edn](https://github.com/relevance/edn-ruby). With a few exceptions
8
8
  `edn_turbo` provides the same functionality as the edn gem, but since
9
- the `edn_turbo` parser is implemented in C, it is an order of
10
- magintude faster.
11
-
9
+ the `edn_turbo` parser is implemented in C++, it is an order of
10
+ magnitude faster.
12
11
 
13
12
  Some quick sample runs comparing time output of file reads using `edn`
14
13
  and `edn_turbo` (see [issue 12](https://github.com/relevance/edn-ruby/issues/12)):
@@ -32,27 +31,24 @@ irb(main):008:0> Benchmark.realtime { 100000.times { EDN::read(s) } }
32
31
  => 2.866411
33
32
  ```
34
33
 
35
-
36
34
  Dependencies
37
35
  ============
38
36
 
37
+ Ruby 2.4 or greater as `edn_turbo` does not use the deprecated `Fixnum` or `Bignum`.
38
+
39
39
  - ruby gems:
40
40
  - [rake](http://rake.rubyforge.org)
41
41
  - [rake-compiler 1.0](http://rake-compiler.rubyforge.org)
42
42
  - [edn 1.1](https://github.com/relevance/edn-ruby)
43
+ - a C++-11 capable compiler.
43
44
  - [icu4c](http://icu-project.org/apiref/icu4c/)
44
45
 
45
-
46
46
  Notes:
47
47
  ------
48
48
 
49
49
  - `edn_turbo` uses a ragel-based parser but the generated .cc file is
50
50
  bundled so ragel should not need to be installed.
51
51
 
52
- - If the gem fails to install due to a compilation error, make sure you
53
- have `icu4c` installed. The reported gem install error doesn't make
54
- it clear this is the issue.
55
-
56
52
  Usage
57
53
  =====
58
54
 
@@ -110,13 +106,3 @@ Differences with edn gem
110
106
  `edn_turbo` reads `String` and core IO types using C-api calls.
111
107
  However, data from `StringIO` sources is extracted using `read()`
112
108
  calls into the ruby side.
113
-
114
- Known problems
115
- ==============
116
-
117
- v0.3.2:
118
-
119
- - Some unhandled corner cases with operators and spacing
120
- remain. `edn_turbo` handles things like `1 / 12` and `1/ 12` but
121
- parse errors occur with `1/12` and `1 /12` because it treats `/12`
122
- as an invalid symbol.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake/testtask'
2
4
  require 'rake/extensiontask'
3
5
  require 'rake/clean'
@@ -8,57 +10,58 @@ LIB_DIR = "lib/#{NAME}"
8
10
  EXT_BUNDLE = "#{LIB_DIR}/#{NAME}.#{RbConfig::CONFIG['DLEXT']}"
9
11
 
10
12
  EXT_PATH = "ext/#{NAME}"
11
- RAGEL_PARSER_SRC = "edn_parser.rl"
13
+ RAGEL_PARSER_SRC = 'edn_parser.rl'
12
14
  RAGEL_PARSER_SRC_PATH = "#{EXT_PATH}/#{RAGEL_PARSER_SRC}"
13
- GEN_CC_PARSER_SRC = "edn_parser.cc"
15
+ GEN_CC_PARSER_SRC = 'edn_parser.cc'
14
16
  GEN_CC_PARSER_SRC_PATH = "#{EXT_PATH}/#{GEN_CC_PARSER_SRC}"
15
17
 
16
18
  task :irb do
17
- sh "irb -I lib -r edn_turbo"
18
- sh "reset"
19
+ sh 'irb -I lib -r edn_turbo'
20
+ sh 'reset'
19
21
  end
20
22
 
21
- task :runthru => [:clean, :default, :test]
23
+ task runthru: %i[clean default test]
22
24
 
23
- Rake::ExtensionTask.new("#{NAME}") do |extension|
25
+ Rake::ExtensionTask.new(NAME) do |extension|
24
26
  extension.lib_dir = LIB_DIR
25
- extension.source_pattern = "*.{cc,h}"
27
+ extension.source_pattern = '*.{cc,h}'
26
28
  end
27
29
 
28
30
  task :chmod do
29
- File.chmod(0775, EXT_BUNDLE)
31
+ File.chmod(0o0775, EXT_BUNDLE)
30
32
  end
31
33
 
32
- CLEAN.include(["*.png", "*.gem"])
34
+ CLEAN.include(['*.png', '*.gem'])
33
35
 
34
36
  # ragel cc source generation
35
- task :ragel => GEN_CC_PARSER_SRC_PATH
37
+ task ragel: GEN_CC_PARSER_SRC_PATH
36
38
  file GEN_CC_PARSER_SRC_PATH => RAGEL_PARSER_SRC_PATH do
37
39
  cd EXT_PATH do
38
40
  sh "ragel -G2 -o #{GEN_CC_PARSER_SRC} #{RAGEL_PARSER_SRC}"
39
41
  src = File.read(GEN_CC_PARSER_SRC).gsub(/[ \t]+$/, '')
40
- File.open(GEN_CC_PARSER_SRC, "w") {|f| f.print src}
42
+ File.open(GEN_CC_PARSER_SRC, 'w') { |f| f.print src }
41
43
  end
42
44
  end
43
45
 
44
46
  # graph generation for testing machine output
45
- task :graph, [:machine] do |t, args|
46
- args.with_defaults(:machine => 'EDN_value')
47
- TMPFILE='/tmp/ragel_edn'
48
- MACHINE=args[:machine]
47
+ task :graph, [:machine] do |_t, args|
48
+ args.with_defaults(machine: 'EDN_value')
49
+ TMPFILE = '/tmp/ragel_edn'
50
+ MACHINE = args[:machine]
49
51
 
50
52
  # assumes graphviz is installed
51
- sh "ragel -Vp -S #{MACHINE} -o #{TMPFILE} #{EXT_PATH}/#{RAGEL_PARSER_SRC} && dot -Tpng #{TMPFILE} -o #{MACHINE}.png"
53
+ sh "ragel -Vp -S #{MACHINE} -o #{TMPFILE} #{EXT_PATH}/#{RAGEL_PARSER_SRC} && "\
54
+ "dot -Tpng #{TMPFILE} -o #{MACHINE}.png"
52
55
  end
53
56
 
54
- task :build => [:clean, :ragel, :compile, :chmod]
57
+ task build: [:clean, :ragel, :compile, :chmod]
55
58
 
56
59
  # add dependency to test task
57
- task :test => EXT_BUNDLE
60
+ task test: EXT_BUNDLE
58
61
 
59
62
  Rake::TestTask.new do |t|
60
63
  t.libs << 'test'
61
64
  t.test_files = FileList['test/test_output_diff.rb']
62
65
  end
63
66
 
64
- task :default => :compile
67
+ task default: :compile
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ if [[ $# -ne 1 ]]; then
6
+ RUBY_VERSION=2.6.3
7
+ else
8
+ RUBY_VERSION=$1
9
+ fi
10
+
11
+ docker build -t edn_turbo_image:$RUBY_VERSION .
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ docker-compose run edn_turbo /bin/bash
@@ -0,0 +1,10 @@
1
+ version: "3"
2
+ services:
3
+
4
+ edn_turbo:
5
+ image: edn_turbo_image:2.6.3
6
+ stdin_open: true
7
+ tty: true
8
+ volumes:
9
+ - ~/.bash_history:/root/.bash_history
10
+ - /Volumes/homes/ep/work/edn_turbo:/gem
@@ -1,5 +1,27 @@
1
1
 
2
2
  #line 1 "edn_parser.rl"
3
+ // The MIT License (MIT)
4
+
5
+ // Copyright (c) 2015-2019 Ed Porras
6
+
7
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ // of this software and associated documentation files (the "Software"), to deal
9
+ // in the Software without restriction, including without limitation the rights
10
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ // copies of the Software, and to permit persons to whom the Software is
12
+ // furnished to do so, subject to the following conditions:
13
+
14
+ // The above copyright notice and this permission notice shall be included in
15
+ // all copies or substantial portions of the Software.
16
+
17
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ // THE SOFTWARE.
24
+
3
25
  #include <iostream>
4
26
  #include <string>
5
27
  #include <sstream>
@@ -21,7 +43,7 @@
21
43
  //
22
44
 
23
45
 
24
- #line 59 "edn_parser.rl"
46
+ #line 81 "edn_parser.rl"
25
47
 
26
48
 
27
49
  // ============================================================
@@ -29,7 +51,7 @@
29
51
  //
30
52
 
31
53
 
32
- #line 33 "edn_parser.cc"
54
+ #line 55 "edn_parser.cc"
33
55
  static const int EDN_value_start = 1;
34
56
  static const int EDN_value_first_final = 2;
35
57
  static const int EDN_value_error = 0;
@@ -37,7 +59,7 @@ static const int EDN_value_error = 0;
37
59
  static const int EDN_value_en_main = 1;
38
60
 
39
61
 
40
- #line 175 "edn_parser.rl"
62
+ #line 197 "edn_parser.rl"
41
63
 
42
64
 
43
65
 
@@ -47,14 +69,14 @@ const char *edn::Parser::parse_value(const char *p, const char *pe, VALUE& v)
47
69
  int cs;
48
70
 
49
71
 
50
- #line 51 "edn_parser.cc"
72
+ #line 73 "edn_parser.cc"
51
73
  {
52
74
  cs = EDN_value_start;
53
75
  }
54
76
 
55
- #line 184 "edn_parser.rl"
77
+ #line 206 "edn_parser.rl"
56
78
 
57
- #line 58 "edn_parser.cc"
79
+ #line 80 "edn_parser.cc"
58
80
  {
59
81
  if ( p == pe )
60
82
  goto _test_eof;
@@ -97,44 +119,44 @@ st0:
97
119
  cs = 0;
98
120
  goto _out;
99
121
  tr0:
100
- #line 103 "edn_parser.rl"
122
+ #line 125 "edn_parser.rl"
101
123
  {
102
124
  // stand-alone operators *, +, -, etc.
103
125
  const char *np = parse_operator(p, pe, v);
104
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
126
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
105
127
  }
106
128
  goto st2;
107
129
  tr2:
108
- #line 71 "edn_parser.rl"
130
+ #line 93 "edn_parser.rl"
109
131
  {
110
132
  // string types within double-quotes
111
133
  const char *np = parse_string(p, pe, v);
112
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
134
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
113
135
  }
114
136
  goto st2;
115
137
  tr3:
116
- #line 155 "edn_parser.rl"
138
+ #line 177 "edn_parser.rl"
117
139
  {
118
140
  // handles tokens w/ leading # ("#_", "#{", and tagged elems)
119
141
  const char *np = parse_dispatch(p + 1, pe, v);
120
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
142
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
121
143
  }
122
144
  goto st2;
123
145
  tr4:
124
- #line 137 "edn_parser.rl"
146
+ #line 159 "edn_parser.rl"
125
147
  {
126
148
  // (
127
149
  const char *np = parse_list(p, pe, v);
128
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
150
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
129
151
  }
130
152
  goto st2;
131
153
  tr5:
132
- #line 83 "edn_parser.rl"
154
+ #line 105 "edn_parser.rl"
133
155
  {
134
156
  // tokens w/ leading digits: non-negative integers & decimals.
135
157
  // try to parse a decimal first
136
158
  const char *np = parse_decimal(p, pe, v);
137
- if (np == NULL) {
159
+ if (np == nullptr) {
138
160
  // if we can't, try to parse it as an int
139
161
  np = parse_integer(p, pe, v);
140
162
  }
@@ -151,20 +173,20 @@ tr5:
151
173
  }
152
174
  goto st2;
153
175
  tr6:
154
- #line 77 "edn_parser.rl"
176
+ #line 99 "edn_parser.rl"
155
177
  {
156
178
  // tokens with a leading ':'
157
179
  const char *np = parse_keyword(p, pe, v);
158
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
180
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
159
181
  }
160
182
  goto st2;
161
183
  tr7:
162
- #line 115 "edn_parser.rl"
184
+ #line 137 "edn_parser.rl"
163
185
  {
164
186
  // user identifiers and reserved keywords (true, false, nil)
165
187
  VALUE sym = Qnil;
166
188
  const char *np = parse_symbol(p, pe, sym);
167
- if (np == NULL) { {p = (( pe))-1;} } else {
189
+ if (np == nullptr) { {p = (( pe))-1;} } else {
168
190
  // parse_symbol will make 'sym' a ruby string
169
191
  if (std::strcmp(RSTRING_PTR(sym), "true") == 0) { v = Qtrue; }
170
192
  else if (std::strcmp(RSTRING_PTR(sym), "false") == 0) { v = Qfalse; }
@@ -177,44 +199,44 @@ tr7:
177
199
  }
178
200
  goto st2;
179
201
  tr8:
180
- #line 131 "edn_parser.rl"
202
+ #line 153 "edn_parser.rl"
181
203
  {
182
204
  // [
183
205
  const char *np = parse_vector(p, pe, v);
184
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
206
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
185
207
  }
186
208
  goto st2;
187
209
  tr9:
188
- #line 109 "edn_parser.rl"
210
+ #line 131 "edn_parser.rl"
189
211
  {
190
212
  // tokens w/ leading \ (escaped characters \newline, \c, etc.)
191
213
  const char *np = parse_esc_char(p, pe, v);
192
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
214
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
193
215
  }
194
216
  goto st2;
195
217
  tr10:
196
- #line 149 "edn_parser.rl"
218
+ #line 171 "edn_parser.rl"
197
219
  {
198
220
  // ^
199
221
  const char *np = parse_meta(p, pe);
200
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
222
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
201
223
  }
202
224
  goto st2;
203
225
  tr11:
204
- #line 143 "edn_parser.rl"
226
+ #line 165 "edn_parser.rl"
205
227
  {
206
228
  // {
207
229
  const char *np = parse_map(p, pe, v);
208
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
230
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
209
231
  }
210
232
  goto st2;
211
233
  st2:
212
234
  if ( ++p == pe )
213
235
  goto _test_eof2;
214
236
  case 2:
215
- #line 58 "edn_parser.rl"
237
+ #line 80 "edn_parser.rl"
216
238
  { p--; {p++; cs = 2; goto _out;} }
217
- #line 218 "edn_parser.cc"
239
+ #line 240 "edn_parser.cc"
218
240
  goto st0;
219
241
  }
220
242
  _test_eof2: cs = 2; goto _test_eof;
@@ -223,7 +245,7 @@ case 2:
223
245
  _out: {}
224
246
  }
225
247
 
226
- #line 185 "edn_parser.rl"
248
+ #line 207 "edn_parser.rl"
227
249
 
228
250
  if (cs >= EDN_value_first_final) {
229
251
  return p;
@@ -233,7 +255,7 @@ case 2:
233
255
  return pe;
234
256
  }
235
257
  else if (cs == EDN_value_en_main) {} // silence ragel warning
236
- return NULL;
258
+ return nullptr;
237
259
  }
238
260
 
239
261
 
@@ -245,7 +267,7 @@ case 2:
245
267
  // ascii range is found.
246
268
  //
247
269
 
248
- #line 249 "edn_parser.cc"
270
+ #line 271 "edn_parser.cc"
249
271
  static const int EDN_string_start = 1;
250
272
  static const int EDN_string_first_final = 8;
251
273
  static const int EDN_string_error = 0;
@@ -253,7 +275,7 @@ static const int EDN_string_error = 0;
253
275
  static const int EDN_string_en_main = 1;
254
276
 
255
277
 
256
- #line 230 "edn_parser.rl"
278
+ #line 252 "edn_parser.rl"
257
279
 
258
280
 
259
281
 
@@ -264,15 +286,15 @@ const char* edn::Parser::parse_string(const char *p, const char *pe, VALUE& v)
264
286
  bool encode = false;
265
287
 
266
288
 
267
- #line 268 "edn_parser.cc"
289
+ #line 290 "edn_parser.cc"
268
290
  {
269
291
  cs = EDN_string_start;
270
292
  }
271
293
 
272
- #line 240 "edn_parser.rl"
294
+ #line 262 "edn_parser.rl"
273
295
  const char* p_save = p;
274
296
 
275
- #line 276 "edn_parser.cc"
297
+ #line 298 "edn_parser.cc"
276
298
  {
277
299
  if ( p == pe )
278
300
  goto _test_eof;
@@ -286,7 +308,7 @@ st0:
286
308
  cs = 0;
287
309
  goto _out;
288
310
  tr2:
289
- #line 219 "edn_parser.rl"
311
+ #line 241 "edn_parser.rl"
290
312
  {
291
313
  encode = true;
292
314
  }
@@ -295,7 +317,7 @@ st2:
295
317
  if ( ++p == pe )
296
318
  goto _test_eof2;
297
319
  case 2:
298
- #line 299 "edn_parser.cc"
320
+ #line 321 "edn_parser.cc"
299
321
  switch( (*p) ) {
300
322
  case 34: goto tr3;
301
323
  case 92: goto tr4;
@@ -304,7 +326,7 @@ case 2:
304
326
  goto tr2;
305
327
  goto st2;
306
328
  tr3:
307
- #line 211 "edn_parser.rl"
329
+ #line 233 "edn_parser.rl"
308
330
  {
309
331
  if (edn::util::parse_byte_stream(p_save + 1, p, v, encode)) {
310
332
  {p = (( p + 1))-1;}
@@ -312,17 +334,17 @@ tr3:
312
334
  p--; {p++; cs = 8; goto _out;}
313
335
  }
314
336
  }
315
- #line 58 "edn_parser.rl"
337
+ #line 80 "edn_parser.rl"
316
338
  { p--; {p++; cs = 8; goto _out;} }
317
339
  goto st8;
318
340
  st8:
319
341
  if ( ++p == pe )
320
342
  goto _test_eof8;
321
343
  case 8:
322
- #line 323 "edn_parser.cc"
344
+ #line 345 "edn_parser.cc"
323
345
  goto st0;
324
346
  tr4:
325
- #line 219 "edn_parser.rl"
347
+ #line 241 "edn_parser.rl"
326
348
  {
327
349
  encode = true;
328
350
  }
@@ -331,7 +353,7 @@ st3:
331
353
  if ( ++p == pe )
332
354
  goto _test_eof3;
333
355
  case 3:
334
- #line 335 "edn_parser.cc"
356
+ #line 357 "edn_parser.cc"
335
357
  switch( (*p) ) {
336
358
  case 34: goto tr2;
337
359
  case 47: goto tr2;
@@ -345,7 +367,7 @@ case 3:
345
367
  }
346
368
  goto st2;
347
369
  tr5:
348
- #line 219 "edn_parser.rl"
370
+ #line 241 "edn_parser.rl"
349
371
  {
350
372
  encode = true;
351
373
  }
@@ -354,7 +376,7 @@ st4:
354
376
  if ( ++p == pe )
355
377
  goto _test_eof4;
356
378
  case 4:
357
- #line 358 "edn_parser.cc"
379
+ #line 380 "edn_parser.cc"
358
380
  if ( (*p) < 65 ) {
359
381
  if ( 48 <= (*p) && (*p) <= 57 )
360
382
  goto tr6;
@@ -365,7 +387,7 @@ case 4:
365
387
  goto tr6;
366
388
  goto st0;
367
389
  tr6:
368
- #line 219 "edn_parser.rl"
390
+ #line 241 "edn_parser.rl"
369
391
  {
370
392
  encode = true;
371
393
  }
@@ -374,7 +396,7 @@ st5:
374
396
  if ( ++p == pe )
375
397
  goto _test_eof5;
376
398
  case 5:
377
- #line 378 "edn_parser.cc"
399
+ #line 400 "edn_parser.cc"
378
400
  if ( (*p) < 65 ) {
379
401
  if ( 48 <= (*p) && (*p) <= 57 )
380
402
  goto tr7;
@@ -385,7 +407,7 @@ case 5:
385
407
  goto tr7;
386
408
  goto st0;
387
409
  tr7:
388
- #line 219 "edn_parser.rl"
410
+ #line 241 "edn_parser.rl"
389
411
  {
390
412
  encode = true;
391
413
  }
@@ -394,7 +416,7 @@ st6:
394
416
  if ( ++p == pe )
395
417
  goto _test_eof6;
396
418
  case 6:
397
- #line 398 "edn_parser.cc"
419
+ #line 420 "edn_parser.cc"
398
420
  if ( (*p) < 65 ) {
399
421
  if ( 48 <= (*p) && (*p) <= 57 )
400
422
  goto tr8;
@@ -405,7 +427,7 @@ case 6:
405
427
  goto tr8;
406
428
  goto st0;
407
429
  tr8:
408
- #line 219 "edn_parser.rl"
430
+ #line 241 "edn_parser.rl"
409
431
  {
410
432
  encode = true;
411
433
  }
@@ -414,7 +436,7 @@ st7:
414
436
  if ( ++p == pe )
415
437
  goto _test_eof7;
416
438
  case 7:
417
- #line 418 "edn_parser.cc"
439
+ #line 440 "edn_parser.cc"
418
440
  if ( (*p) < 65 ) {
419
441
  if ( 48 <= (*p) && (*p) <= 57 )
420
442
  goto tr2;
@@ -438,7 +460,7 @@ case 7:
438
460
  {
439
461
  switch ( cs ) {
440
462
  case 2:
441
- #line 51 "edn_parser.rl"
463
+ #line 73 "edn_parser.rl"
442
464
  {
443
465
  std::stringstream s;
444
466
  s << "unterminated " << EDN_TYPE;
@@ -446,14 +468,14 @@ case 7:
446
468
  p--; {p++; cs = 0; goto _out;}
447
469
  }
448
470
  break;
449
- #line 450 "edn_parser.cc"
471
+ #line 472 "edn_parser.cc"
450
472
  }
451
473
  }
452
474
 
453
475
  _out: {}
454
476
  }
455
477
 
456
- #line 242 "edn_parser.rl"
478
+ #line 264 "edn_parser.rl"
457
479
 
458
480
  if (cs >= EDN_string_first_final) {
459
481
  return p + 1;
@@ -462,7 +484,7 @@ case 7:
462
484
  return pe;
463
485
  }
464
486
  else if (cs == EDN_string_en_main) {} // silence ragel warning
465
- return NULL;
487
+ return nullptr;
466
488
  }
467
489
 
468
490
 
@@ -471,7 +493,7 @@ case 7:
471
493
  // keyword parsing
472
494
  //
473
495
 
474
- #line 475 "edn_parser.cc"
496
+ #line 497 "edn_parser.cc"
475
497
  static const int EDN_keyword_start = 1;
476
498
  static const int EDN_keyword_first_final = 3;
477
499
  static const int EDN_keyword_error = 0;
@@ -479,7 +501,7 @@ static const int EDN_keyword_error = 0;
479
501
  static const int EDN_keyword_en_main = 1;
480
502
 
481
503
 
482
- #line 272 "edn_parser.rl"
504
+ #line 294 "edn_parser.rl"
483
505
 
484
506
 
485
507
 
@@ -488,15 +510,15 @@ const char* edn::Parser::parse_keyword(const char *p, const char *pe, VALUE& v)
488
510
  int cs;
489
511
 
490
512
 
491
- #line 492 "edn_parser.cc"
513
+ #line 514 "edn_parser.cc"
492
514
  {
493
515
  cs = EDN_keyword_start;
494
516
  }
495
517
 
496
- #line 280 "edn_parser.rl"
518
+ #line 302 "edn_parser.rl"
497
519
  const char* p_save = p;
498
520
 
499
- #line 500 "edn_parser.cc"
521
+ #line 522 "edn_parser.cc"
500
522
  {
501
523
  if ( p == pe )
502
524
  goto _test_eof;
@@ -563,14 +585,14 @@ case 3:
563
585
  goto st3;
564
586
  goto tr3;
565
587
  tr3:
566
- #line 58 "edn_parser.rl"
588
+ #line 80 "edn_parser.rl"
567
589
  { p--; {p++; cs = 4; goto _out;} }
568
590
  goto st4;
569
591
  st4:
570
592
  if ( ++p == pe )
571
593
  goto _test_eof4;
572
594
  case 4:
573
- #line 574 "edn_parser.cc"
595
+ #line 596 "edn_parser.cc"
574
596
  goto st0;
575
597
  st5:
576
598
  if ( ++p == pe )
@@ -609,7 +631,7 @@ case 5:
609
631
  _out: {}
610
632
  }
611
633
 
612
- #line 282 "edn_parser.rl"
634
+ #line 304 "edn_parser.rl"
613
635
 
614
636
  if (cs >= EDN_keyword_first_final) {
615
637
  std::string buf;
@@ -624,7 +646,7 @@ case 5:
624
646
  return pe;
625
647
  }
626
648
  else if (cs == EDN_keyword_en_main) {} // silence ragel warning
627
- return NULL;
649
+ return nullptr;
628
650
  }
629
651
 
630
652
 
@@ -633,14 +655,14 @@ case 5:
633
655
  // decimal parsing machine
634
656
  //
635
657
 
636
- #line 637 "edn_parser.cc"
658
+ #line 659 "edn_parser.cc"
637
659
  static const int EDN_decimal_start = 1;
638
660
  static const int EDN_decimal_first_final = 9;
639
661
 
640
662
  static const int EDN_decimal_en_main = 1;
641
663
 
642
664
 
643
- #line 315 "edn_parser.rl"
665
+ #line 337 "edn_parser.rl"
644
666
 
645
667
 
646
668
 
@@ -649,15 +671,15 @@ const char* edn::Parser::parse_decimal(const char *p, const char *pe, VALUE& v)
649
671
  int cs;
650
672
 
651
673
 
652
- #line 653 "edn_parser.cc"
674
+ #line 675 "edn_parser.cc"
653
675
  {
654
676
  cs = EDN_decimal_start;
655
677
  }
656
678
 
657
- #line 323 "edn_parser.rl"
679
+ #line 345 "edn_parser.rl"
658
680
  const char* p_save = p;
659
681
 
660
- #line 661 "edn_parser.cc"
682
+ #line 683 "edn_parser.cc"
661
683
  {
662
684
  if ( p == pe )
663
685
  goto _test_eof;
@@ -711,14 +733,14 @@ case 9:
711
733
  goto st0;
712
734
  goto tr10;
713
735
  tr10:
714
- #line 58 "edn_parser.rl"
736
+ #line 80 "edn_parser.rl"
715
737
  { p--; {p++; cs = 10; goto _out;} }
716
738
  goto st10;
717
739
  st10:
718
740
  if ( ++p == pe )
719
741
  goto _test_eof10;
720
742
  case 10:
721
- #line 722 "edn_parser.cc"
743
+ #line 744 "edn_parser.cc"
722
744
  goto st0;
723
745
  st4:
724
746
  if ( ++p == pe )
@@ -834,14 +856,14 @@ case 8:
834
856
  _out: {}
835
857
  }
836
858
 
837
- #line 325 "edn_parser.rl"
859
+ #line 347 "edn_parser.rl"
838
860
 
839
861
  if (cs >= EDN_decimal_first_final) {
840
862
  v = edn::util::float_to_ruby(p_save, p - p_save);
841
863
  return p + 1;
842
864
  }
843
865
  else if (cs == EDN_decimal_en_main) {} // silence ragel warning
844
- return NULL;
866
+ return nullptr;
845
867
  }
846
868
 
847
869
 
@@ -849,14 +871,14 @@ case 8:
849
871
  // integer parsing machine - M suffix will return a BigNum
850
872
  //
851
873
 
852
- #line 853 "edn_parser.cc"
874
+ #line 875 "edn_parser.cc"
853
875
  static const int EDN_integer_start = 1;
854
876
  static const int EDN_integer_first_final = 3;
855
877
 
856
878
  static const int EDN_integer_en_main = 1;
857
879
 
858
880
 
859
- #line 348 "edn_parser.rl"
881
+ #line 370 "edn_parser.rl"
860
882
 
861
883
 
862
884
  const char* edn::Parser::parse_integer(const char *p, const char *pe, VALUE& v)
@@ -864,15 +886,15 @@ const char* edn::Parser::parse_integer(const char *p, const char *pe, VALUE& v)
864
886
  int cs;
865
887
 
866
888
 
867
- #line 868 "edn_parser.cc"
889
+ #line 890 "edn_parser.cc"
868
890
  {
869
891
  cs = EDN_integer_start;
870
892
  }
871
893
 
872
- #line 355 "edn_parser.rl"
894
+ #line 377 "edn_parser.rl"
873
895
  const char* p_save = p;
874
896
 
875
- #line 876 "edn_parser.cc"
897
+ #line 898 "edn_parser.cc"
876
898
  {
877
899
  if ( p == pe )
878
900
  goto _test_eof;
@@ -914,14 +936,14 @@ case 3:
914
936
  goto st0;
915
937
  goto tr4;
916
938
  tr4:
917
- #line 58 "edn_parser.rl"
939
+ #line 80 "edn_parser.rl"
918
940
  { p--; {p++; cs = 4; goto _out;} }
919
941
  goto st4;
920
942
  st4:
921
943
  if ( ++p == pe )
922
944
  goto _test_eof4;
923
945
  case 4:
924
- #line 925 "edn_parser.cc"
946
+ #line 947 "edn_parser.cc"
925
947
  goto st0;
926
948
  st5:
927
949
  if ( ++p == pe )
@@ -962,14 +984,14 @@ case 6:
962
984
  _out: {}
963
985
  }
964
986
 
965
- #line 357 "edn_parser.rl"
987
+ #line 379 "edn_parser.rl"
966
988
 
967
989
  if (cs >= EDN_integer_first_final) {
968
990
  v = edn::util::integer_to_ruby(p_save, p - p_save);
969
991
  return p + 1;
970
992
  }
971
993
  else if (cs == EDN_integer_en_main) {} // silence ragel warning
972
- return NULL;
994
+ return nullptr;
973
995
  }
974
996
 
975
997
 
@@ -982,7 +1004,7 @@ case 6:
982
1004
  // 3. stand-alone operators: +, -, /, *, etc.
983
1005
  //
984
1006
 
985
- #line 986 "edn_parser.cc"
1007
+ #line 1008 "edn_parser.cc"
986
1008
  static const int EDN_operator_start = 1;
987
1009
  static const int EDN_operator_first_final = 3;
988
1010
  static const int EDN_operator_error = 0;
@@ -990,7 +1012,7 @@ static const int EDN_operator_error = 0;
990
1012
  static const int EDN_operator_en_main = 1;
991
1013
 
992
1014
 
993
- #line 431 "edn_parser.rl"
1015
+ #line 453 "edn_parser.rl"
994
1016
 
995
1017
 
996
1018
 
@@ -999,15 +1021,15 @@ const char* edn::Parser::parse_operator(const char *p, const char *pe, VALUE& v)
999
1021
  int cs;
1000
1022
 
1001
1023
 
1002
- #line 1003 "edn_parser.cc"
1024
+ #line 1025 "edn_parser.cc"
1003
1025
  {
1004
1026
  cs = EDN_operator_start;
1005
1027
  }
1006
1028
 
1007
- #line 439 "edn_parser.rl"
1029
+ #line 461 "edn_parser.rl"
1008
1030
  const char* p_save = p;
1009
1031
 
1010
- #line 1011 "edn_parser.cc"
1032
+ #line 1033 "edn_parser.cc"
1011
1033
  {
1012
1034
  if ( p == pe )
1013
1035
  goto _test_eof;
@@ -1060,84 +1082,84 @@ case 3:
1060
1082
  goto tr9;
1061
1083
  goto tr6;
1062
1084
  tr6:
1063
- #line 415 "edn_parser.rl"
1085
+ #line 437 "edn_parser.rl"
1064
1086
  {
1065
1087
  // stand-alone operators (-, +, /, ... etc)
1066
1088
  char op[2] = { *p_save, 0 };
1067
1089
  VALUE sym = rb_str_new2(op);
1068
1090
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1069
1091
  }
1070
- #line 58 "edn_parser.rl"
1092
+ #line 80 "edn_parser.rl"
1071
1093
  { p--; {p++; cs = 4; goto _out;} }
1072
1094
  goto st4;
1073
1095
  tr11:
1074
- #line 58 "edn_parser.rl"
1096
+ #line 80 "edn_parser.rl"
1075
1097
  { p--; {p++; cs = 4; goto _out;} }
1076
1098
  goto st4;
1077
1099
  tr17:
1078
- #line 381 "edn_parser.rl"
1100
+ #line 403 "edn_parser.rl"
1079
1101
  {
1080
1102
  // parse a symbol including the leading operator (-, +, .)
1081
1103
  VALUE sym = Qnil;
1082
1104
  const char *np = parse_symbol(p_save, pe, sym);
1083
- if (np == NULL) { {p = (( pe))-1;} } else {
1105
+ if (np == nullptr) { {p = (( pe))-1;} } else {
1084
1106
  if (sym != Qnil)
1085
1107
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1086
1108
  {p = (( np))-1;}
1087
1109
  }
1088
1110
  }
1089
- #line 58 "edn_parser.rl"
1111
+ #line 80 "edn_parser.rl"
1090
1112
  { p--; {p++; cs = 4; goto _out;} }
1091
1113
  goto st4;
1092
1114
  st4:
1093
1115
  if ( ++p == pe )
1094
1116
  goto _test_eof4;
1095
1117
  case 4:
1096
- #line 1097 "edn_parser.cc"
1118
+ #line 1119 "edn_parser.cc"
1097
1119
  goto st0;
1098
1120
  tr5:
1099
- #line 25 "edn_parser.rl"
1121
+ #line 47 "edn_parser.rl"
1100
1122
  { line_number++; }
1101
1123
  goto st5;
1102
1124
  tr7:
1103
- #line 415 "edn_parser.rl"
1125
+ #line 437 "edn_parser.rl"
1104
1126
  {
1105
1127
  // stand-alone operators (-, +, /, ... etc)
1106
1128
  char op[2] = { *p_save, 0 };
1107
1129
  VALUE sym = rb_str_new2(op);
1108
1130
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1109
1131
  }
1110
- #line 58 "edn_parser.rl"
1132
+ #line 80 "edn_parser.rl"
1111
1133
  { p--; {p++; cs = 5; goto _out;} }
1112
1134
  goto st5;
1113
1135
  tr8:
1114
- #line 415 "edn_parser.rl"
1136
+ #line 437 "edn_parser.rl"
1115
1137
  {
1116
1138
  // stand-alone operators (-, +, /, ... etc)
1117
1139
  char op[2] = { *p_save, 0 };
1118
1140
  VALUE sym = rb_str_new2(op);
1119
1141
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1120
1142
  }
1121
- #line 25 "edn_parser.rl"
1143
+ #line 47 "edn_parser.rl"
1122
1144
  { line_number++; }
1123
- #line 58 "edn_parser.rl"
1145
+ #line 80 "edn_parser.rl"
1124
1146
  { p--; {p++; cs = 5; goto _out;} }
1125
1147
  goto st5;
1126
1148
  tr12:
1127
- #line 58 "edn_parser.rl"
1149
+ #line 80 "edn_parser.rl"
1128
1150
  { p--; {p++; cs = 5; goto _out;} }
1129
1151
  goto st5;
1130
1152
  tr13:
1131
- #line 25 "edn_parser.rl"
1153
+ #line 47 "edn_parser.rl"
1132
1154
  { line_number++; }
1133
- #line 58 "edn_parser.rl"
1155
+ #line 80 "edn_parser.rl"
1134
1156
  { p--; {p++; cs = 5; goto _out;} }
1135
1157
  goto st5;
1136
1158
  st5:
1137
1159
  if ( ++p == pe )
1138
1160
  goto _test_eof5;
1139
1161
  case 5:
1140
- #line 1141 "edn_parser.cc"
1162
+ #line 1163 "edn_parser.cc"
1141
1163
  switch( (*p) ) {
1142
1164
  case 10: goto tr13;
1143
1165
  case 32: goto tr12;
@@ -1162,25 +1184,25 @@ case 5:
1162
1184
  goto st0;
1163
1185
  goto tr11;
1164
1186
  tr10:
1165
- #line 415 "edn_parser.rl"
1187
+ #line 437 "edn_parser.rl"
1166
1188
  {
1167
1189
  // stand-alone operators (-, +, /, ... etc)
1168
1190
  char op[2] = { *p_save, 0 };
1169
1191
  VALUE sym = rb_str_new2(op);
1170
1192
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1171
1193
  }
1172
- #line 58 "edn_parser.rl"
1194
+ #line 80 "edn_parser.rl"
1173
1195
  { p--; {p++; cs = 6; goto _out;} }
1174
1196
  goto st6;
1175
1197
  tr14:
1176
- #line 58 "edn_parser.rl"
1198
+ #line 80 "edn_parser.rl"
1177
1199
  { p--; {p++; cs = 6; goto _out;} }
1178
1200
  goto st6;
1179
1201
  st6:
1180
1202
  if ( ++p == pe )
1181
1203
  goto _test_eof6;
1182
1204
  case 6:
1183
- #line 1184 "edn_parser.cc"
1205
+ #line 1206 "edn_parser.cc"
1184
1206
  if ( (*p) == 10 )
1185
1207
  goto tr5;
1186
1208
  goto st2;
@@ -1192,12 +1214,12 @@ case 2:
1192
1214
  goto tr5;
1193
1215
  goto st2;
1194
1216
  tr9:
1195
- #line 381 "edn_parser.rl"
1217
+ #line 403 "edn_parser.rl"
1196
1218
  {
1197
1219
  // parse a symbol including the leading operator (-, +, .)
1198
1220
  VALUE sym = Qnil;
1199
1221
  const char *np = parse_symbol(p_save, pe, sym);
1200
- if (np == NULL) { {p = (( pe))-1;} } else {
1222
+ if (np == nullptr) { {p = (( pe))-1;} } else {
1201
1223
  if (sym != Qnil)
1202
1224
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1203
1225
  {p = (( np))-1;}
@@ -1205,7 +1227,7 @@ tr9:
1205
1227
  }
1206
1228
  goto st7;
1207
1229
  tr16:
1208
- #line 392 "edn_parser.rl"
1230
+ #line 414 "edn_parser.rl"
1209
1231
  {
1210
1232
  // parse a number with the leading symbol - this is slightly
1211
1233
  // different than the one within EDN_value since it includes
@@ -1213,7 +1235,7 @@ tr16:
1213
1235
  //
1214
1236
  // try to parse a decimal first
1215
1237
  const char *np = parse_decimal(p_save, pe, v);
1216
- if (np == NULL) {
1238
+ if (np == nullptr) {
1217
1239
  // if we can't, try to parse it as an int
1218
1240
  np = parse_integer(p_save, pe, v);
1219
1241
  }
@@ -1233,7 +1255,7 @@ st7:
1233
1255
  if ( ++p == pe )
1234
1256
  goto _test_eof7;
1235
1257
  case 7:
1236
- #line 1237 "edn_parser.cc"
1258
+ #line 1259 "edn_parser.cc"
1237
1259
  switch( (*p) ) {
1238
1260
  case 33: goto st0;
1239
1261
  case 95: goto st0;
@@ -1316,12 +1338,12 @@ case 9:
1316
1338
  goto tr18;
1317
1339
  goto tr17;
1318
1340
  tr18:
1319
- #line 381 "edn_parser.rl"
1341
+ #line 403 "edn_parser.rl"
1320
1342
  {
1321
1343
  // parse a symbol including the leading operator (-, +, .)
1322
1344
  VALUE sym = Qnil;
1323
1345
  const char *np = parse_symbol(p_save, pe, sym);
1324
- if (np == NULL) { {p = (( pe))-1;} } else {
1346
+ if (np == nullptr) { {p = (( pe))-1;} } else {
1325
1347
  if (sym != Qnil)
1326
1348
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1327
1349
  {p = (( np))-1;}
@@ -1332,7 +1354,7 @@ st10:
1332
1354
  if ( ++p == pe )
1333
1355
  goto _test_eof10;
1334
1356
  case 10:
1335
- #line 1336 "edn_parser.cc"
1357
+ #line 1358 "edn_parser.cc"
1336
1358
  switch( (*p) ) {
1337
1359
  case 33: goto st10;
1338
1360
  case 95: goto st10;
@@ -1405,12 +1427,12 @@ case 11:
1405
1427
  {
1406
1428
  switch ( cs ) {
1407
1429
  case 9:
1408
- #line 381 "edn_parser.rl"
1430
+ #line 403 "edn_parser.rl"
1409
1431
  {
1410
1432
  // parse a symbol including the leading operator (-, +, .)
1411
1433
  VALUE sym = Qnil;
1412
1434
  const char *np = parse_symbol(p_save, pe, sym);
1413
- if (np == NULL) { {p = (( pe))-1;} } else {
1435
+ if (np == nullptr) { {p = (( pe))-1;} } else {
1414
1436
  if (sym != Qnil)
1415
1437
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1416
1438
  {p = (( np))-1;}
@@ -1420,7 +1442,7 @@ case 11:
1420
1442
  case 3:
1421
1443
  case 8:
1422
1444
  case 11:
1423
- #line 415 "edn_parser.rl"
1445
+ #line 437 "edn_parser.rl"
1424
1446
  {
1425
1447
  // stand-alone operators (-, +, /, ... etc)
1426
1448
  char op[2] = { *p_save, 0 };
@@ -1428,14 +1450,14 @@ case 11:
1428
1450
  v = edn::util::call_module_fn(rb_mEDN, EDN_MAKE_SYMBOL_METHOD, sym);
1429
1451
  }
1430
1452
  break;
1431
- #line 1432 "edn_parser.cc"
1453
+ #line 1454 "edn_parser.cc"
1432
1454
  }
1433
1455
  }
1434
1456
 
1435
1457
  _out: {}
1436
1458
  }
1437
1459
 
1438
- #line 441 "edn_parser.rl"
1460
+ #line 463 "edn_parser.rl"
1439
1461
 
1440
1462
  if (cs >= EDN_operator_first_final) {
1441
1463
  return p;
@@ -1445,7 +1467,7 @@ case 11:
1445
1467
  return pe;
1446
1468
  }
1447
1469
  else if (cs == EDN_operator_en_main) {} // silence ragel warning
1448
- return NULL;
1470
+ return nullptr;
1449
1471
  }
1450
1472
 
1451
1473
 
@@ -1454,7 +1476,7 @@ case 11:
1454
1476
  // escaped char parsing - handles \c, \newline, \formfeed, etc.
1455
1477
  //
1456
1478
 
1457
- #line 1458 "edn_parser.cc"
1479
+ #line 1480 "edn_parser.cc"
1458
1480
  static const int EDN_escaped_char_start = 1;
1459
1481
  static const int EDN_escaped_char_first_final = 26;
1460
1482
  static const int EDN_escaped_char_error = 0;
@@ -1462,7 +1484,7 @@ static const int EDN_escaped_char_error = 0;
1462
1484
  static const int EDN_escaped_char_en_main = 1;
1463
1485
 
1464
1486
 
1465
- #line 471 "edn_parser.rl"
1487
+ #line 493 "edn_parser.rl"
1466
1488
 
1467
1489
 
1468
1490
 
@@ -1471,15 +1493,15 @@ const char* edn::Parser::parse_esc_char(const char *p, const char *pe, VALUE& v)
1471
1493
  int cs;
1472
1494
 
1473
1495
 
1474
- #line 1475 "edn_parser.cc"
1496
+ #line 1497 "edn_parser.cc"
1475
1497
  {
1476
1498
  cs = EDN_escaped_char_start;
1477
1499
  }
1478
1500
 
1479
- #line 479 "edn_parser.rl"
1501
+ #line 501 "edn_parser.rl"
1480
1502
  const char* p_save = p;
1481
1503
 
1482
- #line 1483 "edn_parser.cc"
1504
+ #line 1505 "edn_parser.cc"
1483
1505
  {
1484
1506
  if ( p == pe )
1485
1507
  goto _test_eof;
@@ -1524,20 +1546,20 @@ case 26:
1524
1546
  goto tr28;
1525
1547
  goto st0;
1526
1548
  tr10:
1527
- #line 25 "edn_parser.rl"
1549
+ #line 47 "edn_parser.rl"
1528
1550
  { line_number++; }
1529
- #line 58 "edn_parser.rl"
1551
+ #line 80 "edn_parser.rl"
1530
1552
  { p--; {p++; cs = 27; goto _out;} }
1531
1553
  goto st27;
1532
1554
  tr28:
1533
- #line 58 "edn_parser.rl"
1555
+ #line 80 "edn_parser.rl"
1534
1556
  { p--; {p++; cs = 27; goto _out;} }
1535
1557
  goto st27;
1536
1558
  st27:
1537
1559
  if ( ++p == pe )
1538
1560
  goto _test_eof27;
1539
1561
  case 27:
1540
- #line 1541 "edn_parser.cc"
1562
+ #line 1563 "edn_parser.cc"
1541
1563
  switch( (*p) ) {
1542
1564
  case 10: goto tr10;
1543
1565
  case 32: goto tr28;
@@ -1555,14 +1577,14 @@ case 3:
1555
1577
  goto tr10;
1556
1578
  goto st3;
1557
1579
  tr29:
1558
- #line 58 "edn_parser.rl"
1580
+ #line 80 "edn_parser.rl"
1559
1581
  { p--; {p++; cs = 28; goto _out;} }
1560
1582
  goto st28;
1561
1583
  st28:
1562
1584
  if ( ++p == pe )
1563
1585
  goto _test_eof28;
1564
1586
  case 28:
1565
- #line 1566 "edn_parser.cc"
1587
+ #line 1588 "edn_parser.cc"
1566
1588
  goto st0;
1567
1589
  st29:
1568
1590
  if ( ++p == pe )
@@ -1871,7 +1893,7 @@ case 25:
1871
1893
  _out: {}
1872
1894
  }
1873
1895
 
1874
- #line 481 "edn_parser.rl"
1896
+ #line 503 "edn_parser.rl"
1875
1897
 
1876
1898
  if (cs >= EDN_escaped_char_first_final) {
1877
1899
  // convert the escaped value to a character
@@ -1885,7 +1907,7 @@ case 25:
1885
1907
  return pe;
1886
1908
  }
1887
1909
  else if (cs == EDN_escaped_char_en_main) {} // silence ragel warning
1888
- return NULL;
1910
+ return nullptr;
1889
1911
  }
1890
1912
 
1891
1913
 
@@ -1898,7 +1920,7 @@ case 25:
1898
1920
  //
1899
1921
  //
1900
1922
 
1901
- #line 1902 "edn_parser.cc"
1923
+ #line 1924 "edn_parser.cc"
1902
1924
  static const int EDN_symbol_start = 1;
1903
1925
  static const int EDN_symbol_first_final = 4;
1904
1926
  static const int EDN_symbol_error = 0;
@@ -1906,7 +1928,7 @@ static const int EDN_symbol_error = 0;
1906
1928
  static const int EDN_symbol_en_main = 1;
1907
1929
 
1908
1930
 
1909
- #line 532 "edn_parser.rl"
1931
+ #line 554 "edn_parser.rl"
1910
1932
 
1911
1933
 
1912
1934
 
@@ -1915,15 +1937,15 @@ const char* edn::Parser::parse_symbol(const char *p, const char *pe, VALUE& s)
1915
1937
  int cs;
1916
1938
 
1917
1939
 
1918
- #line 1919 "edn_parser.cc"
1940
+ #line 1941 "edn_parser.cc"
1919
1941
  {
1920
1942
  cs = EDN_symbol_start;
1921
1943
  }
1922
1944
 
1923
- #line 540 "edn_parser.rl"
1945
+ #line 562 "edn_parser.rl"
1924
1946
  const char* p_save = p;
1925
1947
 
1926
- #line 1927 "edn_parser.cc"
1948
+ #line 1949 "edn_parser.cc"
1927
1949
  {
1928
1950
  if ( p == pe )
1929
1951
  goto _test_eof;
@@ -1985,34 +2007,34 @@ case 4:
1985
2007
  goto st4;
1986
2008
  goto tr7;
1987
2009
  tr7:
1988
- #line 58 "edn_parser.rl"
2010
+ #line 80 "edn_parser.rl"
1989
2011
  { p--; {p++; cs = 5; goto _out;} }
1990
2012
  goto st5;
1991
2013
  st5:
1992
2014
  if ( ++p == pe )
1993
2015
  goto _test_eof5;
1994
2016
  case 5:
1995
- #line 1996 "edn_parser.cc"
2017
+ #line 2018 "edn_parser.cc"
1996
2018
  goto st0;
1997
2019
  tr4:
1998
- #line 25 "edn_parser.rl"
2020
+ #line 47 "edn_parser.rl"
1999
2021
  { line_number++; }
2000
2022
  goto st6;
2001
2023
  tr8:
2002
- #line 58 "edn_parser.rl"
2024
+ #line 80 "edn_parser.rl"
2003
2025
  { p--; {p++; cs = 6; goto _out;} }
2004
2026
  goto st6;
2005
2027
  tr9:
2006
- #line 25 "edn_parser.rl"
2028
+ #line 47 "edn_parser.rl"
2007
2029
  { line_number++; }
2008
- #line 58 "edn_parser.rl"
2030
+ #line 80 "edn_parser.rl"
2009
2031
  { p--; {p++; cs = 6; goto _out;} }
2010
2032
  goto st6;
2011
2033
  st6:
2012
2034
  if ( ++p == pe )
2013
2035
  goto _test_eof6;
2014
2036
  case 6:
2015
- #line 2016 "edn_parser.cc"
2037
+ #line 2038 "edn_parser.cc"
2016
2038
  switch( (*p) ) {
2017
2039
  case 10: goto tr9;
2018
2040
  case 32: goto tr8;
@@ -2037,14 +2059,14 @@ case 6:
2037
2059
  goto st0;
2038
2060
  goto tr7;
2039
2061
  tr11:
2040
- #line 58 "edn_parser.rl"
2062
+ #line 80 "edn_parser.rl"
2041
2063
  { p--; {p++; cs = 7; goto _out;} }
2042
2064
  goto st7;
2043
2065
  st7:
2044
2066
  if ( ++p == pe )
2045
2067
  goto _test_eof7;
2046
2068
  case 7:
2047
- #line 2048 "edn_parser.cc"
2069
+ #line 2070 "edn_parser.cc"
2048
2070
  if ( (*p) == 10 )
2049
2071
  goto tr4;
2050
2072
  goto st2;
@@ -2152,7 +2174,7 @@ case 9:
2152
2174
  _out: {}
2153
2175
  }
2154
2176
 
2155
- #line 542 "edn_parser.rl"
2177
+ #line 564 "edn_parser.rl"
2156
2178
 
2157
2179
  if (cs >= EDN_symbol_first_final) {
2158
2180
  // copy the symbol text
@@ -2165,7 +2187,7 @@ case 9:
2165
2187
  error(__FUNCTION__, "invalid symbol sequence", *p);
2166
2188
  }
2167
2189
  else if (cs == EDN_symbol_en_main) {} // silence ragel warning
2168
- return NULL;
2190
+ return nullptr;
2169
2191
  }
2170
2192
 
2171
2193
 
@@ -2177,13 +2199,13 @@ case 9:
2177
2199
  // sets the same array is used)
2178
2200
  //
2179
2201
 
2180
- #line 620 "edn_parser.rl"
2202
+ #line 642 "edn_parser.rl"
2181
2203
 
2182
2204
 
2183
2205
  //
2184
2206
  // vector-specific machine
2185
2207
 
2186
- #line 2187 "edn_parser.cc"
2208
+ #line 2209 "edn_parser.cc"
2187
2209
  static const int EDN_vector_start = 1;
2188
2210
  static const int EDN_vector_first_final = 4;
2189
2211
  static const int EDN_vector_error = 0;
@@ -2191,7 +2213,7 @@ static const int EDN_vector_error = 0;
2191
2213
  static const int EDN_vector_en_main = 1;
2192
2214
 
2193
2215
 
2194
- #line 635 "edn_parser.rl"
2216
+ #line 657 "edn_parser.rl"
2195
2217
 
2196
2218
 
2197
2219
 
@@ -2206,14 +2228,14 @@ const char* edn::Parser::parse_vector(const char *p, const char *pe, VALUE& v)
2206
2228
  VALUE elems; // will store the vector's elements - allocated in @open_seq
2207
2229
 
2208
2230
 
2209
- #line 2210 "edn_parser.cc"
2231
+ #line 2232 "edn_parser.cc"
2210
2232
  {
2211
2233
  cs = EDN_vector_start;
2212
2234
  }
2213
2235
 
2214
- #line 649 "edn_parser.rl"
2236
+ #line 671 "edn_parser.rl"
2215
2237
 
2216
- #line 2217 "edn_parser.cc"
2238
+ #line 2239 "edn_parser.cc"
2217
2239
  {
2218
2240
  if ( p == pe )
2219
2241
  goto _test_eof;
@@ -2224,7 +2246,7 @@ case 1:
2224
2246
  goto tr0;
2225
2247
  goto st0;
2226
2248
  tr2:
2227
- #line 51 "edn_parser.rl"
2249
+ #line 73 "edn_parser.rl"
2228
2250
  {
2229
2251
  std::stringstream s;
2230
2252
  s << "unterminated " << EDN_TYPE;
@@ -2232,12 +2254,12 @@ tr2:
2232
2254
  p--; {p++; cs = 0; goto _out;}
2233
2255
  }
2234
2256
  goto st0;
2235
- #line 2236 "edn_parser.cc"
2257
+ #line 2258 "edn_parser.cc"
2236
2258
  st0:
2237
2259
  cs = 0;
2238
2260
  goto _out;
2239
2261
  tr0:
2240
- #line 569 "edn_parser.rl"
2262
+ #line 591 "edn_parser.rl"
2241
2263
  {
2242
2264
  // sequences store elements in an array, then process it to
2243
2265
  // convert it to a list, set, or map as needed once the
@@ -2249,11 +2271,11 @@ tr0:
2249
2271
  }
2250
2272
  goto st2;
2251
2273
  tr4:
2252
- #line 25 "edn_parser.rl"
2274
+ #line 47 "edn_parser.rl"
2253
2275
  { line_number++; }
2254
2276
  goto st2;
2255
2277
  tr5:
2256
- #line 584 "edn_parser.rl"
2278
+ #line 606 "edn_parser.rl"
2257
2279
  {
2258
2280
  // reads an item within a sequence (vector, list, map, or
2259
2281
  // set). Regardless of the sequence type, an array of the
@@ -2262,7 +2284,7 @@ tr5:
2262
2284
  VALUE e;
2263
2285
  std::size_t meta_sz = meta_size();
2264
2286
  const char *np = parse_value(p, pe, e);
2265
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {
2287
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {
2266
2288
  // if there's an entry in the discard list, the current
2267
2289
  // object is not meant to be kept due to a #_ so don't
2268
2290
  // push it into the list of elements
@@ -2291,7 +2313,7 @@ st2:
2291
2313
  if ( ++p == pe )
2292
2314
  goto _test_eof2;
2293
2315
  case 2:
2294
- #line 2295 "edn_parser.cc"
2316
+ #line 2317 "edn_parser.cc"
2295
2317
  switch( (*p) ) {
2296
2318
  case 10: goto tr4;
2297
2319
  case 32: goto st2;
@@ -2322,19 +2344,19 @@ case 3:
2322
2344
  goto tr4;
2323
2345
  goto st3;
2324
2346
  tr7:
2325
- #line 579 "edn_parser.rl"
2347
+ #line 601 "edn_parser.rl"
2326
2348
  {
2327
2349
  // remove the current metadata level
2328
2350
  del_top_meta_list();
2329
2351
  }
2330
- #line 58 "edn_parser.rl"
2352
+ #line 80 "edn_parser.rl"
2331
2353
  { p--; {p++; cs = 4; goto _out;} }
2332
2354
  goto st4;
2333
2355
  st4:
2334
2356
  if ( ++p == pe )
2335
2357
  goto _test_eof4;
2336
2358
  case 4:
2337
- #line 2338 "edn_parser.cc"
2359
+ #line 2360 "edn_parser.cc"
2338
2360
  goto st0;
2339
2361
  }
2340
2362
  _test_eof2: cs = 2; goto _test_eof;
@@ -2347,7 +2369,7 @@ case 4:
2347
2369
  switch ( cs ) {
2348
2370
  case 2:
2349
2371
  case 3:
2350
- #line 51 "edn_parser.rl"
2372
+ #line 73 "edn_parser.rl"
2351
2373
  {
2352
2374
  std::stringstream s;
2353
2375
  s << "unterminated " << EDN_TYPE;
@@ -2355,14 +2377,14 @@ case 4:
2355
2377
  p--; {p++; cs = 0; goto _out;}
2356
2378
  }
2357
2379
  break;
2358
- #line 2359 "edn_parser.cc"
2380
+ #line 2381 "edn_parser.cc"
2359
2381
  }
2360
2382
  }
2361
2383
 
2362
2384
  _out: {}
2363
2385
  }
2364
2386
 
2365
- #line 650 "edn_parser.rl"
2387
+ #line 672 "edn_parser.rl"
2366
2388
 
2367
2389
  if (cs >= EDN_vector_first_final) {
2368
2390
  v = elems;
@@ -2373,7 +2395,7 @@ case 4:
2373
2395
  return pe;
2374
2396
  }
2375
2397
  else if (cs == EDN_vector_en_main) {} // silence ragel warning
2376
- return NULL;
2398
+ return nullptr;
2377
2399
  }
2378
2400
 
2379
2401
 
@@ -2382,7 +2404,7 @@ case 4:
2382
2404
  // list parsing machine
2383
2405
  //
2384
2406
 
2385
- #line 2386 "edn_parser.cc"
2407
+ #line 2408 "edn_parser.cc"
2386
2408
  static const int EDN_list_start = 1;
2387
2409
  static const int EDN_list_first_final = 4;
2388
2410
  static const int EDN_list_error = 0;
@@ -2390,7 +2412,7 @@ static const int EDN_list_error = 0;
2390
2412
  static const int EDN_list_en_main = 1;
2391
2413
 
2392
2414
 
2393
- #line 679 "edn_parser.rl"
2415
+ #line 701 "edn_parser.rl"
2394
2416
 
2395
2417
 
2396
2418
  //
@@ -2404,14 +2426,14 @@ const char* edn::Parser::parse_list(const char *p, const char *pe, VALUE& v)
2404
2426
  VALUE elems; // stores the list's elements - allocated in @open_seq
2405
2427
 
2406
2428
 
2407
- #line 2408 "edn_parser.cc"
2429
+ #line 2430 "edn_parser.cc"
2408
2430
  {
2409
2431
  cs = EDN_list_start;
2410
2432
  }
2411
2433
 
2412
- #line 692 "edn_parser.rl"
2434
+ #line 714 "edn_parser.rl"
2413
2435
 
2414
- #line 2415 "edn_parser.cc"
2436
+ #line 2437 "edn_parser.cc"
2415
2437
  {
2416
2438
  if ( p == pe )
2417
2439
  goto _test_eof;
@@ -2422,7 +2444,7 @@ case 1:
2422
2444
  goto tr0;
2423
2445
  goto st0;
2424
2446
  tr2:
2425
- #line 51 "edn_parser.rl"
2447
+ #line 73 "edn_parser.rl"
2426
2448
  {
2427
2449
  std::stringstream s;
2428
2450
  s << "unterminated " << EDN_TYPE;
@@ -2430,12 +2452,12 @@ tr2:
2430
2452
  p--; {p++; cs = 0; goto _out;}
2431
2453
  }
2432
2454
  goto st0;
2433
- #line 2434 "edn_parser.cc"
2455
+ #line 2456 "edn_parser.cc"
2434
2456
  st0:
2435
2457
  cs = 0;
2436
2458
  goto _out;
2437
2459
  tr0:
2438
- #line 569 "edn_parser.rl"
2460
+ #line 591 "edn_parser.rl"
2439
2461
  {
2440
2462
  // sequences store elements in an array, then process it to
2441
2463
  // convert it to a list, set, or map as needed once the
@@ -2447,11 +2469,11 @@ tr0:
2447
2469
  }
2448
2470
  goto st2;
2449
2471
  tr4:
2450
- #line 25 "edn_parser.rl"
2472
+ #line 47 "edn_parser.rl"
2451
2473
  { line_number++; }
2452
2474
  goto st2;
2453
2475
  tr5:
2454
- #line 584 "edn_parser.rl"
2476
+ #line 606 "edn_parser.rl"
2455
2477
  {
2456
2478
  // reads an item within a sequence (vector, list, map, or
2457
2479
  // set). Regardless of the sequence type, an array of the
@@ -2460,7 +2482,7 @@ tr5:
2460
2482
  VALUE e;
2461
2483
  std::size_t meta_sz = meta_size();
2462
2484
  const char *np = parse_value(p, pe, e);
2463
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {
2485
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {
2464
2486
  // if there's an entry in the discard list, the current
2465
2487
  // object is not meant to be kept due to a #_ so don't
2466
2488
  // push it into the list of elements
@@ -2489,7 +2511,7 @@ st2:
2489
2511
  if ( ++p == pe )
2490
2512
  goto _test_eof2;
2491
2513
  case 2:
2492
- #line 2493 "edn_parser.cc"
2514
+ #line 2515 "edn_parser.cc"
2493
2515
  switch( (*p) ) {
2494
2516
  case 10: goto tr4;
2495
2517
  case 32: goto st2;
@@ -2513,19 +2535,19 @@ case 2:
2513
2535
  goto tr5;
2514
2536
  goto tr2;
2515
2537
  tr6:
2516
- #line 579 "edn_parser.rl"
2538
+ #line 601 "edn_parser.rl"
2517
2539
  {
2518
2540
  // remove the current metadata level
2519
2541
  del_top_meta_list();
2520
2542
  }
2521
- #line 58 "edn_parser.rl"
2543
+ #line 80 "edn_parser.rl"
2522
2544
  { p--; {p++; cs = 4; goto _out;} }
2523
2545
  goto st4;
2524
2546
  st4:
2525
2547
  if ( ++p == pe )
2526
2548
  goto _test_eof4;
2527
2549
  case 4:
2528
- #line 2529 "edn_parser.cc"
2550
+ #line 2551 "edn_parser.cc"
2529
2551
  goto st0;
2530
2552
  st3:
2531
2553
  if ( ++p == pe )
@@ -2545,7 +2567,7 @@ case 3:
2545
2567
  switch ( cs ) {
2546
2568
  case 2:
2547
2569
  case 3:
2548
- #line 51 "edn_parser.rl"
2570
+ #line 73 "edn_parser.rl"
2549
2571
  {
2550
2572
  std::stringstream s;
2551
2573
  s << "unterminated " << EDN_TYPE;
@@ -2553,14 +2575,14 @@ case 3:
2553
2575
  p--; {p++; cs = 0; goto _out;}
2554
2576
  }
2555
2577
  break;
2556
- #line 2557 "edn_parser.cc"
2578
+ #line 2579 "edn_parser.cc"
2557
2579
  }
2558
2580
  }
2559
2581
 
2560
2582
  _out: {}
2561
2583
  }
2562
2584
 
2563
- #line 693 "edn_parser.rl"
2585
+ #line 715 "edn_parser.rl"
2564
2586
 
2565
2587
  if (cs >= EDN_list_first_final) {
2566
2588
  v = elems;
@@ -2573,7 +2595,7 @@ case 3:
2573
2595
  return pe;
2574
2596
  }
2575
2597
  else if (cs == EDN_list_en_main) {} // silence ragel warning
2576
- return NULL;
2598
+ return nullptr;
2577
2599
  }
2578
2600
 
2579
2601
 
@@ -2582,7 +2604,7 @@ case 3:
2582
2604
  // hash parsing
2583
2605
  //
2584
2606
 
2585
- #line 2586 "edn_parser.cc"
2607
+ #line 2608 "edn_parser.cc"
2586
2608
  static const int EDN_map_start = 1;
2587
2609
  static const int EDN_map_first_final = 4;
2588
2610
  static const int EDN_map_error = 0;
@@ -2590,7 +2612,7 @@ static const int EDN_map_error = 0;
2590
2612
  static const int EDN_map_en_main = 1;
2591
2613
 
2592
2614
 
2593
- #line 725 "edn_parser.rl"
2615
+ #line 747 "edn_parser.rl"
2594
2616
 
2595
2617
 
2596
2618
 
@@ -2604,14 +2626,14 @@ const char* edn::Parser::parse_map(const char *p, const char *pe, VALUE& v)
2604
2626
  VALUE elems;
2605
2627
 
2606
2628
 
2607
- #line 2608 "edn_parser.cc"
2629
+ #line 2630 "edn_parser.cc"
2608
2630
  {
2609
2631
  cs = EDN_map_start;
2610
2632
  }
2611
2633
 
2612
- #line 738 "edn_parser.rl"
2634
+ #line 760 "edn_parser.rl"
2613
2635
 
2614
- #line 2615 "edn_parser.cc"
2636
+ #line 2637 "edn_parser.cc"
2615
2637
  {
2616
2638
  if ( p == pe )
2617
2639
  goto _test_eof;
@@ -2622,7 +2644,7 @@ case 1:
2622
2644
  goto tr0;
2623
2645
  goto st0;
2624
2646
  tr2:
2625
- #line 51 "edn_parser.rl"
2647
+ #line 73 "edn_parser.rl"
2626
2648
  {
2627
2649
  std::stringstream s;
2628
2650
  s << "unterminated " << EDN_TYPE;
@@ -2630,12 +2652,12 @@ tr2:
2630
2652
  p--; {p++; cs = 0; goto _out;}
2631
2653
  }
2632
2654
  goto st0;
2633
- #line 2634 "edn_parser.cc"
2655
+ #line 2656 "edn_parser.cc"
2634
2656
  st0:
2635
2657
  cs = 0;
2636
2658
  goto _out;
2637
2659
  tr0:
2638
- #line 569 "edn_parser.rl"
2660
+ #line 591 "edn_parser.rl"
2639
2661
  {
2640
2662
  // sequences store elements in an array, then process it to
2641
2663
  // convert it to a list, set, or map as needed once the
@@ -2647,11 +2669,11 @@ tr0:
2647
2669
  }
2648
2670
  goto st2;
2649
2671
  tr4:
2650
- #line 25 "edn_parser.rl"
2672
+ #line 47 "edn_parser.rl"
2651
2673
  { line_number++; }
2652
2674
  goto st2;
2653
2675
  tr5:
2654
- #line 584 "edn_parser.rl"
2676
+ #line 606 "edn_parser.rl"
2655
2677
  {
2656
2678
  // reads an item within a sequence (vector, list, map, or
2657
2679
  // set). Regardless of the sequence type, an array of the
@@ -2660,7 +2682,7 @@ tr5:
2660
2682
  VALUE e;
2661
2683
  std::size_t meta_sz = meta_size();
2662
2684
  const char *np = parse_value(p, pe, e);
2663
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {
2685
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {
2664
2686
  // if there's an entry in the discard list, the current
2665
2687
  // object is not meant to be kept due to a #_ so don't
2666
2688
  // push it into the list of elements
@@ -2689,7 +2711,7 @@ st2:
2689
2711
  if ( ++p == pe )
2690
2712
  goto _test_eof2;
2691
2713
  case 2:
2692
- #line 2693 "edn_parser.cc"
2714
+ #line 2715 "edn_parser.cc"
2693
2715
  switch( (*p) ) {
2694
2716
  case 10: goto tr4;
2695
2717
  case 32: goto st2;
@@ -2723,19 +2745,19 @@ case 3:
2723
2745
  goto tr4;
2724
2746
  goto st3;
2725
2747
  tr7:
2726
- #line 579 "edn_parser.rl"
2748
+ #line 601 "edn_parser.rl"
2727
2749
  {
2728
2750
  // remove the current metadata level
2729
2751
  del_top_meta_list();
2730
2752
  }
2731
- #line 58 "edn_parser.rl"
2753
+ #line 80 "edn_parser.rl"
2732
2754
  { p--; {p++; cs = 4; goto _out;} }
2733
2755
  goto st4;
2734
2756
  st4:
2735
2757
  if ( ++p == pe )
2736
2758
  goto _test_eof4;
2737
2759
  case 4:
2738
- #line 2739 "edn_parser.cc"
2760
+ #line 2761 "edn_parser.cc"
2739
2761
  goto st0;
2740
2762
  }
2741
2763
  _test_eof2: cs = 2; goto _test_eof;
@@ -2748,7 +2770,7 @@ case 4:
2748
2770
  switch ( cs ) {
2749
2771
  case 2:
2750
2772
  case 3:
2751
- #line 51 "edn_parser.rl"
2773
+ #line 73 "edn_parser.rl"
2752
2774
  {
2753
2775
  std::stringstream s;
2754
2776
  s << "unterminated " << EDN_TYPE;
@@ -2756,14 +2778,14 @@ case 4:
2756
2778
  p--; {p++; cs = 0; goto _out;}
2757
2779
  }
2758
2780
  break;
2759
- #line 2760 "edn_parser.cc"
2781
+ #line 2782 "edn_parser.cc"
2760
2782
  }
2761
2783
  }
2762
2784
 
2763
2785
  _out: {}
2764
2786
  }
2765
2787
 
2766
- #line 739 "edn_parser.rl"
2788
+ #line 761 "edn_parser.rl"
2767
2789
 
2768
2790
  if (cs >= EDN_map_first_final) {
2769
2791
 
@@ -2788,7 +2810,7 @@ case 4:
2788
2810
  return pe;
2789
2811
  }
2790
2812
  else if (cs == EDN_map_en_main) {} // silence ragel warning
2791
- return NULL;
2813
+ return nullptr;
2792
2814
  }
2793
2815
 
2794
2816
 
@@ -2799,7 +2821,7 @@ case 4:
2799
2821
  // the remaining data to the correct parser
2800
2822
  //
2801
2823
 
2802
- #line 2803 "edn_parser.cc"
2824
+ #line 2825 "edn_parser.cc"
2803
2825
  static const int EDN_dispatch_start = 1;
2804
2826
  static const int EDN_dispatch_first_final = 2;
2805
2827
  static const int EDN_dispatch_error = 0;
@@ -2807,7 +2829,7 @@ static const int EDN_dispatch_error = 0;
2807
2829
  static const int EDN_dispatch_en_main = 1;
2808
2830
 
2809
2831
 
2810
- #line 803 "edn_parser.rl"
2832
+ #line 825 "edn_parser.rl"
2811
2833
 
2812
2834
 
2813
2835
 
@@ -2816,14 +2838,14 @@ const char* edn::Parser::parse_dispatch(const char *p, const char *pe, VALUE& v)
2816
2838
  int cs;
2817
2839
 
2818
2840
 
2819
- #line 2820 "edn_parser.cc"
2841
+ #line 2842 "edn_parser.cc"
2820
2842
  {
2821
2843
  cs = EDN_dispatch_start;
2822
2844
  }
2823
2845
 
2824
- #line 811 "edn_parser.rl"
2846
+ #line 833 "edn_parser.rl"
2825
2847
 
2826
- #line 2827 "edn_parser.cc"
2848
+ #line 2849 "edn_parser.cc"
2827
2849
  {
2828
2850
  if ( p == pe )
2829
2851
  goto _test_eof;
@@ -2844,40 +2866,40 @@ st0:
2844
2866
  cs = 0;
2845
2867
  goto _out;
2846
2868
  tr0:
2847
- #line 791 "edn_parser.rl"
2869
+ #line 813 "edn_parser.rl"
2848
2870
  {
2849
2871
  // #inst, #uuid, or #user/tag
2850
2872
  const char *np = parse_tagged(p, pe, v);
2851
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2873
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2852
2874
  }
2853
- #line 58 "edn_parser.rl"
2875
+ #line 80 "edn_parser.rl"
2854
2876
  { p--; {p++; cs = 2; goto _out;} }
2855
2877
  goto st2;
2856
2878
  tr2:
2857
- #line 785 "edn_parser.rl"
2879
+ #line 807 "edn_parser.rl"
2858
2880
  {
2859
2881
  // discard token #_
2860
2882
  const char *np = parse_discard(p, pe);
2861
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2883
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2862
2884
  }
2863
- #line 58 "edn_parser.rl"
2885
+ #line 80 "edn_parser.rl"
2864
2886
  { p--; {p++; cs = 2; goto _out;} }
2865
2887
  goto st2;
2866
2888
  tr3:
2867
- #line 779 "edn_parser.rl"
2889
+ #line 801 "edn_parser.rl"
2868
2890
  {
2869
2891
  // #{ }
2870
2892
  const char *np = parse_set(p, pe, v);
2871
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2893
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {p = (( np))-1;}
2872
2894
  }
2873
- #line 58 "edn_parser.rl"
2895
+ #line 80 "edn_parser.rl"
2874
2896
  { p--; {p++; cs = 2; goto _out;} }
2875
2897
  goto st2;
2876
2898
  st2:
2877
2899
  if ( ++p == pe )
2878
2900
  goto _test_eof2;
2879
2901
  case 2:
2880
- #line 2881 "edn_parser.cc"
2902
+ #line 2903 "edn_parser.cc"
2881
2903
  goto st0;
2882
2904
  }
2883
2905
  _test_eof2: cs = 2; goto _test_eof;
@@ -2886,7 +2908,7 @@ case 2:
2886
2908
  _out: {}
2887
2909
  }
2888
2910
 
2889
- #line 812 "edn_parser.rl"
2911
+ #line 834 "edn_parser.rl"
2890
2912
 
2891
2913
  if (cs >= EDN_dispatch_first_final) {
2892
2914
  return p + 1;
@@ -2897,7 +2919,7 @@ case 2:
2897
2919
  }
2898
2920
  else if (cs == EDN_dispatch_en_main) {} // silence ragel warning
2899
2921
 
2900
- return NULL;
2922
+ return nullptr;
2901
2923
  }
2902
2924
 
2903
2925
 
@@ -2905,7 +2927,7 @@ case 2:
2905
2927
  // set parsing machine
2906
2928
  //
2907
2929
 
2908
- #line 2909 "edn_parser.cc"
2930
+ #line 2931 "edn_parser.cc"
2909
2931
  static const int EDN_set_start = 1;
2910
2932
  static const int EDN_set_first_final = 4;
2911
2933
  static const int EDN_set_error = 0;
@@ -2913,7 +2935,7 @@ static const int EDN_set_error = 0;
2913
2935
  static const int EDN_set_en_main = 1;
2914
2936
 
2915
2937
 
2916
- #line 841 "edn_parser.rl"
2938
+ #line 863 "edn_parser.rl"
2917
2939
 
2918
2940
 
2919
2941
  //
@@ -2927,14 +2949,14 @@ const char* edn::Parser::parse_set(const char *p, const char *pe, VALUE& v)
2927
2949
  VALUE elems; // holds the set's elements as an array allocated in @open_seq
2928
2950
 
2929
2951
 
2930
- #line 2931 "edn_parser.cc"
2952
+ #line 2953 "edn_parser.cc"
2931
2953
  {
2932
2954
  cs = EDN_set_start;
2933
2955
  }
2934
2956
 
2935
- #line 854 "edn_parser.rl"
2957
+ #line 876 "edn_parser.rl"
2936
2958
 
2937
- #line 2938 "edn_parser.cc"
2959
+ #line 2960 "edn_parser.cc"
2938
2960
  {
2939
2961
  if ( p == pe )
2940
2962
  goto _test_eof;
@@ -2945,7 +2967,7 @@ case 1:
2945
2967
  goto tr0;
2946
2968
  goto st0;
2947
2969
  tr2:
2948
- #line 51 "edn_parser.rl"
2970
+ #line 73 "edn_parser.rl"
2949
2971
  {
2950
2972
  std::stringstream s;
2951
2973
  s << "unterminated " << EDN_TYPE;
@@ -2953,12 +2975,12 @@ tr2:
2953
2975
  p--; {p++; cs = 0; goto _out;}
2954
2976
  }
2955
2977
  goto st0;
2956
- #line 2957 "edn_parser.cc"
2978
+ #line 2979 "edn_parser.cc"
2957
2979
  st0:
2958
2980
  cs = 0;
2959
2981
  goto _out;
2960
2982
  tr0:
2961
- #line 569 "edn_parser.rl"
2983
+ #line 591 "edn_parser.rl"
2962
2984
  {
2963
2985
  // sequences store elements in an array, then process it to
2964
2986
  // convert it to a list, set, or map as needed once the
@@ -2970,11 +2992,11 @@ tr0:
2970
2992
  }
2971
2993
  goto st2;
2972
2994
  tr4:
2973
- #line 25 "edn_parser.rl"
2995
+ #line 47 "edn_parser.rl"
2974
2996
  { line_number++; }
2975
2997
  goto st2;
2976
2998
  tr5:
2977
- #line 584 "edn_parser.rl"
2999
+ #line 606 "edn_parser.rl"
2978
3000
  {
2979
3001
  // reads an item within a sequence (vector, list, map, or
2980
3002
  // set). Regardless of the sequence type, an array of the
@@ -2983,7 +3005,7 @@ tr5:
2983
3005
  VALUE e;
2984
3006
  std::size_t meta_sz = meta_size();
2985
3007
  const char *np = parse_value(p, pe, e);
2986
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {
3008
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {
2987
3009
  // if there's an entry in the discard list, the current
2988
3010
  // object is not meant to be kept due to a #_ so don't
2989
3011
  // push it into the list of elements
@@ -3012,7 +3034,7 @@ st2:
3012
3034
  if ( ++p == pe )
3013
3035
  goto _test_eof2;
3014
3036
  case 2:
3015
- #line 3016 "edn_parser.cc"
3037
+ #line 3038 "edn_parser.cc"
3016
3038
  switch( (*p) ) {
3017
3039
  case 10: goto tr4;
3018
3040
  case 32: goto st2;
@@ -3046,19 +3068,19 @@ case 3:
3046
3068
  goto tr4;
3047
3069
  goto st3;
3048
3070
  tr7:
3049
- #line 579 "edn_parser.rl"
3071
+ #line 601 "edn_parser.rl"
3050
3072
  {
3051
3073
  // remove the current metadata level
3052
3074
  del_top_meta_list();
3053
3075
  }
3054
- #line 58 "edn_parser.rl"
3076
+ #line 80 "edn_parser.rl"
3055
3077
  { p--; {p++; cs = 4; goto _out;} }
3056
3078
  goto st4;
3057
3079
  st4:
3058
3080
  if ( ++p == pe )
3059
3081
  goto _test_eof4;
3060
3082
  case 4:
3061
- #line 3062 "edn_parser.cc"
3083
+ #line 3084 "edn_parser.cc"
3062
3084
  goto st0;
3063
3085
  }
3064
3086
  _test_eof2: cs = 2; goto _test_eof;
@@ -3071,7 +3093,7 @@ case 4:
3071
3093
  switch ( cs ) {
3072
3094
  case 2:
3073
3095
  case 3:
3074
- #line 51 "edn_parser.rl"
3096
+ #line 73 "edn_parser.rl"
3075
3097
  {
3076
3098
  std::stringstream s;
3077
3099
  s << "unterminated " << EDN_TYPE;
@@ -3079,14 +3101,14 @@ case 4:
3079
3101
  p--; {p++; cs = 0; goto _out;}
3080
3102
  }
3081
3103
  break;
3082
- #line 3083 "edn_parser.cc"
3104
+ #line 3105 "edn_parser.cc"
3083
3105
  }
3084
3106
  }
3085
3107
 
3086
3108
  _out: {}
3087
3109
  }
3088
3110
 
3089
- #line 855 "edn_parser.rl"
3111
+ #line 877 "edn_parser.rl"
3090
3112
 
3091
3113
  if (cs >= EDN_set_first_final) {
3092
3114
  // all elements collected; now convert to a set
@@ -3098,7 +3120,7 @@ case 4:
3098
3120
  return pe;
3099
3121
  }
3100
3122
  else if (cs == EDN_set_en_main) {} // silence ragel warning
3101
- return NULL;
3123
+ return nullptr;
3102
3124
  }
3103
3125
 
3104
3126
 
@@ -3109,7 +3131,7 @@ case 4:
3109
3131
  // defining a machine to consume items within container delimiters
3110
3132
  //
3111
3133
 
3112
- #line 3113 "edn_parser.cc"
3134
+ #line 3135 "edn_parser.cc"
3113
3135
  static const int EDN_discard_start = 1;
3114
3136
  static const int EDN_discard_first_final = 4;
3115
3137
  static const int EDN_discard_error = 0;
@@ -3117,7 +3139,7 @@ static const int EDN_discard_error = 0;
3117
3139
  static const int EDN_discard_en_main = 1;
3118
3140
 
3119
3141
 
3120
- #line 905 "edn_parser.rl"
3142
+ #line 927 "edn_parser.rl"
3121
3143
 
3122
3144
 
3123
3145
 
@@ -3127,14 +3149,14 @@ const char* edn::Parser::parse_discard(const char *p, const char *pe)
3127
3149
  VALUE v;
3128
3150
 
3129
3151
 
3130
- #line 3131 "edn_parser.cc"
3152
+ #line 3153 "edn_parser.cc"
3131
3153
  {
3132
3154
  cs = EDN_discard_start;
3133
3155
  }
3134
3156
 
3135
- #line 914 "edn_parser.rl"
3157
+ #line 936 "edn_parser.rl"
3136
3158
 
3137
- #line 3138 "edn_parser.cc"
3159
+ #line 3160 "edn_parser.cc"
3138
3160
  {
3139
3161
  if ( p == pe )
3140
3162
  goto _test_eof;
@@ -3145,7 +3167,7 @@ case 1:
3145
3167
  goto st2;
3146
3168
  goto st0;
3147
3169
  tr2:
3148
- #line 895 "edn_parser.rl"
3170
+ #line 917 "edn_parser.rl"
3149
3171
  {
3150
3172
  std::stringstream s;
3151
3173
  s << "discard sequence without element to discard";
@@ -3153,19 +3175,19 @@ tr2:
3153
3175
  p--; {p++; cs = 0; goto _out;}
3154
3176
  }
3155
3177
  goto st0;
3156
- #line 3157 "edn_parser.cc"
3178
+ #line 3179 "edn_parser.cc"
3157
3179
  st0:
3158
3180
  cs = 0;
3159
3181
  goto _out;
3160
3182
  tr3:
3161
- #line 25 "edn_parser.rl"
3183
+ #line 47 "edn_parser.rl"
3162
3184
  { line_number++; }
3163
3185
  goto st2;
3164
3186
  st2:
3165
3187
  if ( ++p == pe )
3166
3188
  goto _test_eof2;
3167
3189
  case 2:
3168
- #line 3169 "edn_parser.cc"
3190
+ #line 3191 "edn_parser.cc"
3169
3191
  switch( (*p) ) {
3170
3192
  case 10: goto tr3;
3171
3193
  case 32: goto st2;
@@ -3191,10 +3213,10 @@ case 2:
3191
3213
  goto tr4;
3192
3214
  goto tr2;
3193
3215
  tr4:
3194
- #line 884 "edn_parser.rl"
3216
+ #line 906 "edn_parser.rl"
3195
3217
  {
3196
3218
  const char *np = parse_value(p, pe, v);
3197
- if (np == NULL) { p--; {p++; cs = 4; goto _out;} } else {
3219
+ if (np == nullptr) { p--; {p++; cs = 4; goto _out;} } else {
3198
3220
  // this token is to be discarded so store it in the
3199
3221
  // discard stack - we really don't need to save it so this
3200
3222
  // could be simplified
@@ -3202,14 +3224,14 @@ tr4:
3202
3224
  {p = (( np))-1;}
3203
3225
  }
3204
3226
  }
3205
- #line 58 "edn_parser.rl"
3227
+ #line 80 "edn_parser.rl"
3206
3228
  { p--; {p++; cs = 4; goto _out;} }
3207
3229
  goto st4;
3208
3230
  st4:
3209
3231
  if ( ++p == pe )
3210
3232
  goto _test_eof4;
3211
3233
  case 4:
3212
- #line 3213 "edn_parser.cc"
3234
+ #line 3235 "edn_parser.cc"
3213
3235
  goto st0;
3214
3236
  st3:
3215
3237
  if ( ++p == pe )
@@ -3228,7 +3250,7 @@ case 3:
3228
3250
  {
3229
3251
  switch ( cs ) {
3230
3252
  case 2:
3231
- #line 895 "edn_parser.rl"
3253
+ #line 917 "edn_parser.rl"
3232
3254
  {
3233
3255
  std::stringstream s;
3234
3256
  s << "discard sequence without element to discard";
@@ -3236,14 +3258,14 @@ case 3:
3236
3258
  p--; {p++; cs = 0; goto _out;}
3237
3259
  }
3238
3260
  break;
3239
- #line 3240 "edn_parser.cc"
3261
+ #line 3262 "edn_parser.cc"
3240
3262
  }
3241
3263
  }
3242
3264
 
3243
3265
  _out: {}
3244
3266
  }
3245
3267
 
3246
- #line 915 "edn_parser.rl"
3268
+ #line 937 "edn_parser.rl"
3247
3269
 
3248
3270
  if (cs >= EDN_discard_first_final) {
3249
3271
  return p + 1;
@@ -3254,7 +3276,7 @@ case 3:
3254
3276
  }
3255
3277
  else if (cs == EDN_discard_en_main) {} // silence ragel warning
3256
3278
 
3257
- return NULL;
3279
+ return nullptr;
3258
3280
  }
3259
3281
 
3260
3282
 
@@ -3274,7 +3296,7 @@ case 3:
3274
3296
  // 2. add parse checks for uuid and inst for better error reporting
3275
3297
  //
3276
3298
 
3277
- #line 3278 "edn_parser.cc"
3299
+ #line 3300 "edn_parser.cc"
3278
3300
  static const int EDN_tagged_start = 1;
3279
3301
  static const int EDN_tagged_first_final = 7;
3280
3302
  static const int EDN_tagged_error = 0;
@@ -3282,7 +3304,7 @@ static const int EDN_tagged_error = 0;
3282
3304
  static const int EDN_tagged_en_main = 1;
3283
3305
 
3284
3306
 
3285
- #line 983 "edn_parser.rl"
3307
+ #line 1005 "edn_parser.rl"
3286
3308
 
3287
3309
 
3288
3310
 
@@ -3296,14 +3318,14 @@ const char* edn::Parser::parse_tagged(const char *p, const char *pe, VALUE& v)
3296
3318
  int cs;
3297
3319
 
3298
3320
 
3299
- #line 3300 "edn_parser.cc"
3321
+ #line 3322 "edn_parser.cc"
3300
3322
  {
3301
3323
  cs = EDN_tagged_start;
3302
3324
  }
3303
3325
 
3304
- #line 996 "edn_parser.rl"
3326
+ #line 1018 "edn_parser.rl"
3305
3327
 
3306
- #line 3307 "edn_parser.cc"
3328
+ #line 3329 "edn_parser.cc"
3307
3329
  {
3308
3330
  if ( p == pe )
3309
3331
  goto _test_eof;
@@ -3320,11 +3342,11 @@ st0:
3320
3342
  cs = 0;
3321
3343
  goto _out;
3322
3344
  tr0:
3323
- #line 962 "edn_parser.rl"
3345
+ #line 984 "edn_parser.rl"
3324
3346
  {
3325
3347
  // parses the symbol portion of the pair
3326
3348
  const char *np = parse_symbol(p, pe, sym_name);
3327
- if (np == NULL) { p--; {p++; cs = 2; goto _out;} } else {
3349
+ if (np == nullptr) { p--; {p++; cs = 2; goto _out;} } else {
3328
3350
  sym_ok = true;
3329
3351
  {p = (( np))-1;}
3330
3352
  }
@@ -3334,7 +3356,7 @@ st2:
3334
3356
  if ( ++p == pe )
3335
3357
  goto _test_eof2;
3336
3358
  case 2:
3337
- #line 3338 "edn_parser.cc"
3359
+ #line 3360 "edn_parser.cc"
3338
3360
  switch( (*p) ) {
3339
3361
  case 10: goto tr3;
3340
3362
  case 32: goto st3;
@@ -3360,14 +3382,14 @@ case 2:
3360
3382
  goto st2;
3361
3383
  goto st0;
3362
3384
  tr3:
3363
- #line 25 "edn_parser.rl"
3385
+ #line 47 "edn_parser.rl"
3364
3386
  { line_number++; }
3365
3387
  goto st3;
3366
3388
  st3:
3367
3389
  if ( ++p == pe )
3368
3390
  goto _test_eof3;
3369
3391
  case 3:
3370
- #line 3371 "edn_parser.cc"
3392
+ #line 3393 "edn_parser.cc"
3371
3393
  switch( (*p) ) {
3372
3394
  case 10: goto tr3;
3373
3395
  case 32: goto st3;
@@ -3393,23 +3415,23 @@ case 3:
3393
3415
  goto tr7;
3394
3416
  goto st0;
3395
3417
  tr7:
3396
- #line 970 "edn_parser.rl"
3418
+ #line 992 "edn_parser.rl"
3397
3419
  {
3398
3420
  // parses the value portion
3399
3421
  const char *np = parse_value(p, pe, data);
3400
- if (np == NULL) { p--; {p++; cs = 7; goto _out;} } else {
3422
+ if (np == nullptr) { p--; {p++; cs = 7; goto _out;} } else {
3401
3423
  data_ok = true;
3402
3424
  {p = (( np))-1;}
3403
3425
  }
3404
3426
  }
3405
- #line 58 "edn_parser.rl"
3427
+ #line 80 "edn_parser.rl"
3406
3428
  { p--; {p++; cs = 7; goto _out;} }
3407
3429
  goto st7;
3408
3430
  st7:
3409
3431
  if ( ++p == pe )
3410
3432
  goto _test_eof7;
3411
3433
  case 7:
3412
- #line 3413 "edn_parser.cc"
3434
+ #line 3435 "edn_parser.cc"
3413
3435
  goto st0;
3414
3436
  st4:
3415
3437
  if ( ++p == pe )
@@ -3487,7 +3509,7 @@ case 6:
3487
3509
  _out: {}
3488
3510
  }
3489
3511
 
3490
- #line 997 "edn_parser.rl"
3512
+ #line 1019 "edn_parser.rl"
3491
3513
 
3492
3514
  if (cs >= EDN_tagged_first_final) {
3493
3515
  //std::cerr << __FUNCTION__ << " parse symbol name as '" << sym_name << "', value is: " << data << std::endl;
@@ -3495,7 +3517,7 @@ case 6:
3495
3517
  if (!sym_ok || !data_ok) {
3496
3518
  error(__FUNCTION__, "tagged element symbol error", *p);
3497
3519
  v = EDN_EOF_CONST;
3498
- return NULL;
3520
+ return nullptr;
3499
3521
  }
3500
3522
 
3501
3523
  try {
@@ -3513,7 +3535,7 @@ case 6:
3513
3535
  }
3514
3536
  else if (cs == EDN_tagged_en_main) {} // silence ragel warning
3515
3537
  v = EDN_EOF_CONST;
3516
- return NULL;
3538
+ return nullptr;
3517
3539
  }
3518
3540
 
3519
3541
 
@@ -3525,7 +3547,7 @@ case 6:
3525
3547
  // useful?
3526
3548
  //
3527
3549
 
3528
- #line 3529 "edn_parser.cc"
3550
+ #line 3551 "edn_parser.cc"
3529
3551
  static const int EDN_meta_start = 1;
3530
3552
  static const int EDN_meta_first_final = 3;
3531
3553
  static const int EDN_meta_error = 0;
@@ -3533,7 +3555,7 @@ static const int EDN_meta_error = 0;
3533
3555
  static const int EDN_meta_en_main = 1;
3534
3556
 
3535
3557
 
3536
- #line 1047 "edn_parser.rl"
3558
+ #line 1069 "edn_parser.rl"
3537
3559
 
3538
3560
 
3539
3561
 
@@ -3543,14 +3565,14 @@ const char* edn::Parser::parse_meta(const char *p, const char *pe)
3543
3565
  VALUE v;
3544
3566
 
3545
3567
 
3546
- #line 3547 "edn_parser.cc"
3568
+ #line 3569 "edn_parser.cc"
3547
3569
  {
3548
3570
  cs = EDN_meta_start;
3549
3571
  }
3550
3572
 
3551
- #line 1056 "edn_parser.rl"
3573
+ #line 1078 "edn_parser.rl"
3552
3574
 
3553
- #line 3554 "edn_parser.cc"
3575
+ #line 3576 "edn_parser.cc"
3554
3576
  {
3555
3577
  if ( p == pe )
3556
3578
  goto _test_eof;
@@ -3589,19 +3611,19 @@ case 2:
3589
3611
  goto tr2;
3590
3612
  goto st0;
3591
3613
  tr2:
3592
- #line 1039 "edn_parser.rl"
3614
+ #line 1061 "edn_parser.rl"
3593
3615
  {
3594
3616
  const char *np = parse_value(p, pe, v);
3595
- if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else { {p = (( np))-1;} }
3617
+ if (np == nullptr) { p--; {p++; cs = 3; goto _out;} } else { {p = (( np))-1;} }
3596
3618
  }
3597
- #line 58 "edn_parser.rl"
3619
+ #line 80 "edn_parser.rl"
3598
3620
  { p--; {p++; cs = 3; goto _out;} }
3599
3621
  goto st3;
3600
3622
  st3:
3601
3623
  if ( ++p == pe )
3602
3624
  goto _test_eof3;
3603
3625
  case 3:
3604
- #line 3605 "edn_parser.cc"
3626
+ #line 3627 "edn_parser.cc"
3605
3627
  goto st0;
3606
3628
  }
3607
3629
  _test_eof2: cs = 2; goto _test_eof;
@@ -3611,7 +3633,7 @@ case 3:
3611
3633
  _out: {}
3612
3634
  }
3613
3635
 
3614
- #line 1057 "edn_parser.rl"
3636
+ #line 1079 "edn_parser.rl"
3615
3637
 
3616
3638
  if (cs >= EDN_meta_first_final) {
3617
3639
  append_to_meta(v);
@@ -3623,7 +3645,7 @@ case 3:
3623
3645
  }
3624
3646
  else if (cs == EDN_meta_en_main) {} // silence ragel warning
3625
3647
 
3626
- return NULL;
3648
+ return nullptr;
3627
3649
  }
3628
3650
 
3629
3651
 
@@ -3633,7 +3655,7 @@ case 3:
3633
3655
  // top-level, therefore, does not tokenize source stream
3634
3656
  //
3635
3657
 
3636
- #line 3637 "edn_parser.cc"
3658
+ #line 3659 "edn_parser.cc"
3637
3659
  static const int EDN_parser_start = 2;
3638
3660
  static const int EDN_parser_first_final = 2;
3639
3661
  static const int EDN_parser_error = 0;
@@ -3641,7 +3663,7 @@ static const int EDN_parser_error = 0;
3641
3663
  static const int EDN_parser_en_main = 2;
3642
3664
 
3643
3665
 
3644
- #line 1106 "edn_parser.rl"
3666
+ #line 1128 "edn_parser.rl"
3645
3667
 
3646
3668
 
3647
3669
 
@@ -3651,33 +3673,33 @@ VALUE edn::Parser::parse(const char* src, std::size_t len)
3651
3673
  VALUE result = EDN_EOF_CONST;
3652
3674
 
3653
3675
 
3654
- #line 3655 "edn_parser.cc"
3676
+ #line 3677 "edn_parser.cc"
3655
3677
  {
3656
3678
  cs = EDN_parser_start;
3657
3679
  }
3658
3680
 
3659
- #line 1115 "edn_parser.rl"
3681
+ #line 1137 "edn_parser.rl"
3660
3682
  set_source(src, len);
3661
3683
 
3662
- #line 3663 "edn_parser.cc"
3684
+ #line 3685 "edn_parser.cc"
3663
3685
  {
3664
3686
  if ( p == pe )
3665
3687
  goto _test_eof;
3666
3688
  switch ( cs )
3667
3689
  {
3668
3690
  tr1:
3669
- #line 25 "edn_parser.rl"
3691
+ #line 47 "edn_parser.rl"
3670
3692
  { line_number++; }
3671
3693
  goto st2;
3672
3694
  tr4:
3673
- #line 1083 "edn_parser.rl"
3695
+ #line 1105 "edn_parser.rl"
3674
3696
  {
3675
3697
  // save the count of metadata items before we parse this value
3676
3698
  // so we can determine if we've read another metadata value or
3677
3699
  // an actual data item
3678
3700
  std::size_t meta_sz = meta_size();
3679
3701
  const char* np = parse_value(p, pe, result);
3680
- if (np == NULL) { {p = (( pe))-1;} {p++; cs = 2; goto _out;} } else {
3702
+ if (np == nullptr) { {p = (( pe))-1;} {p++; cs = 2; goto _out;} } else {
3681
3703
  // if we have metadata saved and it matches the count we
3682
3704
  // saved before we parsed a value, then we must bind the
3683
3705
  // metadata sequence to it
@@ -3693,7 +3715,7 @@ st2:
3693
3715
  if ( ++p == pe )
3694
3716
  goto _test_eof2;
3695
3717
  case 2:
3696
- #line 3697 "edn_parser.cc"
3718
+ #line 3719 "edn_parser.cc"
3697
3719
  switch( (*p) ) {
3698
3720
  case 10: goto tr1;
3699
3721
  case 32: goto st2;
@@ -3736,14 +3758,14 @@ case 1:
3736
3758
  _out: {}
3737
3759
  }
3738
3760
 
3739
- #line 1117 "edn_parser.rl"
3761
+ #line 1139 "edn_parser.rl"
3740
3762
 
3741
3763
  if (cs == EDN_parser_error) {
3742
3764
  error(__FUNCTION__, *p);
3743
3765
  return EDN_EOF_CONST;
3744
3766
  }
3745
3767
  else if (cs == EDN_parser_first_final) {
3746
- p = pe = eof = NULL;
3768
+ p = pe = eof = nullptr;
3747
3769
  }
3748
3770
  else if (cs == EDN_parser_en_main) {} // silence ragel warning
3749
3771
  return result;
@@ -3754,13 +3776,13 @@ case 1:
3754
3776
  // token-by-token machine
3755
3777
  //
3756
3778
 
3757
- #line 3758 "edn_parser.cc"
3779
+ #line 3780 "edn_parser.cc"
3758
3780
  static const int EDN_tokens_start = 1;
3759
3781
 
3760
3782
  static const int EDN_tokens_en_main = 1;
3761
3783
 
3762
3784
 
3763
- #line 1171 "edn_parser.rl"
3785
+ #line 1193 "edn_parser.rl"
3764
3786
 
3765
3787
 
3766
3788
 
@@ -3779,28 +3801,28 @@ edn::Parser::eTokenState edn::Parser::parse_next(VALUE& value)
3779
3801
  discard.clear();
3780
3802
 
3781
3803
 
3782
- #line 3783 "edn_parser.cc"
3804
+ #line 3805 "edn_parser.cc"
3783
3805
  {
3784
3806
  cs = EDN_tokens_start;
3785
3807
  }
3786
3808
 
3787
- #line 1189 "edn_parser.rl"
3809
+ #line 1211 "edn_parser.rl"
3788
3810
 
3789
- #line 3790 "edn_parser.cc"
3811
+ #line 3812 "edn_parser.cc"
3790
3812
  {
3791
3813
  if ( p == pe )
3792
3814
  goto _test_eof;
3793
3815
  switch ( cs )
3794
3816
  {
3795
3817
  tr2:
3796
- #line 25 "edn_parser.rl"
3818
+ #line 47 "edn_parser.rl"
3797
3819
  { line_number++; }
3798
3820
  goto st1;
3799
3821
  st1:
3800
3822
  if ( ++p == pe )
3801
3823
  goto _test_eof1;
3802
3824
  case 1:
3803
- #line 3804 "edn_parser.cc"
3825
+ #line 3826 "edn_parser.cc"
3804
3826
  switch( (*p) ) {
3805
3827
  case 10: goto tr2;
3806
3828
  case 32: goto st1;
@@ -3829,11 +3851,11 @@ st0:
3829
3851
  cs = 0;
3830
3852
  goto _out;
3831
3853
  tr6:
3832
- #line 25 "edn_parser.rl"
3854
+ #line 47 "edn_parser.rl"
3833
3855
  { line_number++; }
3834
3856
  goto st4;
3835
3857
  tr3:
3836
- #line 1139 "edn_parser.rl"
3858
+ #line 1161 "edn_parser.rl"
3837
3859
  {
3838
3860
  // we won't know if we've parsed a discard or a metadata until
3839
3861
  // after parse_value() is done. Save the current number of
@@ -3842,7 +3864,7 @@ tr3:
3842
3864
  meta_sz = meta_size();
3843
3865
 
3844
3866
  const char* np = parse_value(p, pe, value);
3845
- if (np == NULL) { p--; {p++; cs = 4; goto _out;} } else {
3867
+ if (np == nullptr) { p--; {p++; cs = 4; goto _out;} } else {
3846
3868
  if (!meta_empty()) {
3847
3869
  // was an additional metadata entry read? if so, don't
3848
3870
  // return a value
@@ -3869,7 +3891,7 @@ st4:
3869
3891
  if ( ++p == pe )
3870
3892
  goto _test_eof4;
3871
3893
  case 4:
3872
- #line 3873 "edn_parser.cc"
3894
+ #line 3895 "edn_parser.cc"
3873
3895
  switch( (*p) ) {
3874
3896
  case 10: goto tr6;
3875
3897
  case 32: goto st4;
@@ -3903,7 +3925,7 @@ case 3:
3903
3925
  _out: {}
3904
3926
  }
3905
3927
 
3906
- #line 1190 "edn_parser.rl"
3928
+ #line 1212 "edn_parser.rl"
3907
3929
 
3908
3930
  if (cs == EDN_tokens_en_main) {} // silence ragel warning
3909
3931
  return state;