oj 3.9.1 → 3.16.11

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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1452 -0
  3. data/README.md +21 -6
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +50 -68
  6. data/ext/oj/cache.c +329 -0
  7. data/ext/oj/cache.h +22 -0
  8. data/ext/oj/cache8.c +60 -62
  9. data/ext/oj/cache8.h +9 -36
  10. data/ext/oj/circarray.c +38 -42
  11. data/ext/oj/circarray.h +12 -13
  12. data/ext/oj/code.c +158 -179
  13. data/ext/oj/code.h +20 -22
  14. data/ext/oj/compat.c +145 -205
  15. data/ext/oj/custom.c +740 -880
  16. data/ext/oj/debug.c +126 -0
  17. data/ext/oj/dump.c +1145 -844
  18. data/ext/oj/dump.h +71 -57
  19. data/ext/oj/dump_compat.c +575 -655
  20. data/ext/oj/dump_leaf.c +96 -186
  21. data/ext/oj/dump_object.c +533 -660
  22. data/ext/oj/dump_strict.c +306 -340
  23. data/ext/oj/encode.h +4 -33
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +28 -28
  26. data/ext/oj/err.h +39 -42
  27. data/ext/oj/extconf.rb +28 -7
  28. data/ext/oj/fast.c +1052 -1113
  29. data/ext/oj/intern.c +313 -0
  30. data/ext/oj/intern.h +22 -0
  31. data/ext/oj/mem.c +318 -0
  32. data/ext/oj/mem.h +53 -0
  33. data/ext/oj/mimic_json.c +471 -430
  34. data/ext/oj/object.c +532 -580
  35. data/ext/oj/odd.c +156 -142
  36. data/ext/oj/odd.h +25 -26
  37. data/ext/oj/oj.c +1346 -961
  38. data/ext/oj/oj.h +307 -290
  39. data/ext/oj/parse.c +954 -858
  40. data/ext/oj/parse.h +74 -72
  41. data/ext/oj/parser.c +1600 -0
  42. data/ext/oj/parser.h +103 -0
  43. data/ext/oj/rails.c +819 -836
  44. data/ext/oj/rails.h +8 -11
  45. data/ext/oj/reader.c +136 -147
  46. data/ext/oj/reader.h +69 -83
  47. data/ext/oj/resolve.c +41 -63
  48. data/ext/oj/resolve.h +4 -6
  49. data/ext/oj/rxclass.c +69 -72
  50. data/ext/oj/rxclass.h +12 -13
  51. data/ext/oj/saj.c +440 -485
  52. data/ext/oj/saj2.c +584 -0
  53. data/ext/oj/saj2.h +23 -0
  54. data/ext/oj/scp.c +79 -118
  55. data/ext/oj/simd.h +10 -0
  56. data/ext/oj/sparse.c +739 -709
  57. data/ext/oj/stream_writer.c +141 -175
  58. data/ext/oj/strict.c +103 -128
  59. data/ext/oj/string_writer.c +244 -261
  60. data/ext/oj/trace.c +34 -41
  61. data/ext/oj/trace.h +42 -15
  62. data/ext/oj/usual.c +1218 -0
  63. data/ext/oj/usual.h +69 -0
  64. data/ext/oj/util.c +107 -107
  65. data/ext/oj/util.h +4 -3
  66. data/ext/oj/val_stack.c +61 -78
  67. data/ext/oj/val_stack.h +80 -114
  68. data/ext/oj/validate.c +46 -0
  69. data/ext/oj/wab.c +316 -361
  70. data/lib/oj/active_support_helper.rb +1 -3
  71. data/lib/oj/bag.rb +8 -1
  72. data/lib/oj/easy_hash.rb +9 -9
  73. data/lib/oj/error.rb +1 -2
  74. data/lib/oj/json.rb +162 -150
  75. data/lib/oj/mimic.rb +54 -20
  76. data/lib/oj/saj.rb +20 -6
  77. data/lib/oj/schandler.rb +5 -4
  78. data/lib/oj/state.rb +12 -8
  79. data/lib/oj/version.rb +1 -2
  80. data/lib/oj.rb +2 -8
  81. data/pages/Compatibility.md +1 -1
  82. data/pages/Encoding.md +1 -1
  83. data/pages/InstallOptions.md +20 -0
  84. data/pages/JsonGem.md +15 -0
  85. data/pages/Modes.md +9 -3
  86. data/pages/Options.md +62 -12
  87. data/pages/Parser.md +309 -0
  88. data/pages/Rails.md +73 -22
  89. metadata +68 -192
  90. data/ext/oj/hash.c +0 -163
  91. data/ext/oj/hash.h +0 -46
  92. data/ext/oj/hash_test.c +0 -512
  93. data/test/_test_active.rb +0 -76
  94. data/test/_test_active_mimic.rb +0 -96
  95. data/test/_test_mimic_rails.rb +0 -126
  96. data/test/activerecord/result_test.rb +0 -27
  97. data/test/activesupport4/decoding_test.rb +0 -108
  98. data/test/activesupport4/encoding_test.rb +0 -531
  99. data/test/activesupport4/test_helper.rb +0 -41
  100. data/test/activesupport5/decoding_test.rb +0 -125
  101. data/test/activesupport5/encoding_test.rb +0 -485
  102. data/test/activesupport5/encoding_test_cases.rb +0 -90
  103. data/test/activesupport5/test_helper.rb +0 -50
  104. data/test/activesupport5/time_zone_test_helpers.rb +0 -24
  105. data/test/bar.rb +0 -25
  106. data/test/files.rb +0 -29
  107. data/test/foo.rb +0 -21
  108. data/test/helper.rb +0 -26
  109. data/test/isolated/shared.rb +0 -308
  110. data/test/isolated/test_mimic_after.rb +0 -13
  111. data/test/isolated/test_mimic_alone.rb +0 -12
  112. data/test/isolated/test_mimic_as_json.rb +0 -45
  113. data/test/isolated/test_mimic_before.rb +0 -13
  114. data/test/isolated/test_mimic_define.rb +0 -28
  115. data/test/isolated/test_mimic_rails_after.rb +0 -22
  116. data/test/isolated/test_mimic_rails_before.rb +0 -21
  117. data/test/isolated/test_mimic_redefine.rb +0 -15
  118. data/test/json_gem/json_addition_test.rb +0 -216
  119. data/test/json_gem/json_common_interface_test.rb +0 -148
  120. data/test/json_gem/json_encoding_test.rb +0 -107
  121. data/test/json_gem/json_ext_parser_test.rb +0 -20
  122. data/test/json_gem/json_fixtures_test.rb +0 -35
  123. data/test/json_gem/json_generator_test.rb +0 -383
  124. data/test/json_gem/json_generic_object_test.rb +0 -90
  125. data/test/json_gem/json_parser_test.rb +0 -470
  126. data/test/json_gem/json_string_matching_test.rb +0 -42
  127. data/test/json_gem/test_helper.rb +0 -18
  128. data/test/perf.rb +0 -107
  129. data/test/perf_compat.rb +0 -130
  130. data/test/perf_fast.rb +0 -164
  131. data/test/perf_file.rb +0 -64
  132. data/test/perf_object.rb +0 -138
  133. data/test/perf_saj.rb +0 -109
  134. data/test/perf_scp.rb +0 -151
  135. data/test/perf_simple.rb +0 -287
  136. data/test/perf_strict.rb +0 -145
  137. data/test/perf_wab.rb +0 -131
  138. data/test/sample/change.rb +0 -14
  139. data/test/sample/dir.rb +0 -19
  140. data/test/sample/doc.rb +0 -36
  141. data/test/sample/file.rb +0 -48
  142. data/test/sample/group.rb +0 -16
  143. data/test/sample/hasprops.rb +0 -16
  144. data/test/sample/layer.rb +0 -12
  145. data/test/sample/line.rb +0 -20
  146. data/test/sample/oval.rb +0 -10
  147. data/test/sample/rect.rb +0 -10
  148. data/test/sample/shape.rb +0 -35
  149. data/test/sample/text.rb +0 -20
  150. data/test/sample.rb +0 -54
  151. data/test/sample_json.rb +0 -37
  152. data/test/test_compat.rb +0 -509
  153. data/test/test_custom.rb +0 -503
  154. data/test/test_debian.rb +0 -53
  155. data/test/test_fast.rb +0 -470
  156. data/test/test_file.rb +0 -239
  157. data/test/test_gc.rb +0 -49
  158. data/test/test_hash.rb +0 -29
  159. data/test/test_integer_range.rb +0 -73
  160. data/test/test_null.rb +0 -376
  161. data/test/test_object.rb +0 -1018
  162. data/test/test_saj.rb +0 -186
  163. data/test/test_scp.rb +0 -433
  164. data/test/test_strict.rb +0 -410
  165. data/test/test_various.rb +0 -741
  166. data/test/test_wab.rb +0 -307
  167. data/test/test_writer.rb +0 -380
  168. data/test/tests.rb +0 -24
  169. data/test/tests_mimic.rb +0 -14
  170. data/test/tests_mimic_addition.rb +0 -7
  171. data/test/zoo.rb +0 -13
data/ext/oj/parse.h CHANGED
@@ -1,7 +1,5 @@
1
- /* parse.h
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file in the project root for license details.
5
3
 
6
4
  #ifndef OJ_PARSE_H
7
5
  #define OJ_PARSE_H
@@ -10,100 +8,104 @@
10
8
  #include <stdio.h>
11
9
  #include <string.h>
12
10
 
13
- #include "ruby.h"
14
- #include "oj.h"
15
- #include "val_stack.h"
16
11
  #include "circarray.h"
12
+ #include "oj.h"
17
13
  #include "reader.h"
14
+ #include "ruby.h"
18
15
  #include "rxclass.h"
16
+ #include "val_stack.h"
19
17
 
20
18
  struct _rxClass;
19
+ struct _parseInfo;
21
20
 
22
21
  typedef struct _numInfo {
23
- int64_t i;
24
- int64_t num;
25
- int64_t div;
26
- int64_t di;
27
- const char *str;
28
- size_t len;
29
- long exp;
30
- int big;
31
- int infinity;
32
- int nan;
33
- int neg;
34
- int hasExp;
35
- int no_big;
22
+ int64_t i;
23
+ int64_t num;
24
+ int64_t div;
25
+ int64_t di;
26
+ const char *str;
27
+ size_t len;
28
+ long exp;
29
+ struct _parseInfo *pi;
30
+ int big;
31
+ int infinity;
32
+ int nan;
33
+ int neg;
34
+ int has_exp;
35
+ int no_big;
36
+ int bigdec_load;
36
37
  } *NumInfo;
37
38
 
38
39
  typedef struct _parseInfo {
39
40
  // used for the string parser
40
- const char *json;
41
- const char *cur;
42
- const char *end;
41
+ const char *json;
42
+ const char *cur;
43
+ const char *end;
43
44
  // used for the stream parser
44
- struct _reader rd;
45
-
46
- struct _err err;
47
- struct _options options;
48
- VALUE handler;
49
- struct _valStack stack;
50
- CircArray circ_array;
51
- struct _rxClass str_rx;
52
- int expect_value;
53
- int max_depth; // just for the json gem
54
- VALUE proc;
55
- VALUE (*start_hash)(struct _parseInfo *pi);
56
- void (*end_hash)(struct _parseInfo *pi);
57
- VALUE (*hash_key)(struct _parseInfo *pi, const char *key, size_t klen);
58
- void (*hash_set_cstr)(struct _parseInfo *pi, Val kval, const char *str, size_t len, const char *orig);
59
- void (*hash_set_num)(struct _parseInfo *pi, Val kval, NumInfo ni);
60
- void (*hash_set_value)(struct _parseInfo *pi, Val kval, VALUE value);
61
-
62
- VALUE (*start_array)(struct _parseInfo *pi);
63
- void (*end_array)(struct _parseInfo *pi);
64
- void (*array_append_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
65
- void (*array_append_num)(struct _parseInfo *pi, NumInfo ni);
66
- void (*array_append_value)(struct _parseInfo *pi, VALUE value);
67
-
68
- void (*add_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
69
- void (*add_num)(struct _parseInfo *pi, NumInfo ni);
70
- void (*add_value)(struct _parseInfo *pi, VALUE val);
71
- VALUE err_class;
72
- bool has_callbacks;
45
+ struct _reader rd;
46
+
47
+ struct _err err;
48
+ struct _options options;
49
+ VALUE handler;
50
+ struct _valStack stack;
51
+ CircArray circ_array;
52
+ struct _rxClass str_rx;
53
+ int expect_value;
54
+ int max_depth; // just for the json gem
55
+ VALUE proc;
56
+ VALUE (*start_hash)(struct _parseInfo *pi);
57
+ void (*end_hash)(struct _parseInfo *pi);
58
+ VALUE (*hash_key)(struct _parseInfo *pi, const char *key, size_t klen);
59
+ void (*hash_set_cstr)(struct _parseInfo *pi, Val kval, const char *str, size_t len, const char *orig);
60
+ void (*hash_set_num)(struct _parseInfo *pi, Val kval, NumInfo ni);
61
+ void (*hash_set_value)(struct _parseInfo *pi, Val kval, VALUE value);
62
+
63
+ VALUE (*start_array)(struct _parseInfo *pi);
64
+ void (*end_array)(struct _parseInfo *pi);
65
+ void (*array_append_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
66
+ void (*array_append_num)(struct _parseInfo *pi, NumInfo ni);
67
+ void (*array_append_value)(struct _parseInfo *pi, VALUE value);
68
+
69
+ void (*add_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
70
+ void (*add_num)(struct _parseInfo *pi, NumInfo ni);
71
+ void (*add_value)(struct _parseInfo *pi, VALUE val);
72
+ VALUE err_class;
73
+ bool has_callbacks;
73
74
  } *ParseInfo;
74
75
 
75
- extern void oj_parse2(ParseInfo pi);
76
- extern void oj_set_error_at(ParseInfo pi, VALUE err_clas, const char* file, int line, const char *format, ...);
77
- extern VALUE oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yieldOk);
78
- extern VALUE oj_num_as_value(NumInfo ni);
76
+ extern void oj_parse2(ParseInfo pi);
77
+ extern void oj_set_error_at(ParseInfo pi, VALUE err_clas, const char *file, int line, const char *format, ...);
78
+ extern VALUE oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yieldOk);
79
+ extern VALUE oj_num_as_value(NumInfo ni);
79
80
 
80
- extern void oj_set_strict_callbacks(ParseInfo pi);
81
- extern void oj_set_object_callbacks(ParseInfo pi);
82
- extern void oj_set_compat_callbacks(ParseInfo pi);
83
- extern void oj_set_wab_callbacks(ParseInfo pi);
81
+ extern void oj_set_strict_callbacks(ParseInfo pi);
82
+ extern void oj_set_object_callbacks(ParseInfo pi);
83
+ extern void oj_set_compat_callbacks(ParseInfo pi);
84
+ extern void oj_set_custom_callbacks(ParseInfo pi);
85
+ extern void oj_set_wab_callbacks(ParseInfo pi);
84
86
 
85
- extern void oj_sparse2(ParseInfo pi);
86
- extern VALUE oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd);
87
+ extern void oj_sparse2(ParseInfo pi);
88
+ extern VALUE oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd);
87
89
 
88
- static inline void
89
- parse_info_init(ParseInfo pi) {
90
+ extern VALUE oj_cstr_to_value(const char *str, size_t len, size_t cache_str);
91
+ extern VALUE oj_calc_hash_key(ParseInfo pi, Val parent);
92
+
93
+ static inline void parse_info_init(ParseInfo pi) {
90
94
  memset(pi, 0, sizeof(struct _parseInfo));
91
95
  }
92
96
 
93
- static inline bool
94
- empty_ok(Options options) {
97
+ extern void oj_scanner_init(void);
98
+
99
+ static inline bool empty_ok(Options options) {
95
100
  switch (options->mode) {
96
101
  case ObjectMode:
97
- case WabMode:
98
- return true;
102
+ case WabMode: return true;
99
103
  case CompatMode:
100
- case RailsMode:
101
- return false;
104
+ case RailsMode: return false;
102
105
  case StrictMode:
103
106
  case NullMode:
104
107
  case CustomMode:
105
- default:
106
- break;
108
+ default: break;
107
109
  }
108
110
  return Yes == options->empty_string;
109
111
  }