oj 3.14.2 → 3.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -1
  3. data/README.md +0 -1
  4. data/ext/oj/buf.h +2 -2
  5. data/ext/oj/cache.c +16 -16
  6. data/ext/oj/cache8.c +7 -7
  7. data/ext/oj/circarray.c +2 -1
  8. data/ext/oj/circarray.h +2 -2
  9. data/ext/oj/code.c +2 -2
  10. data/ext/oj/code.h +2 -2
  11. data/ext/oj/compat.c +6 -14
  12. data/ext/oj/custom.c +1 -1
  13. data/ext/oj/debug.c +3 -9
  14. data/ext/oj/dump.c +16 -16
  15. data/ext/oj/dump_compat.c +551 -576
  16. data/ext/oj/dump_leaf.c +3 -5
  17. data/ext/oj/dump_object.c +35 -36
  18. data/ext/oj/dump_strict.c +2 -4
  19. data/ext/oj/encoder.c +1 -1
  20. data/ext/oj/err.c +2 -13
  21. data/ext/oj/err.h +9 -12
  22. data/ext/oj/extconf.rb +1 -1
  23. data/ext/oj/fast.c +24 -38
  24. data/ext/oj/intern.c +38 -42
  25. data/ext/oj/intern.h +3 -7
  26. data/ext/oj/mem.c +211 -217
  27. data/ext/oj/mem.h +10 -10
  28. data/ext/oj/mimic_json.c +18 -24
  29. data/ext/oj/object.c +5 -5
  30. data/ext/oj/odd.c +2 -1
  31. data/ext/oj/odd.h +4 -4
  32. data/ext/oj/oj.c +60 -81
  33. data/ext/oj/oj.h +53 -54
  34. data/ext/oj/parse.c +55 -118
  35. data/ext/oj/parse.h +5 -10
  36. data/ext/oj/parser.c +7 -8
  37. data/ext/oj/parser.h +7 -8
  38. data/ext/oj/rails.c +28 -59
  39. data/ext/oj/reader.c +5 -9
  40. data/ext/oj/reader.h +1 -1
  41. data/ext/oj/resolve.c +3 -4
  42. data/ext/oj/rxclass.c +1 -1
  43. data/ext/oj/rxclass.h +1 -1
  44. data/ext/oj/saj.c +4 -4
  45. data/ext/oj/saj2.c +32 -49
  46. data/ext/oj/saj2.h +1 -1
  47. data/ext/oj/scp.c +3 -14
  48. data/ext/oj/sparse.c +18 -67
  49. data/ext/oj/stream_writer.c +5 -18
  50. data/ext/oj/strict.c +7 -13
  51. data/ext/oj/string_writer.c +6 -14
  52. data/ext/oj/trace.h +27 -16
  53. data/ext/oj/usual.c +62 -61
  54. data/ext/oj/usual.h +6 -6
  55. data/ext/oj/util.h +1 -1
  56. data/ext/oj/val_stack.h +4 -4
  57. data/ext/oj/wab.c +7 -9
  58. data/lib/oj/active_support_helper.rb +0 -1
  59. data/lib/oj/bag.rb +7 -1
  60. data/lib/oj/easy_hash.rb +4 -5
  61. data/lib/oj/error.rb +0 -1
  62. data/lib/oj/json.rb +4 -2
  63. data/lib/oj/mimic.rb +4 -2
  64. data/lib/oj/state.rb +8 -5
  65. data/lib/oj/version.rb +1 -2
  66. data/lib/oj.rb +0 -1
  67. data/test/_test_active.rb +0 -1
  68. data/test/_test_active_mimic.rb +0 -1
  69. data/test/_test_mimic_rails.rb +0 -1
  70. data/test/activerecord/result_test.rb +5 -6
  71. data/test/bar.rb +3 -3
  72. data/test/files.rb +1 -1
  73. data/test/foo.rb +5 -48
  74. data/test/helper.rb +1 -4
  75. data/test/isolated/shared.rb +3 -2
  76. data/test/json_gem/json_addition_test.rb +2 -2
  77. data/test/json_gem/json_common_interface_test.rb +4 -4
  78. data/test/json_gem/json_encoding_test.rb +0 -0
  79. data/test/json_gem/json_ext_parser_test.rb +1 -0
  80. data/test/json_gem/json_fixtures_test.rb +3 -2
  81. data/test/json_gem/json_generator_test.rb +43 -32
  82. data/test/json_gem/json_generic_object_test.rb +11 -11
  83. data/test/json_gem/json_parser_test.rb +46 -46
  84. data/test/json_gem/json_string_matching_test.rb +9 -9
  85. data/test/mem.rb +7 -7
  86. data/test/perf.rb +2 -2
  87. data/test/perf_compat.rb +1 -1
  88. data/test/perf_fast.rb +1 -1
  89. data/test/perf_file.rb +2 -2
  90. data/test/perf_object.rb +1 -2
  91. data/test/perf_once.rb +4 -4
  92. data/test/perf_parser.rb +1 -2
  93. data/test/perf_saj.rb +1 -2
  94. data/test/perf_scp.rb +1 -1
  95. data/test/perf_simple.rb +3 -3
  96. data/test/perf_strict.rb +1 -1
  97. data/test/perf_wab.rb +1 -1
  98. data/test/sample/change.rb +0 -1
  99. data/test/sample/dir.rb +0 -1
  100. data/test/sample/doc.rb +0 -1
  101. data/test/sample/file.rb +0 -1
  102. data/test/sample/group.rb +0 -1
  103. data/test/sample/hasprops.rb +0 -1
  104. data/test/sample/layer.rb +0 -1
  105. data/test/sample/rect.rb +0 -1
  106. data/test/sample/shape.rb +0 -1
  107. data/test/sample/text.rb +0 -1
  108. data/test/sample.rb +2 -3
  109. data/test/sample_json.rb +0 -1
  110. data/test/test_compat.rb +11 -9
  111. data/test/test_custom.rb +5 -9
  112. data/test/test_debian.rb +1 -1
  113. data/test/test_fast.rb +10 -20
  114. data/test/test_file.rb +8 -8
  115. data/test/test_integer_range.rb +2 -2
  116. data/test/test_null.rb +5 -3
  117. data/test/test_object.rb +6 -5
  118. data/test/test_parser_saj.rb +23 -21
  119. data/test/test_parser_usual.rb +3 -3
  120. data/test/test_saj.rb +2 -0
  121. data/test/test_scp.rb +6 -6
  122. data/test/test_strict.rb +6 -4
  123. data/test/test_various.rb +21 -24
  124. data/test/test_wab.rb +6 -5
  125. data/test/test_writer.rb +1 -1
  126. metadata +17 -26
  127. data/test/activesupport4/decoding_test.rb +0 -108
  128. data/test/activesupport4/encoding_test.rb +0 -531
  129. data/test/activesupport4/test_helper.rb +0 -41
  130. data/test/activesupport5/abstract_unit.rb +0 -45
  131. data/test/activesupport5/decoding_test.rb +0 -133
  132. data/test/activesupport5/encoding_test.rb +0 -500
  133. data/test/activesupport5/encoding_test_cases.rb +0 -98
  134. data/test/activesupport5/test_helper.rb +0 -72
  135. data/test/activesupport5/time_zone_test_helpers.rb +0 -39
data/ext/oj/sparse.c CHANGED
@@ -7,10 +7,10 @@
7
7
  #include <string.h>
8
8
  #include <unistd.h>
9
9
 
10
- #include "mem.h"
11
10
  #include "buf.h"
12
11
  #include "encode.h"
13
12
  #include "intern.h" // for oj_strndup()
13
+ #include "mem.h"
14
14
  #include "oj.h"
15
15
  #include "parse.h"
16
16
  #include "val_stack.h"
@@ -213,11 +213,7 @@ static void read_escaped_str(ParseInfo pi) {
213
213
  }
214
214
  while ('\"' != (c = reader_get(&pi->rd))) {
215
215
  if ('\0' == c) {
216
- oj_set_error_at(pi,
217
- oj_parse_error_class,
218
- __FILE__,
219
- __LINE__,
220
- "quoted string not terminated");
216
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "quoted string not terminated");
221
217
  buf_cleanup(&buf);
222
218
  return;
223
219
  } else if ('\\' == c) {
@@ -250,11 +246,7 @@ static void read_escaped_str(ParseInfo pi) {
250
246
  reader_backup(&pi->rd);
251
247
  break;
252
248
  }
253
- oj_set_error_at(pi,
254
- oj_parse_error_class,
255
- __FILE__,
256
- __LINE__,
257
- "invalid escaped character");
249
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "invalid escaped character");
258
250
  buf_cleanup(&buf);
259
251
  return;
260
252
  }
@@ -278,11 +270,7 @@ static void read_escaped_str(ParseInfo pi) {
278
270
  buf_append(&buf, c);
279
271
  break;
280
272
  }
281
- oj_set_error_at(pi,
282
- oj_parse_error_class,
283
- __FILE__,
284
- __LINE__,
285
- "invalid escaped character");
273
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "invalid escaped character");
286
274
  buf_cleanup(&buf);
287
275
  return;
288
276
  }
@@ -346,11 +334,7 @@ static void read_str(ParseInfo pi) {
346
334
  reader_protect(&pi->rd);
347
335
  while ('\"' != (c = reader_get(&pi->rd))) {
348
336
  if ('\0' == c) {
349
- oj_set_error_at(pi,
350
- oj_parse_error_class,
351
- __FILE__,
352
- __LINE__,
353
- "quoted string not terminated");
337
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "quoted string not terminated");
354
338
  return;
355
339
  } else if ('\\' == c) {
356
340
  reader_backup(&pi->rd);
@@ -430,7 +414,7 @@ static void read_num(ParseInfo pi) {
430
414
  ni.no_big = !pi->options.compat_bigdec;
431
415
  ni.bigdec_load = pi->options.compat_bigdec;
432
416
  } else {
433
- ni.no_big = (FloatDec == pi->options.bigdec_load || FastDec == pi->options.bigdec_load ||
417
+ ni.no_big = (FloatDec == pi->options.bigdec_load || FastDec == pi->options.bigdec_load ||
434
418
  RubyDec == pi->options.bigdec_load);
435
419
  ni.bigdec_load = pi->options.bigdec_load;
436
420
  }
@@ -444,18 +428,10 @@ static void read_num(ParseInfo pi) {
444
428
  }
445
429
  if ('I' == c) {
446
430
  if (No == pi->options.allow_nan) {
447
- oj_set_error_at(pi,
448
- oj_parse_error_class,
449
- __FILE__,
450
- __LINE__,
451
- "not a number or other value");
431
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "not a number or other value");
452
432
  return;
453
433
  } else if (0 != reader_expect(&pi->rd, "nfinity")) {
454
- oj_set_error_at(pi,
455
- oj_parse_error_class,
456
- __FILE__,
457
- __LINE__,
458
- "not a number or other value");
434
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "not a number or other value");
459
435
  return;
460
436
  }
461
437
  ni.infinity = 1;
@@ -477,11 +453,7 @@ static void read_num(ParseInfo pi) {
477
453
 
478
454
  if (0 < d) {
479
455
  if (zero1 && CompatMode == pi->options.mode) {
480
- oj_set_error_at(pi,
481
- oj_parse_error_class,
482
- __FILE__,
483
- __LINE__,
484
- "not a number");
456
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "not a number");
485
457
  return;
486
458
  }
487
459
  zero1 = false;
@@ -592,7 +564,7 @@ static void read_nan(ParseInfo pi) {
592
564
  ni.no_big = !pi->options.compat_bigdec;
593
565
  ni.bigdec_load = pi->options.compat_bigdec;
594
566
  } else {
595
- ni.no_big = (FloatDec == pi->options.bigdec_load || FastDec == pi->options.bigdec_load ||
567
+ ni.no_big = (FloatDec == pi->options.bigdec_load || FastDec == pi->options.bigdec_load ||
596
568
  RubyDec == pi->options.bigdec_load);
597
569
  ni.bigdec_load = pi->options.bigdec_load;
598
570
  }
@@ -717,11 +689,7 @@ void oj_sparse2(ParseInfo pi) {
717
689
  case '"': read_str(pi); break;
718
690
  case '+':
719
691
  if (CompatMode == pi->options.mode) {
720
- oj_set_error_at(pi,
721
- oj_parse_error_class,
722
- __FILE__,
723
- __LINE__,
724
- "unexpected character");
692
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "unexpected character");
725
693
  return;
726
694
  }
727
695
  pi->cur--;
@@ -746,11 +714,7 @@ void oj_sparse2(ParseInfo pi) {
746
714
  reader_backup(&pi->rd);
747
715
  read_num(pi);
748
716
  } else {
749
- oj_set_error_at(pi,
750
- oj_parse_error_class,
751
- __FILE__,
752
- __LINE__,
753
- "unexpected character");
717
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "unexpected character");
754
718
  return;
755
719
  }
756
720
  break;
@@ -758,11 +722,7 @@ void oj_sparse2(ParseInfo pi) {
758
722
  if (Yes == pi->options.allow_nan) {
759
723
  read_nan(pi);
760
724
  } else {
761
- oj_set_error_at(pi,
762
- oj_parse_error_class,
763
- __FILE__,
764
- __LINE__,
765
- "unexpected character");
725
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "unexpected character");
766
726
  return;
767
727
  }
768
728
  break;
@@ -800,8 +760,7 @@ void oj_sparse2(ParseInfo pi) {
800
760
  ni.no_big = !pi->options.compat_bigdec;
801
761
  ni.bigdec_load = pi->options.compat_bigdec;
802
762
  } else {
803
- ni.no_big = (FloatDec == pi->options.bigdec_load ||
804
- FastDec == pi->options.bigdec_load ||
763
+ ni.no_big = (FloatDec == pi->options.bigdec_load || FastDec == pi->options.bigdec_load ||
805
764
  RubyDec == pi->options.bigdec_load);
806
765
  ni.bigdec_load = pi->options.bigdec_load;
807
766
  }
@@ -814,13 +773,7 @@ void oj_sparse2(ParseInfo pi) {
814
773
  case '/': skip_comment(pi); break;
815
774
  case '\0': return;
816
775
  default:
817
- oj_set_error_at(pi,
818
- oj_parse_error_class,
819
- __FILE__,
820
- __LINE__,
821
- "unexpected character '%c' [0x%02x]",
822
- c,
823
- c);
776
+ oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "unexpected character '%c' [0x%02x]", c, c);
824
777
  return;
825
778
  }
826
779
  if (err_has(&pi->err)) {
@@ -879,8 +832,8 @@ oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd) {
879
832
  } else {
880
833
  rb_raise(rb_eTypeError, "Nil is not a valid JSON source.");
881
834
  }
882
- } else if (CompatMode == pi->options.mode && T_STRING == rb_type(input) &&
883
- No == pi->options.nilnil && 0 == RSTRING_LEN(input)) {
835
+ } else if (CompatMode == pi->options.mode && T_STRING == rb_type(input) && No == pi->options.nilnil &&
836
+ 0 == RSTRING_LEN(input)) {
884
837
  rb_raise(oj_json_parser_error_class, "An empty string is not a valid JSON string.");
885
838
  }
886
839
  if (rb_block_given_p()) {
@@ -933,9 +886,7 @@ oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd) {
933
886
  switch (v->next) {
934
887
  case NEXT_ARRAY_NEW:
935
888
  case NEXT_ARRAY_ELEMENT:
936
- case NEXT_ARRAY_COMMA:
937
- oj_set_error_at(pi, err_class, __FILE__, __LINE__, "Array not terminated");
938
- break;
889
+ case NEXT_ARRAY_COMMA: oj_set_error_at(pi, err_class, __FILE__, __LINE__, "Array not terminated"); break;
939
890
  case NEXT_HASH_NEW:
940
891
  case NEXT_HASH_KEY:
941
892
  case NEXT_HASH_COLON:
@@ -4,8 +4,8 @@
4
4
  #include <errno.h>
5
5
  #include <ruby.h>
6
6
 
7
- #include "mem.h"
8
7
  #include "encode.h"
8
+ #include "mem.h"
9
9
 
10
10
  extern VALUE Oj;
11
11
 
@@ -83,8 +83,8 @@ static VALUE stream_writer_new(int argc, VALUE *argv, VALUE self) {
83
83
  if (oj_stringio_class == clas) {
84
84
  type = STRING_IO;
85
85
  #if !IS_WINDOWS
86
- } else if (rb_respond_to(stream, oj_fileno_id) &&
87
- Qnil != (s = rb_funcall(stream, oj_fileno_id, 0)) && 0 != (fd = FIX2INT(s))) {
86
+ } else if (rb_respond_to(stream, oj_fileno_id) && Qnil != (s = rb_funcall(stream, oj_fileno_id, 0)) &&
87
+ 0 != (fd = FIX2INT(s))) {
88
88
  type = FILE_IO;
89
89
  #endif
90
90
  } else if (rb_respond_to(stream, oj_write_id)) {
@@ -102,15 +102,10 @@ static VALUE stream_writer_new(int argc, VALUE *argv, VALUE self) {
102
102
  rb_gc_register_address(&buffer_size_sym);
103
103
  }
104
104
  if (Qnil != (v = rb_hash_lookup(argv[1], buffer_size_sym))) {
105
- #ifdef RUBY_INTEGER_UNIFICATION
106
105
  if (rb_cInteger != rb_obj_class(v)) {
106
+ OJ_R_FREE(sw);
107
107
  rb_raise(rb_eArgError, ":buffer size must be a Integer.");
108
108
  }
109
- #else
110
- if (T_FIXNUM != rb_type(v)) {
111
- rb_raise(rb_eArgError, ":buffer size must be a Integer.");
112
- }
113
- #endif
114
109
  buf_size = FIX2INT(v);
115
110
  }
116
111
  oj_str_writer_init(&sw->sw, buf_size);
@@ -140,7 +135,6 @@ static VALUE stream_writer_new(int argc, VALUE *argv, VALUE self) {
140
135
  static VALUE stream_writer_push_key(VALUE self, VALUE key) {
141
136
  StreamWriter sw = (StreamWriter)DATA_PTR(self);
142
137
 
143
- rb_check_type(key, T_STRING);
144
138
  oj_str_writer_push_key(&sw->sw, StringValuePtr(key));
145
139
  if (sw->flush_limit < sw->sw.out.cur - sw->sw.out.buf) {
146
140
  stream_writer_write(sw);
@@ -165,7 +159,6 @@ static VALUE stream_writer_push_object(int argc, VALUE *argv, VALUE self) {
165
159
  if (Qnil == argv[0]) {
166
160
  oj_str_writer_push_object(&sw->sw, 0);
167
161
  } else {
168
- rb_check_type(argv[0], T_STRING);
169
162
  oj_str_writer_push_object(&sw->sw, StringValuePtr(argv[0]));
170
163
  }
171
164
  break;
@@ -194,7 +187,6 @@ static VALUE stream_writer_push_array(int argc, VALUE *argv, VALUE self) {
194
187
  if (Qnil == argv[0]) {
195
188
  oj_str_writer_push_array(&sw->sw, 0);
196
189
  } else {
197
- rb_check_type(argv[0], T_STRING);
198
190
  oj_str_writer_push_array(&sw->sw, StringValuePtr(argv[0]));
199
191
  }
200
192
  break;
@@ -222,7 +214,6 @@ static VALUE stream_writer_push_value(int argc, VALUE *argv, VALUE self) {
222
214
  if (Qnil == argv[1]) {
223
215
  oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, 0);
224
216
  } else {
225
- rb_check_type(argv[1], T_STRING);
226
217
  oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, StringValuePtr(argv[1]));
227
218
  }
228
219
  break;
@@ -246,17 +237,13 @@ static VALUE stream_writer_push_value(int argc, VALUE *argv, VALUE self) {
246
237
  static VALUE stream_writer_push_json(int argc, VALUE *argv, VALUE self) {
247
238
  StreamWriter sw = (StreamWriter)DATA_PTR(self);
248
239
 
249
- rb_check_type(argv[0], T_STRING);
250
240
  switch (argc) {
251
241
  case 1: oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0); break;
252
242
  case 2:
253
243
  if (Qnil == argv[1]) {
254
244
  oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0);
255
245
  } else {
256
- rb_check_type(argv[1], T_STRING);
257
- oj_str_writer_push_json((StrWriter)DATA_PTR(self),
258
- StringValuePtr(*argv),
259
- StringValuePtr(argv[1]));
246
+ oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), StringValuePtr(argv[1]));
260
247
  }
261
248
  break;
262
249
  default: rb_raise(rb_eArgError, "Wrong number of argument to 'push_json'."); break;
data/ext/oj/strict.c CHANGED
@@ -17,7 +17,7 @@ VALUE oj_cstr_to_value(const char *str, size_t len, size_t cache_str) {
17
17
  volatile VALUE rstr = Qnil;
18
18
 
19
19
  if (len < cache_str) {
20
- rstr = oj_str_intern(str, len);
20
+ rstr = oj_str_intern(str, len);
21
21
  } else {
22
22
  rstr = rb_str_new(str, len);
23
23
  rstr = oj_encode(rstr);
@@ -37,14 +37,14 @@ VALUE oj_calc_hash_key(ParseInfo pi, Val parent) {
37
37
  } else {
38
38
  rkey = rb_str_new(parent->key, parent->klen);
39
39
  rkey = oj_encode(rkey);
40
- OBJ_FREEZE(rkey); // frozen when used as a Hash key anyway
40
+ OBJ_FREEZE(rkey); // frozen when used as a Hash key anyway
41
41
  }
42
42
  return rkey;
43
43
  }
44
44
  if (Yes == pi->options.sym_key) {
45
- rkey = oj_sym_intern(parent->key, parent->klen);
45
+ rkey = oj_sym_intern(parent->key, parent->klen);
46
46
  } else {
47
- rkey = oj_str_intern(parent->key, parent->klen);
47
+ rkey = oj_str_intern(parent->key, parent->klen);
48
48
  }
49
49
  return rkey;
50
50
  }
@@ -98,9 +98,7 @@ static VALUE start_hash(ParseInfo pi) {
98
98
  static void hash_set_cstr(ParseInfo pi, Val parent, const char *str, size_t len, const char *orig) {
99
99
  volatile VALUE rstr = oj_cstr_to_value(str, len, (size_t)pi->options.cache_str);
100
100
 
101
- rb_hash_aset(stack_peek(&pi->stack)->val,
102
- oj_calc_hash_key(pi, parent),
103
- rstr);
101
+ rb_hash_aset(stack_peek(&pi->stack)->val, oj_calc_hash_key(pi, parent), rstr);
104
102
  if (RB_UNLIKELY(Yes == pi->options.trace)) {
105
103
  oj_trace_parse_call("set_string", pi, __FILE__, __LINE__, rstr);
106
104
  }
@@ -113,18 +111,14 @@ static void hash_set_num(ParseInfo pi, Val parent, NumInfo ni) {
113
111
  oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "not a number or other value");
114
112
  }
115
113
  v = oj_num_as_value(ni);
116
- rb_hash_aset(stack_peek(&pi->stack)->val,
117
- oj_calc_hash_key(pi, parent),
118
- v);
114
+ rb_hash_aset(stack_peek(&pi->stack)->val, oj_calc_hash_key(pi, parent), v);
119
115
  if (RB_UNLIKELY(Yes == pi->options.trace)) {
120
116
  oj_trace_parse_call("set_number", pi, __FILE__, __LINE__, v);
121
117
  }
122
118
  }
123
119
 
124
120
  static void hash_set_value(ParseInfo pi, Val parent, VALUE value) {
125
- rb_hash_aset(stack_peek(&pi->stack)->val,
126
- oj_calc_hash_key(pi, parent),
127
- value);
121
+ rb_hash_aset(stack_peek(&pi->stack)->val, oj_calc_hash_key(pi, parent), value);
128
122
  if (RB_UNLIKELY(Yes == pi->options.trace)) {
129
123
  oj_trace_parse_call("set_value", pi, __FILE__, __LINE__, value);
130
124
  }
@@ -1,9 +1,9 @@
1
1
  // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
2
2
  // Licensed under the MIT License. See LICENSE file in the project root for license details.
3
3
 
4
- #include "mem.h"
5
4
  #include "dump.h"
6
5
  #include "encode.h"
6
+ #include "mem.h"
7
7
 
8
8
  extern VALUE Oj;
9
9
 
@@ -56,10 +56,10 @@ void oj_str_writer_init(StrWriter sw, int buf_size) {
56
56
  }
57
57
  // Must be allocated. Using the out.stack_buffer results in double frees
58
58
  // and I haven't figured out why yet.
59
- sw->out.buf = OJ_R_ALLOC_N(char, buf_size);
60
- sw->out.cur = sw->out.buf;
61
- sw->out.end = sw->out.buf + buf_size - BUFFER_EXTRA;
62
- sw->out.allocated = true;
59
+ sw->out.buf = OJ_R_ALLOC_N(char, buf_size);
60
+ sw->out.cur = sw->out.buf;
61
+ sw->out.end = sw->out.buf + buf_size - BUFFER_EXTRA;
62
+ sw->out.allocated = true;
63
63
 
64
64
  *sw->out.cur = '\0';
65
65
  sw->out.circ_cache = NULL;
@@ -281,7 +281,6 @@ static VALUE str_writer_new(int argc, VALUE *argv, VALUE self) {
281
281
  static VALUE str_writer_push_key(VALUE self, VALUE key) {
282
282
  StrWriter sw = (StrWriter)DATA_PTR(self);
283
283
 
284
- rb_check_type(key, T_STRING);
285
284
  oj_str_writer_push_key(sw, StringValuePtr(key));
286
285
 
287
286
  return Qnil;
@@ -303,7 +302,6 @@ static VALUE str_writer_push_object(int argc, VALUE *argv, VALUE self) {
303
302
  if (Qnil == argv[0]) {
304
303
  oj_str_writer_push_object(sw, 0);
305
304
  } else {
306
- rb_check_type(argv[0], T_STRING);
307
305
  oj_str_writer_push_object(sw, StringValuePtr(argv[0]));
308
306
  }
309
307
  break;
@@ -332,7 +330,6 @@ static VALUE str_writer_push_array(int argc, VALUE *argv, VALUE self) {
332
330
  if (Qnil == argv[0]) {
333
331
  oj_str_writer_push_array(sw, 0);
334
332
  } else {
335
- rb_check_type(argv[0], T_STRING);
336
333
  oj_str_writer_push_array(sw, StringValuePtr(argv[0]));
337
334
  }
338
335
  break;
@@ -359,7 +356,6 @@ static VALUE str_writer_push_value(int argc, VALUE *argv, VALUE self) {
359
356
  if (Qnil == argv[1]) {
360
357
  oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, 0);
361
358
  } else {
362
- rb_check_type(argv[1], T_STRING);
363
359
  oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, StringValuePtr(argv[1]));
364
360
  }
365
361
  break;
@@ -378,17 +374,13 @@ static VALUE str_writer_push_value(int argc, VALUE *argv, VALUE self) {
378
374
  * - *key* [_String_] the key if adding to an object in the JSON document
379
375
  */
380
376
  static VALUE str_writer_push_json(int argc, VALUE *argv, VALUE self) {
381
- rb_check_type(argv[0], T_STRING);
382
377
  switch (argc) {
383
378
  case 1: oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0); break;
384
379
  case 2:
385
380
  if (Qnil == argv[1]) {
386
381
  oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0);
387
382
  } else {
388
- rb_check_type(argv[1], T_STRING);
389
- oj_str_writer_push_json((StrWriter)DATA_PTR(self),
390
- StringValuePtr(*argv),
391
- StringValuePtr(argv[1]));
383
+ oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), StringValuePtr(argv[1]));
392
384
  }
393
385
  break;
394
386
  default: rb_raise(rb_eArgError, "Wrong number of argument to 'push_json'."); break;
data/ext/oj/trace.h CHANGED
@@ -17,28 +17,39 @@ typedef enum {
17
17
 
18
18
  struct _parseInfo;
19
19
 
20
- extern void
21
- oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, TraceWhere where);
20
+ extern void oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, TraceWhere where);
22
21
  extern void oj_trace_parse_in(const char *func, struct _parseInfo *pi, const char *file, int line);
23
- extern void
24
- oj_trace_parse_call(const char *func, struct _parseInfo *pi, const char *file, int line, VALUE obj);
22
+ extern void oj_trace_parse_call(const char *func, struct _parseInfo *pi, const char *file, int line, VALUE obj);
25
23
  extern void oj_trace_parse_hash_end(struct _parseInfo *pi, const char *file, int line);
26
24
  extern void oj_trace_parse_array_end(struct _parseInfo *pi, const char *file, int line);
27
25
 
28
-
29
26
  #ifdef OJ_ENABLE_TRACE_LOG
30
- #define TRACE(option, func, obj, depth, where) if (RB_UNLIKELY(Yes == option)) { oj_trace(func, obj, __FILE__, __LINE__, depth, where); }
31
- #define TRACE_PARSE_IN(option, func, pi) if (RB_UNLIKELY(Yes == option)) { oj_trace_parse_in(func, pi, __FILE__, __LINE__); }
32
- #define TRACE_PARSE_CALL(option, func, pi, obj) if (RB_UNLIKELY(Yes == option)) { oj_trace_parse_call(func, pi, __FILE__, __LINE__, obj); }
33
- #define TRACE_PARSE_HASH_END(option, pi) if (RB_UNLIKELY(Yes == option)) { oj_trace_parse_hash_end(pi, __FILE__, __LINE__); }
34
- #define TRACE_PARSE_ARRAY_END(option, pi) if (RB_UNLIKELY(Yes == option)) { oj_trace_parse_array_end(pi, __FILE__, __LINE__); }
27
+ #define TRACE(option, func, obj, depth, where) \
28
+ if (RB_UNLIKELY(Yes == option)) { \
29
+ oj_trace(func, obj, __FILE__, __LINE__, depth, where); \
30
+ }
31
+ #define TRACE_PARSE_IN(option, func, pi) \
32
+ if (RB_UNLIKELY(Yes == option)) { \
33
+ oj_trace_parse_in(func, pi, __FILE__, __LINE__); \
34
+ }
35
+ #define TRACE_PARSE_CALL(option, func, pi, obj) \
36
+ if (RB_UNLIKELY(Yes == option)) { \
37
+ oj_trace_parse_call(func, pi, __FILE__, __LINE__, obj); \
38
+ }
39
+ #define TRACE_PARSE_HASH_END(option, pi) \
40
+ if (RB_UNLIKELY(Yes == option)) { \
41
+ oj_trace_parse_hash_end(pi, __FILE__, __LINE__); \
42
+ }
43
+ #define TRACE_PARSE_ARRAY_END(option, pi) \
44
+ if (RB_UNLIKELY(Yes == option)) { \
45
+ oj_trace_parse_array_end(pi, __FILE__, __LINE__); \
46
+ }
35
47
  #else
36
- #define TRACE(option, func, obj, depth, where)
37
- #define TRACE_PARSE_IN(option, func, pi)
38
- #define TRACE_PARSE_CALL(option, func, pi, obj)
39
- #define TRACE_PARSE_HASH_END(option, pi)
40
- #define TRACE_PARSE_ARRAY_END(option, pi)
48
+ #define TRACE(option, func, obj, depth, where)
49
+ #define TRACE_PARSE_IN(option, func, pi)
50
+ #define TRACE_PARSE_CALL(option, func, pi, obj)
51
+ #define TRACE_PARSE_HASH_END(option, pi)
52
+ #define TRACE_PARSE_ARRAY_END(option, pi)
41
53
  #endif
42
54
 
43
-
44
55
  #endif /* OJ_TRACE_H */