json 1.8.6 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of json might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.travis.yml +5 -3
- data/CHANGES +5 -5
- data/Gemfile +3 -1
- data/README.md +131 -84
- data/Rakefile +17 -10
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +1 -52
- data/ext/json/ext/generator/generator.h +0 -5
- data/ext/json/ext/parser/extconf.rb +3 -0
- data/ext/json/ext/parser/parser.c +304 -458
- data/ext/json/ext/parser/parser.h +0 -1
- data/ext/json/ext/parser/parser.rl +35 -152
- data/ext/json/extconf.rb +0 -1
- data/java/src/json/ext/Generator.java +2 -5
- data/java/src/json/ext/GeneratorState.java +2 -54
- data/java/src/json/ext/OptionsReader.java +1 -1
- data/java/src/json/ext/Parser.java +109 -409
- data/java/src/json/ext/Parser.rl +24 -117
- data/java/src/json/ext/RuntimeInfo.java +0 -4
- data/json.gemspec +0 -0
- data/json_pure.gemspec +7 -7
- data/lib/json.rb +1 -0
- data/lib/json/add/bigdecimal.rb +1 -0
- data/lib/json/add/complex.rb +2 -1
- data/lib/json/add/core.rb +1 -0
- data/lib/json/add/date.rb +1 -1
- data/lib/json/add/date_time.rb +1 -1
- data/lib/json/add/exception.rb +1 -1
- data/lib/json/add/ostruct.rb +1 -1
- data/lib/json/add/range.rb +1 -1
- data/lib/json/add/rational.rb +1 -0
- data/lib/json/add/regexp.rb +1 -1
- data/lib/json/add/struct.rb +1 -1
- data/lib/json/add/symbol.rb +1 -1
- data/lib/json/add/time.rb +1 -1
- data/lib/json/common.rb +24 -52
- data/lib/json/ext.rb +0 -6
- data/lib/json/generic_object.rb +5 -4
- data/lib/json/pure.rb +2 -8
- data/lib/json/pure/generator.rb +51 -123
- data/lib/json/pure/parser.rb +28 -80
- data/lib/json/version.rb +2 -1
- data/references/rfc7159.txt +899 -0
- data/tests/fixtures/obsolete_fail1.json +1 -0
- data/tests/{test_json_addition.rb → json_addition_test.rb} +22 -25
- data/tests/json_common_interface_test.rb +126 -0
- data/tests/json_encoding_test.rb +105 -0
- data/tests/json_ext_parser_test.rb +15 -0
- data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +5 -8
- data/tests/{test_json_generate.rb → json_generator_test.rb} +65 -37
- data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
- data/tests/json_parser_test.rb +448 -0
- data/tests/json_string_matching_test.rb +38 -0
- data/tests/test_helper.rb +23 -0
- data/tools/fuzz.rb +1 -9
- metadata +19 -32
- data/TODO +0 -1
- data/tests/fixtures/fail1.json +0 -1
- data/tests/setup_variant.rb +0 -11
- data/tests/test_json.rb +0 -519
- data/tests/test_json_encoding.rb +0 -65
- data/tests/test_json_string_matching.rb +0 -39
- data/tests/test_json_unicode.rb +0 -72
@@ -2,7 +2,7 @@
|
|
2
2
|
#include "parser.h"
|
3
3
|
|
4
4
|
#if defined HAVE_RUBY_ENCODING_H
|
5
|
-
# define EXC_ENCODING
|
5
|
+
# define EXC_ENCODING rb_utf8_encoding(),
|
6
6
|
# ifndef HAVE_RB_ENC_RAISE
|
7
7
|
static void
|
8
8
|
enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
|
@@ -87,17 +87,11 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
|
|
87
87
|
return len;
|
88
88
|
}
|
89
89
|
|
90
|
-
#ifdef HAVE_RUBY_ENCODING_H
|
91
|
-
static rb_encoding *UTF_8, *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
|
92
|
-
#else
|
93
|
-
static ID i_iconv;
|
94
|
-
#endif
|
95
|
-
|
96
90
|
static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
|
97
91
|
static VALUE CNaN, CInfinity, CMinusInfinity;
|
98
92
|
|
99
93
|
static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
100
|
-
i_chr, i_max_nesting, i_allow_nan, i_symbolize_names,
|
94
|
+
i_chr, i_max_nesting, i_allow_nan, i_symbolize_names,
|
101
95
|
i_object_class, i_array_class, i_key_p, i_deep_const_get, i_match,
|
102
96
|
i_match_string, i_aset, i_aref, i_leftshift;
|
103
97
|
|
@@ -243,7 +237,7 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
243
237
|
|
244
238
|
action parse_number {
|
245
239
|
char *np;
|
246
|
-
if(pe > fpc +
|
240
|
+
if(pe > fpc + 8 && !strncmp(MinusInfinity, fpc, 9)) {
|
247
241
|
if (json->allow_nan) {
|
248
242
|
*result = CMinusInfinity;
|
249
243
|
fexec p + 10;
|
@@ -277,7 +271,7 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
277
271
|
|
278
272
|
action exit { fhold; fbreak; }
|
279
273
|
|
280
|
-
main := (
|
274
|
+
main := ignore* (
|
281
275
|
Vnull @parse_null |
|
282
276
|
Vfalse @parse_false |
|
283
277
|
Vtrue @parse_true |
|
@@ -287,7 +281,7 @@ main := (
|
|
287
281
|
begin_string >parse_string |
|
288
282
|
begin_array >parse_array |
|
289
283
|
begin_object >parse_object
|
290
|
-
) %*exit;
|
284
|
+
) ignore* %*exit;
|
291
285
|
}%%
|
292
286
|
|
293
287
|
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
@@ -548,6 +542,8 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
548
542
|
|
549
543
|
if (json->symbolize_names && json->parsing_name) {
|
550
544
|
*result = rb_str_intern(*result);
|
545
|
+
} else {
|
546
|
+
rb_str_resize(*result, RSTRING_LEN(*result));
|
551
547
|
}
|
552
548
|
if (cs >= JSON_string_first_final) {
|
553
549
|
return p + 1;
|
@@ -570,41 +566,13 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
570
566
|
|
571
567
|
static VALUE convert_encoding(VALUE source)
|
572
568
|
{
|
573
|
-
const char *ptr = RSTRING_PTR(source);
|
574
|
-
long len = RSTRING_LEN(source);
|
575
|
-
if (len < 2) {
|
576
|
-
rb_raise(eParserError, "A JSON text must at least contain two octets!");
|
577
|
-
}
|
578
569
|
#ifdef HAVE_RUBY_ENCODING_H
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
source = rb_str_conv_enc(source, UTF_16BE, rb_utf8_encoding());
|
586
|
-
} else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
|
587
|
-
source = rb_str_conv_enc(source, UTF_32LE, rb_utf8_encoding());
|
588
|
-
} else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
|
589
|
-
source = rb_str_conv_enc(source, UTF_16LE, rb_utf8_encoding());
|
590
|
-
} else {
|
591
|
-
source = rb_str_dup(source);
|
592
|
-
FORCE_UTF8(source);
|
593
|
-
}
|
594
|
-
} else {
|
595
|
-
source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding());
|
596
|
-
}
|
597
|
-
}
|
598
|
-
#else
|
599
|
-
if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
|
600
|
-
source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-32be"), source);
|
601
|
-
} else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
|
602
|
-
source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-16be"), source);
|
603
|
-
} else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
|
604
|
-
source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-32le"), source);
|
605
|
-
} else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
|
606
|
-
source = rb_funcall(mJSON, i_iconv, 3, rb_str_new2("utf-8"), rb_str_new2("utf-16le"), source);
|
607
|
-
}
|
570
|
+
rb_encoding *enc = rb_enc_get(source);
|
571
|
+
if (enc == rb_ascii8bit_encoding()) {
|
572
|
+
FORCE_UTF8(source);
|
573
|
+
} else {
|
574
|
+
source = rb_str_conv_enc(source, NULL, rb_utf8_encoding());
|
575
|
+
}
|
608
576
|
#endif
|
609
577
|
return source;
|
610
578
|
}
|
@@ -627,8 +595,9 @@ static VALUE convert_encoding(VALUE source)
|
|
627
595
|
* defiance of RFC 4627 to be parsed by the Parser. This option defaults to
|
628
596
|
* false.
|
629
597
|
* * *symbolize_names*: If set to true, returns symbols for the names
|
630
|
-
* (keys) in a JSON object. Otherwise strings are returned, which is
|
631
|
-
* the default.
|
598
|
+
* (keys) in a JSON object. Otherwise strings are returned, which is
|
599
|
+
* also the default. It's not possible to use this option in
|
600
|
+
* conjunction with the *create_additions* option.
|
632
601
|
* * *create_additions*: If set to false, the Parser doesn't create
|
633
602
|
* additions even if a matching class and create_id was found. This option
|
634
603
|
* defaults to false.
|
@@ -679,19 +648,17 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
679
648
|
} else {
|
680
649
|
json->symbolize_names = 0;
|
681
650
|
}
|
682
|
-
tmp = ID2SYM(i_quirks_mode);
|
683
|
-
if (option_given_p(opts, tmp)) {
|
684
|
-
VALUE quirks_mode = rb_hash_aref(opts, tmp);
|
685
|
-
json->quirks_mode = RTEST(quirks_mode) ? 1 : 0;
|
686
|
-
} else {
|
687
|
-
json->quirks_mode = 0;
|
688
|
-
}
|
689
651
|
tmp = ID2SYM(i_create_additions);
|
690
652
|
if (option_given_p(opts, tmp)) {
|
691
653
|
json->create_additions = RTEST(rb_hash_aref(opts, tmp));
|
692
654
|
} else {
|
693
655
|
json->create_additions = 0;
|
694
656
|
}
|
657
|
+
if (json->symbolize_names && json->create_additions) {
|
658
|
+
rb_raise(rb_eArgError,
|
659
|
+
"options :symbolize_names and :create_additions cannot be "
|
660
|
+
" used in conjunction");
|
661
|
+
}
|
695
662
|
tmp = ID2SYM(i_create_id);
|
696
663
|
if (option_given_p(opts, tmp)) {
|
697
664
|
json->create_id = rb_hash_aref(opts, tmp);
|
@@ -728,11 +695,9 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
728
695
|
json->object_class = Qnil;
|
729
696
|
json->array_class = Qnil;
|
730
697
|
}
|
731
|
-
StringValue(source);
|
732
|
-
if (!json->quirks_mode) {
|
733
|
-
source = convert_encoding(source);
|
734
|
-
}
|
698
|
+
source = convert_encoding(StringValue(source));
|
735
699
|
json->current_nesting = 0;
|
700
|
+
StringValue(source);
|
736
701
|
json->len = RSTRING_LEN(source);
|
737
702
|
json->source = RSTRING_PTR(source);;
|
738
703
|
json->Vsource = source;
|
@@ -746,54 +711,6 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
746
711
|
|
747
712
|
include JSON_common;
|
748
713
|
|
749
|
-
action parse_object {
|
750
|
-
char *np;
|
751
|
-
json->current_nesting = 1;
|
752
|
-
np = JSON_parse_object(json, fpc, pe, &result);
|
753
|
-
if (np == NULL) { fhold; fbreak; } else fexec np;
|
754
|
-
}
|
755
|
-
|
756
|
-
action parse_array {
|
757
|
-
char *np;
|
758
|
-
json->current_nesting = 1;
|
759
|
-
np = JSON_parse_array(json, fpc, pe, &result);
|
760
|
-
if (np == NULL) { fhold; fbreak; } else fexec np;
|
761
|
-
}
|
762
|
-
|
763
|
-
main := ignore* (
|
764
|
-
begin_object >parse_object |
|
765
|
-
begin_array >parse_array
|
766
|
-
) ignore*;
|
767
|
-
}%%
|
768
|
-
|
769
|
-
static VALUE cParser_parse_strict(VALUE self)
|
770
|
-
{
|
771
|
-
char *p, *pe;
|
772
|
-
int cs = EVIL;
|
773
|
-
VALUE result = Qnil;
|
774
|
-
GET_PARSER;
|
775
|
-
|
776
|
-
%% write init;
|
777
|
-
p = json->source;
|
778
|
-
pe = p + json->len;
|
779
|
-
%% write exec;
|
780
|
-
|
781
|
-
if (cs >= JSON_first_final && p == pe) {
|
782
|
-
return result;
|
783
|
-
} else {
|
784
|
-
rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
|
785
|
-
return Qnil;
|
786
|
-
}
|
787
|
-
}
|
788
|
-
|
789
|
-
|
790
|
-
%%{
|
791
|
-
machine JSON_quirks_mode;
|
792
|
-
|
793
|
-
write data;
|
794
|
-
|
795
|
-
include JSON_common;
|
796
|
-
|
797
714
|
action parse_value {
|
798
715
|
char *np = JSON_parse_value(json, fpc, pe, &result);
|
799
716
|
if (np == NULL) { fhold; fbreak; } else fexec np;
|
@@ -804,26 +721,6 @@ static VALUE cParser_parse_strict(VALUE self)
|
|
804
721
|
) ignore*;
|
805
722
|
}%%
|
806
723
|
|
807
|
-
static VALUE cParser_parse_quirks_mode(VALUE self)
|
808
|
-
{
|
809
|
-
char *p, *pe;
|
810
|
-
int cs = EVIL;
|
811
|
-
VALUE result = Qnil;
|
812
|
-
GET_PARSER;
|
813
|
-
|
814
|
-
%% write init;
|
815
|
-
p = json->source;
|
816
|
-
pe = p + json->len;
|
817
|
-
%% write exec;
|
818
|
-
|
819
|
-
if (cs >= JSON_quirks_mode_first_final && p == pe) {
|
820
|
-
return result;
|
821
|
-
} else {
|
822
|
-
rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
|
823
|
-
return Qnil;
|
824
|
-
}
|
825
|
-
}
|
826
|
-
|
827
724
|
/*
|
828
725
|
* call-seq: parse()
|
829
726
|
*
|
@@ -832,12 +729,21 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
|
|
832
729
|
*/
|
833
730
|
static VALUE cParser_parse(VALUE self)
|
834
731
|
{
|
732
|
+
char *p, *pe;
|
733
|
+
int cs = EVIL;
|
734
|
+
VALUE result = Qnil;
|
835
735
|
GET_PARSER;
|
836
736
|
|
837
|
-
|
838
|
-
|
737
|
+
%% write init;
|
738
|
+
p = json->source;
|
739
|
+
pe = p + json->len;
|
740
|
+
%% write exec;
|
741
|
+
|
742
|
+
if (cs >= JSON_first_final && p == pe) {
|
743
|
+
return result;
|
839
744
|
} else {
|
840
|
-
|
745
|
+
rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
|
746
|
+
return Qnil;
|
841
747
|
}
|
842
748
|
}
|
843
749
|
|
@@ -895,18 +801,6 @@ static VALUE cParser_source(VALUE self)
|
|
895
801
|
return rb_str_dup(json->Vsource);
|
896
802
|
}
|
897
803
|
|
898
|
-
/*
|
899
|
-
* call-seq: quirks_mode?()
|
900
|
-
*
|
901
|
-
* Returns a true, if this parser is in quirks_mode, false otherwise.
|
902
|
-
*/
|
903
|
-
static VALUE cParser_quirks_mode_p(VALUE self)
|
904
|
-
{
|
905
|
-
GET_PARSER;
|
906
|
-
return json->quirks_mode ? Qtrue : Qfalse;
|
907
|
-
}
|
908
|
-
|
909
|
-
|
910
804
|
void Init_parser(void)
|
911
805
|
{
|
912
806
|
rb_require("json/common");
|
@@ -919,7 +813,6 @@ void Init_parser(void)
|
|
919
813
|
rb_define_method(cParser, "initialize", cParser_initialize, -1);
|
920
814
|
rb_define_method(cParser, "parse", cParser_parse, 0);
|
921
815
|
rb_define_method(cParser, "source", cParser_source, 0);
|
922
|
-
rb_define_method(cParser, "quirks_mode?", cParser_quirks_mode_p, 0);
|
923
816
|
|
924
817
|
CNaN = rb_const_get(mJSON, rb_intern("NaN"));
|
925
818
|
CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
|
@@ -933,7 +826,6 @@ void Init_parser(void)
|
|
933
826
|
i_max_nesting = rb_intern("max_nesting");
|
934
827
|
i_allow_nan = rb_intern("allow_nan");
|
935
828
|
i_symbolize_names = rb_intern("symbolize_names");
|
936
|
-
i_quirks_mode = rb_intern("quirks_mode");
|
937
829
|
i_object_class = rb_intern("object_class");
|
938
830
|
i_array_class = rb_intern("array_class");
|
939
831
|
i_match = rb_intern("match");
|
@@ -943,15 +835,6 @@ void Init_parser(void)
|
|
943
835
|
i_aset = rb_intern("[]=");
|
944
836
|
i_aref = rb_intern("[]");
|
945
837
|
i_leftshift = rb_intern("<<");
|
946
|
-
#ifdef HAVE_RUBY_ENCODING_H
|
947
|
-
UTF_8 = rb_utf8_encoding();
|
948
|
-
UTF_16BE = rb_enc_find("utf-16be");
|
949
|
-
UTF_16LE = rb_enc_find("utf-16le");
|
950
|
-
UTF_32BE = rb_enc_find("utf-32be");
|
951
|
-
UTF_32LE = rb_enc_find("utf-32le");
|
952
|
-
#else
|
953
|
-
i_iconv = rb_intern("iconv");
|
954
|
-
#endif
|
955
838
|
}
|
956
839
|
|
957
840
|
/*
|
data/ext/json/extconf.rb
CHANGED
@@ -172,9 +172,7 @@ public final class Generator {
|
|
172
172
|
result = RubyString.newString(session.getRuntime(), buffer);
|
173
173
|
ThreadContext context = session.getContext();
|
174
174
|
RuntimeInfo info = session.getInfo();
|
175
|
-
|
176
|
-
result.force_encoding(context, info.utf8.get());
|
177
|
-
}
|
175
|
+
result.force_encoding(context, info.utf8.get());
|
178
176
|
return result;
|
179
177
|
}
|
180
178
|
|
@@ -381,8 +379,7 @@ public final class Generator {
|
|
381
379
|
RuntimeInfo info = session.getInfo();
|
382
380
|
RubyString src;
|
383
381
|
|
384
|
-
if (info.
|
385
|
-
object.encoding(session.getContext()) != info.utf8.get()) {
|
382
|
+
if (object.encoding(session.getContext()) != info.utf8.get()) {
|
386
383
|
src = (RubyString)object.encode(session.getContext(),
|
387
384
|
info.utf8.get());
|
388
385
|
} else {
|
@@ -207,45 +207,11 @@ public class GeneratorState extends RubyObject {
|
|
207
207
|
@JRubyMethod
|
208
208
|
public IRubyObject generate(ThreadContext context, IRubyObject obj) {
|
209
209
|
RubyString result = Generator.generateJson(context, obj, this);
|
210
|
-
if (!quirksMode && !objectOrArrayLiteral(result)) {
|
211
|
-
throw Utils.newException(context, Utils.M_GENERATOR_ERROR,
|
212
|
-
"only generation of JSON objects or arrays allowed");
|
213
|
-
}
|
214
210
|
RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
|
215
|
-
|
216
|
-
result.force_encoding(context, info.utf8.get());
|
217
|
-
}
|
211
|
+
result.force_encoding(context, info.utf8.get());
|
218
212
|
return result;
|
219
213
|
}
|
220
214
|
|
221
|
-
/**
|
222
|
-
* Ensures the given string is in the form "[...]" or "{...}", being
|
223
|
-
* possibly surrounded by white space.
|
224
|
-
* The string's encoding must be ASCII-compatible.
|
225
|
-
* @param value
|
226
|
-
* @return
|
227
|
-
*/
|
228
|
-
private static boolean objectOrArrayLiteral(RubyString value) {
|
229
|
-
ByteList bl = value.getByteList();
|
230
|
-
int len = bl.length();
|
231
|
-
|
232
|
-
for (int pos = 0; pos < len - 1; pos++) {
|
233
|
-
int b = bl.get(pos);
|
234
|
-
if (Character.isWhitespace(b)) continue;
|
235
|
-
|
236
|
-
// match the opening brace
|
237
|
-
switch (b) {
|
238
|
-
case '[':
|
239
|
-
return matchClosingBrace(bl, pos, len, ']');
|
240
|
-
case '{':
|
241
|
-
return matchClosingBrace(bl, pos, len, '}');
|
242
|
-
default:
|
243
|
-
return false;
|
244
|
-
}
|
245
|
-
}
|
246
|
-
return false;
|
247
|
-
}
|
248
|
-
|
249
215
|
private static boolean matchClosingBrace(ByteList bl, int pos, int len,
|
250
216
|
int brace) {
|
251
217
|
for (int endPos = len - 1; endPos > pos; endPos--) {
|
@@ -398,17 +364,6 @@ public class GeneratorState extends RubyObject {
|
|
398
364
|
return context.getRuntime().newBoolean(asciiOnly);
|
399
365
|
}
|
400
366
|
|
401
|
-
@JRubyMethod(name="quirks_mode")
|
402
|
-
public RubyBoolean quirks_mode_get(ThreadContext context) {
|
403
|
-
return context.getRuntime().newBoolean(quirksMode);
|
404
|
-
}
|
405
|
-
|
406
|
-
@JRubyMethod(name="quirks_mode=")
|
407
|
-
public IRubyObject quirks_mode_set(IRubyObject quirks_mode) {
|
408
|
-
quirksMode = quirks_mode.isTrue();
|
409
|
-
return quirks_mode.getRuntime().newBoolean(quirksMode);
|
410
|
-
}
|
411
|
-
|
412
367
|
@JRubyMethod(name="buffer_initial_length")
|
413
368
|
public RubyInteger buffer_initial_length_get(ThreadContext context) {
|
414
369
|
return context.getRuntime().newFixnum(bufferInitialLength);
|
@@ -421,11 +376,6 @@ public class GeneratorState extends RubyObject {
|
|
421
376
|
return buffer_initial_length;
|
422
377
|
}
|
423
378
|
|
424
|
-
@JRubyMethod(name="quirks_mode?")
|
425
|
-
public RubyBoolean quirks_mode_p(ThreadContext context) {
|
426
|
-
return context.getRuntime().newBoolean(quirksMode);
|
427
|
-
}
|
428
|
-
|
429
379
|
public int getDepth() {
|
430
380
|
return depth;
|
431
381
|
}
|
@@ -444,7 +394,7 @@ public class GeneratorState extends RubyObject {
|
|
444
394
|
private ByteList prepareByteList(ThreadContext context, IRubyObject value) {
|
445
395
|
RubyString str = value.convertToString();
|
446
396
|
RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
|
447
|
-
if (
|
397
|
+
if (str.encoding(context) != info.utf8.get()) {
|
448
398
|
str = (RubyString)str.encode(context, info.utf8.get());
|
449
399
|
}
|
450
400
|
return str.getByteList().dup();
|
@@ -480,7 +430,6 @@ public class GeneratorState extends RubyObject {
|
|
480
430
|
maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
|
481
431
|
allowNaN = opts.getBool("allow_nan", DEFAULT_ALLOW_NAN);
|
482
432
|
asciiOnly = opts.getBool("ascii_only", DEFAULT_ASCII_ONLY);
|
483
|
-
quirksMode = opts.getBool("quirks_mode", DEFAULT_QUIRKS_MODE);
|
484
433
|
bufferInitialLength = opts.getInt("buffer_initial_length", DEFAULT_BUFFER_INITIAL_LENGTH);
|
485
434
|
|
486
435
|
depth = opts.getInt("depth", 0);
|
@@ -507,7 +456,6 @@ public class GeneratorState extends RubyObject {
|
|
507
456
|
result.op_aset(context, runtime.newSymbol("array_nl"), array_nl_get(context));
|
508
457
|
result.op_aset(context, runtime.newSymbol("allow_nan"), allow_nan_p(context));
|
509
458
|
result.op_aset(context, runtime.newSymbol("ascii_only"), ascii_only_p(context));
|
510
|
-
result.op_aset(context, runtime.newSymbol("quirks_mode"), quirks_mode_p(context));
|
511
459
|
result.op_aset(context, runtime.newSymbol("max_nesting"), max_nesting_get(context));
|
512
460
|
result.op_aset(context, runtime.newSymbol("depth"), depth_get(context));
|
513
461
|
result.op_aset(context, runtime.newSymbol("buffer_initial_length"), buffer_initial_length_get(context));
|
@@ -84,7 +84,7 @@ final class OptionsReader {
|
|
84
84
|
|
85
85
|
RubyString str = value.convertToString();
|
86
86
|
RuntimeInfo info = getRuntimeInfo();
|
87
|
-
if (
|
87
|
+
if (str.encoding(context) != info.utf8.get()) {
|
88
88
|
str = (RubyString)str.encode(context, info.utf8.get());
|
89
89
|
}
|
90
90
|
return str;
|