json-maglev- 1.6.5 → 1.6.7
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.
- data/.gitignore +3 -0
- data/.travis.yml +4 -3
- data/CHANGES +9 -0
- data/Gemfile +2 -2
- data/README.rdoc +1 -1
- data/Rakefile +48 -58
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +17 -8
- data/ext/json/ext/generator/generator.h +1 -0
- data/ext/json/ext/parser/parser.c +18 -17
- data/ext/json/ext/parser/parser.rl +1 -0
- data/install.rb +7 -3
- data/java/src/json/ext/StringDecoder.java +1 -0
- data/json.gemspec +4 -7
- data/json_pure.gemspec +4 -7
- data/lib/json/common.rb +1 -0
- data/lib/json/light_object.rb +45 -0
- data/lib/json/pure/generator.rb +6 -2
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +16 -4
- data/tests/test_json_addition.rb +4 -4
- data/tests/test_json_encoding.rb +1 -1
- data/tests/test_json_fixtures.rb +1 -1
- data/tests/test_json_generate.rb +19 -17
- data/tests/test_json_string_matching.rb +1 -1
- data/tests/test_json_unicode.rb +1 -1
- metadata +7 -56
- data/benchmarks/data-p4-3GHz-ruby18/.keep +0 -0
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +0 -52
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +0 -900
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +0 -901
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +0 -261
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +0 -262
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +0 -82
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +0 -34
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +0 -900
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +0 -901
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +0 -81
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +0 -82
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +0 -82
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +0 -1000
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +0 -1001
- data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +0 -82
- data/benchmarks/data/.keep +0 -0
- data/benchmarks/generator2_benchmark.rb +0 -222
- data/benchmarks/generator_benchmark.rb +0 -224
- data/benchmarks/ohai.json +0 -1216
- data/benchmarks/ohai.ruby +0 -1
- data/benchmarks/parser2_benchmark.rb +0 -251
- data/benchmarks/parser_benchmark.rb +0 -259
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGES
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
2012-04-27 (1.6.7)
|
|
2
|
+
* Fix possible crash when trying to parse nil value.
|
|
3
|
+
2012-02-11 (1.6.6)
|
|
4
|
+
* Propagate src encoding to values made from it (fixes 1.9 mode converting
|
|
5
|
+
everything to ascii-8bit; harmless for 1.8 mode too) (Thomas E. Enebo
|
|
6
|
+
<tom.enebo@gmail.com>), should fix
|
|
7
|
+
https://github.com/flori/json/issues#issue/119.
|
|
8
|
+
* Fix https://github.com/flori/json/issues#issue/124 Thx to Jason Hutchens.
|
|
9
|
+
* Fix https://github.com/flori/json/issues#issue/117
|
|
1
10
|
2012-01-15 (1.6.5)
|
|
2
11
|
* Vit Ondruch <v.ondruch@tiscali.cz> reported a bug that shows up when using
|
|
3
12
|
optimisation under GCC 4.7. Thx to him, Bohuslav Kabrda
|
data/Gemfile
CHANGED
|
@@ -6,10 +6,10 @@ gemspec :name => 'json'
|
|
|
6
6
|
gemspec :name => 'json_pure'
|
|
7
7
|
gemspec :name => 'json-java'
|
|
8
8
|
|
|
9
|
-
group :development do
|
|
9
|
+
group :development, :test do
|
|
10
10
|
gem 'simplecov', :platform => :mri_19
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
group :test do
|
|
14
|
-
gem 'test-unit', :platform => :mri_19
|
|
14
|
+
gem 'test-unit', '2.4.7', :platform => :mri_19
|
|
15
15
|
end
|
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
|
@@ -4,21 +4,27 @@ rescue LoadError
|
|
|
4
4
|
end
|
|
5
5
|
|
|
6
6
|
require 'rbconfig'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
include\
|
|
8
|
+
begin
|
|
9
|
+
RbConfig
|
|
10
|
+
rescue NameError
|
|
11
|
+
Config
|
|
12
|
+
end
|
|
13
13
|
|
|
14
14
|
require 'rake/clean'
|
|
15
|
-
CLOBBER.include
|
|
15
|
+
CLOBBER.include 'doc', 'Gemfile.lock'
|
|
16
16
|
CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
|
|
17
17
|
FileList["ext/**/{Makefile,mkmf.log}"], 'build', 'dist', FileList['**/*.rbc'],
|
|
18
18
|
FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def,jar,class,dSYM}"],
|
|
19
19
|
FileList['java/src/**/*.class']
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
require 'rake/testtask'
|
|
22
|
+
class UndocumentedTestTask < Rake::TestTask
|
|
23
|
+
def desc(*) end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
|
|
27
|
+
BUNDLE = ENV['BUNDLE'] || %w[bundle].find { |c| system(c, '-v') }
|
|
22
28
|
PKG_NAME = 'json'
|
|
23
29
|
PKG_TITLE = 'JSON Implementation for Ruby'
|
|
24
30
|
PKG_VERSION = File.read('VERSION').chomp
|
|
@@ -44,19 +50,9 @@ JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
|
|
|
44
50
|
RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
|
|
45
51
|
RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
|
|
46
52
|
|
|
47
|
-
def myruby(*args, &block)
|
|
48
|
-
@myruby ||= File.join(CONFIG['bindir'], CONFIG['ruby_install_name'])
|
|
49
|
-
options = (Hash === args.last) ? args.pop : {}
|
|
50
|
-
if args.length > 1 then
|
|
51
|
-
sh(*([@myruby] + args + [options]), &block)
|
|
52
|
-
else
|
|
53
|
-
sh("#{@myruby} #{args.first}", options, &block)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
53
|
desc "Installing library (pure)"
|
|
58
54
|
task :install_pure => :version do
|
|
59
|
-
|
|
55
|
+
ruby 'install.rb'
|
|
60
56
|
end
|
|
61
57
|
|
|
62
58
|
task :install_ext_really do
|
|
@@ -75,11 +71,7 @@ desc "Installing library (extension)"
|
|
|
75
71
|
task :install_ext => [ :compile, :install_pure, :install_ext_really ]
|
|
76
72
|
|
|
77
73
|
desc "Installing library (extension)"
|
|
78
|
-
|
|
79
|
-
task :install => :install_pure
|
|
80
|
-
else
|
|
81
|
-
task :install => :install_ext
|
|
82
|
-
end
|
|
74
|
+
task :install => :install_ext
|
|
83
75
|
|
|
84
76
|
if defined?(Gem) and defined?(Gem::PackageTask)
|
|
85
77
|
spec_pure = Gem::Specification.new do |s|
|
|
@@ -92,7 +84,6 @@ if defined?(Gem) and defined?(Gem::PackageTask)
|
|
|
92
84
|
|
|
93
85
|
s.require_path = 'lib'
|
|
94
86
|
s.add_development_dependency 'permutation'
|
|
95
|
-
s.add_development_dependency 'bullshit'
|
|
96
87
|
s.add_development_dependency 'sdoc'
|
|
97
88
|
s.add_development_dependency 'rake', '~>0.9.2'
|
|
98
89
|
|
|
@@ -133,7 +124,6 @@ if defined?(Gem) and defined?(Gem::PackageTask)
|
|
|
133
124
|
s.require_paths << 'ext'
|
|
134
125
|
s.require_paths << 'lib'
|
|
135
126
|
s.add_development_dependency 'permutation'
|
|
136
|
-
s.add_development_dependency 'bullshit'
|
|
137
127
|
s.add_development_dependency 'sdoc'
|
|
138
128
|
|
|
139
129
|
s.extra_rdoc_files << 'README.rdoc'
|
|
@@ -182,18 +172,26 @@ EOT
|
|
|
182
172
|
end
|
|
183
173
|
|
|
184
174
|
desc "Testing library (pure ruby)"
|
|
185
|
-
task :test_pure => :clean
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
175
|
+
task :test_pure => [ :clean, :do_test_pure ]
|
|
176
|
+
|
|
177
|
+
UndocumentedTestTask.new do |t|
|
|
178
|
+
t.name = 'do_test_pure'
|
|
179
|
+
t.libs << 'lib'
|
|
180
|
+
t.test_files = FileList['tests/test_*.rb']
|
|
181
|
+
t.verbose = true
|
|
182
|
+
t.options = '-v'
|
|
189
183
|
end
|
|
190
184
|
|
|
191
185
|
desc "Testing library (pure ruby and extension)"
|
|
192
|
-
task :test
|
|
186
|
+
task :test do
|
|
187
|
+
sh "env JSON=pure #{BUNDLE} exec rake test_pure" or exit 1
|
|
188
|
+
sh "env JSON=ext #{BUNDLE} exec rake test_ext" or exit 1
|
|
189
|
+
end
|
|
193
190
|
|
|
194
191
|
namespace :gems do
|
|
192
|
+
desc 'Install all development gems'
|
|
195
193
|
task :install do
|
|
196
|
-
sh
|
|
194
|
+
sh "#{BUNDLE}"
|
|
197
195
|
end
|
|
198
196
|
end
|
|
199
197
|
|
|
@@ -250,9 +248,14 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
|
|
|
250
248
|
end
|
|
251
249
|
|
|
252
250
|
desc "Testing library (jruby)"
|
|
253
|
-
task :test_ext => :create_jar
|
|
254
|
-
|
|
255
|
-
|
|
251
|
+
task :test_ext => [ :create_jar, :do_test_ext ]
|
|
252
|
+
|
|
253
|
+
UndocumentedTestTask.new do |t|
|
|
254
|
+
t.name = 'do_test_ext'
|
|
255
|
+
t.libs << 'lib'
|
|
256
|
+
t.test_files = FileList['tests/test_*.rb']
|
|
257
|
+
t.verbose = true
|
|
258
|
+
t.options = '-v'
|
|
256
259
|
end
|
|
257
260
|
|
|
258
261
|
file JRUBY_PARSER_JAR => :compile do
|
|
@@ -304,7 +307,7 @@ else
|
|
|
304
307
|
|
|
305
308
|
file EXT_PARSER_DL => EXT_PARSER_SRC do
|
|
306
309
|
cd EXT_PARSER_DIR do
|
|
307
|
-
|
|
310
|
+
ruby 'extconf.rb'
|
|
308
311
|
sh MAKE
|
|
309
312
|
end
|
|
310
313
|
cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
|
|
@@ -312,36 +315,23 @@ else
|
|
|
312
315
|
|
|
313
316
|
file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
|
|
314
317
|
cd EXT_GENERATOR_DIR do
|
|
315
|
-
|
|
318
|
+
ruby 'extconf.rb'
|
|
316
319
|
sh MAKE
|
|
317
320
|
end
|
|
318
321
|
cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
|
|
319
322
|
end
|
|
320
323
|
|
|
321
324
|
desc "Testing library (extension)"
|
|
322
|
-
task :test_ext => :compile
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
325
|
+
task :test_ext => [ :compile, :do_test_ext ]
|
|
326
|
+
|
|
327
|
+
UndocumentedTestTask.new do |t|
|
|
328
|
+
t.name = 'do_test_ext'
|
|
329
|
+
t.libs << 'ext' << 'lib'
|
|
330
|
+
t.test_files = FileList['tests/test_*.rb']
|
|
331
|
+
t.verbose = true
|
|
332
|
+
t.options = '-v'
|
|
326
333
|
end
|
|
327
334
|
|
|
328
|
-
desc "Benchmarking parser"
|
|
329
|
-
task :benchmark_parser do
|
|
330
|
-
ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
|
|
331
|
-
myruby 'benchmarks/parser_benchmark.rb'
|
|
332
|
-
myruby 'benchmarks/parser2_benchmark.rb'
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
desc "Benchmarking generator"
|
|
336
|
-
task :benchmark_generator do
|
|
337
|
-
ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
|
|
338
|
-
myruby 'benchmarks/generator_benchmark.rb'
|
|
339
|
-
myruby 'benchmarks/generator2_benchmark.rb'
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
desc "Benchmarking library"
|
|
343
|
-
task :benchmark => [ :benchmark_parser, :benchmark_generator ]
|
|
344
|
-
|
|
345
335
|
desc "Create RDOC documentation"
|
|
346
336
|
task :doc => [ :version, EXT_PARSER_SRC ] do
|
|
347
337
|
sh "sdoc -o doc -t '#{PKG_TITLE}' -m README.rdoc README.rdoc lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.6.
|
|
1
|
+
1.6.7
|
|
@@ -852,6 +852,21 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj)
|
|
|
852
852
|
return fbuffer_to_s(buffer);
|
|
853
853
|
}
|
|
854
854
|
|
|
855
|
+
/*
|
|
856
|
+
* This function returns true if string is either a JSON array or JSON object.
|
|
857
|
+
* It might suffer from false positives, e. g. syntactically incorrect JSON in
|
|
858
|
+
* the string or certain UTF-8 characters on the right hand side.
|
|
859
|
+
*/
|
|
860
|
+
static int isArrayOrObject(VALUE string)
|
|
861
|
+
{
|
|
862
|
+
long string_len = RSTRING_LEN(string);
|
|
863
|
+
char *p = RSTRING_PTR(string), *q = p + string_len - 1;
|
|
864
|
+
if (string_len < 2) return 0;
|
|
865
|
+
for (; p < q && isspace(*p); p++);
|
|
866
|
+
for (; q > p && isspace(*q); q--);
|
|
867
|
+
return *p == '[' && *q == ']' || *p == '{' && *q == '}';
|
|
868
|
+
}
|
|
869
|
+
|
|
855
870
|
/*
|
|
856
871
|
* call-seq: generate(obj)
|
|
857
872
|
*
|
|
@@ -862,15 +877,9 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj)
|
|
|
862
877
|
static VALUE cState_generate(VALUE self, VALUE obj)
|
|
863
878
|
{
|
|
864
879
|
VALUE result = cState_partial_generate(self, obj);
|
|
865
|
-
VALUE re, args[2];
|
|
866
880
|
GET_STATE(self);
|
|
867
|
-
if (!state->quirks_mode) {
|
|
868
|
-
|
|
869
|
-
args[1] = CRegexp_MULTILINE;
|
|
870
|
-
re = rb_class_new_instance(2, args, rb_cRegexp);
|
|
871
|
-
if (NIL_P(rb_funcall(re, i_match, 1, result))) {
|
|
872
|
-
rb_raise(eGeneratorError, "only generation of JSON objects or arrays allowed");
|
|
873
|
-
}
|
|
881
|
+
if (!state->quirks_mode && !isArrayOrObject(result)) {
|
|
882
|
+
rb_raise(eGeneratorError, "only generation of JSON objects or arrays allowed");
|
|
874
883
|
}
|
|
875
884
|
return result;
|
|
876
885
|
}
|
|
@@ -1731,6 +1731,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
1731
1731
|
source = convert_encoding(StringValue(source));
|
|
1732
1732
|
}
|
|
1733
1733
|
json->current_nesting = 0;
|
|
1734
|
+
StringValue(source);
|
|
1734
1735
|
json->len = RSTRING_LEN(source);
|
|
1735
1736
|
json->source = RSTRING_PTR(source);;
|
|
1736
1737
|
PARSER_SET_REFERENCE(json, Vsource, source);
|
|
@@ -1738,7 +1739,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
1738
1739
|
}
|
|
1739
1740
|
|
|
1740
1741
|
|
|
1741
|
-
#line
|
|
1742
|
+
#line 1743 "parser.c"
|
|
1742
1743
|
static const int JSON_start = 1;
|
|
1743
1744
|
static const int JSON_first_final = 10;
|
|
1744
1745
|
static const int JSON_error = 0;
|
|
@@ -1746,7 +1747,7 @@ static const int JSON_error = 0;
|
|
|
1746
1747
|
static const int JSON_en_main = 1;
|
|
1747
1748
|
|
|
1748
1749
|
|
|
1749
|
-
#line
|
|
1750
|
+
#line 750 "parser.rl"
|
|
1750
1751
|
|
|
1751
1752
|
|
|
1752
1753
|
static VALUE cParser_parse_strict(VALUE self)
|
|
@@ -1757,16 +1758,16 @@ static VALUE cParser_parse_strict(VALUE self)
|
|
|
1757
1758
|
GET_PARSER;
|
|
1758
1759
|
|
|
1759
1760
|
|
|
1760
|
-
#line
|
|
1761
|
+
#line 1762 "parser.c"
|
|
1761
1762
|
{
|
|
1762
1763
|
cs = JSON_start;
|
|
1763
1764
|
}
|
|
1764
1765
|
|
|
1765
|
-
#line
|
|
1766
|
+
#line 760 "parser.rl"
|
|
1766
1767
|
p = json->source;
|
|
1767
1768
|
pe = p + json->len;
|
|
1768
1769
|
|
|
1769
|
-
#line
|
|
1770
|
+
#line 1771 "parser.c"
|
|
1770
1771
|
{
|
|
1771
1772
|
if ( p == pe )
|
|
1772
1773
|
goto _test_eof;
|
|
@@ -1822,7 +1823,7 @@ case 5:
|
|
|
1822
1823
|
goto st1;
|
|
1823
1824
|
goto st5;
|
|
1824
1825
|
tr3:
|
|
1825
|
-
#line
|
|
1826
|
+
#line 739 "parser.rl"
|
|
1826
1827
|
{
|
|
1827
1828
|
char *np;
|
|
1828
1829
|
json->current_nesting = 1;
|
|
@@ -1831,7 +1832,7 @@ tr3:
|
|
|
1831
1832
|
}
|
|
1832
1833
|
goto st10;
|
|
1833
1834
|
tr4:
|
|
1834
|
-
#line
|
|
1835
|
+
#line 732 "parser.rl"
|
|
1835
1836
|
{
|
|
1836
1837
|
char *np;
|
|
1837
1838
|
json->current_nesting = 1;
|
|
@@ -1843,7 +1844,7 @@ st10:
|
|
|
1843
1844
|
if ( ++p == pe )
|
|
1844
1845
|
goto _test_eof10;
|
|
1845
1846
|
case 10:
|
|
1846
|
-
#line
|
|
1847
|
+
#line 1848 "parser.c"
|
|
1847
1848
|
switch( (*p) ) {
|
|
1848
1849
|
case 13: goto st10;
|
|
1849
1850
|
case 32: goto st10;
|
|
@@ -1900,7 +1901,7 @@ case 9:
|
|
|
1900
1901
|
_out: {}
|
|
1901
1902
|
}
|
|
1902
1903
|
|
|
1903
|
-
#line
|
|
1904
|
+
#line 763 "parser.rl"
|
|
1904
1905
|
|
|
1905
1906
|
if (cs >= JSON_first_final && p == pe) {
|
|
1906
1907
|
return result;
|
|
@@ -1912,7 +1913,7 @@ case 9:
|
|
|
1912
1913
|
|
|
1913
1914
|
|
|
1914
1915
|
|
|
1915
|
-
#line
|
|
1916
|
+
#line 1917 "parser.c"
|
|
1916
1917
|
static const int JSON_quirks_mode_start = 1;
|
|
1917
1918
|
static const int JSON_quirks_mode_first_final = 10;
|
|
1918
1919
|
static const int JSON_quirks_mode_error = 0;
|
|
@@ -1920,7 +1921,7 @@ static const int JSON_quirks_mode_error = 0;
|
|
|
1920
1921
|
static const int JSON_quirks_mode_en_main = 1;
|
|
1921
1922
|
|
|
1922
1923
|
|
|
1923
|
-
#line
|
|
1924
|
+
#line 788 "parser.rl"
|
|
1924
1925
|
|
|
1925
1926
|
|
|
1926
1927
|
static VALUE cParser_parse_quirks_mode(VALUE self)
|
|
@@ -1931,16 +1932,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
|
|
|
1931
1932
|
GET_PARSER;
|
|
1932
1933
|
|
|
1933
1934
|
|
|
1934
|
-
#line
|
|
1935
|
+
#line 1936 "parser.c"
|
|
1935
1936
|
{
|
|
1936
1937
|
cs = JSON_quirks_mode_start;
|
|
1937
1938
|
}
|
|
1938
1939
|
|
|
1939
|
-
#line
|
|
1940
|
+
#line 798 "parser.rl"
|
|
1940
1941
|
p = json->source;
|
|
1941
1942
|
pe = p + json->len;
|
|
1942
1943
|
|
|
1943
|
-
#line
|
|
1944
|
+
#line 1945 "parser.c"
|
|
1944
1945
|
{
|
|
1945
1946
|
if ( p == pe )
|
|
1946
1947
|
goto _test_eof;
|
|
@@ -1974,7 +1975,7 @@ st0:
|
|
|
1974
1975
|
cs = 0;
|
|
1975
1976
|
goto _out;
|
|
1976
1977
|
tr2:
|
|
1977
|
-
#line
|
|
1978
|
+
#line 780 "parser.rl"
|
|
1978
1979
|
{
|
|
1979
1980
|
char *np = JSON_parse_value(json, p, pe, &result);
|
|
1980
1981
|
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
|
|
@@ -1984,7 +1985,7 @@ st10:
|
|
|
1984
1985
|
if ( ++p == pe )
|
|
1985
1986
|
goto _test_eof10;
|
|
1986
1987
|
case 10:
|
|
1987
|
-
#line
|
|
1988
|
+
#line 1989 "parser.c"
|
|
1988
1989
|
switch( (*p) ) {
|
|
1989
1990
|
case 13: goto st10;
|
|
1990
1991
|
case 32: goto st10;
|
|
@@ -2073,7 +2074,7 @@ case 9:
|
|
|
2073
2074
|
_out: {}
|
|
2074
2075
|
}
|
|
2075
2076
|
|
|
2076
|
-
#line
|
|
2077
|
+
#line 801 "parser.rl"
|
|
2077
2078
|
|
|
2078
2079
|
if (cs >= JSON_quirks_mode_first_final && p == pe) {
|
|
2079
2080
|
return result;
|
|
@@ -715,6 +715,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
715
715
|
source = convert_encoding(StringValue(source));
|
|
716
716
|
}
|
|
717
717
|
json->current_nesting = 0;
|
|
718
|
+
StringValue(source);
|
|
718
719
|
json->len = RSTRING_LEN(source);
|
|
719
720
|
json->source = RSTRING_PTR(source);;
|
|
720
721
|
PARSER_SET_REFERENCE(json, Vsource, source);
|