oj 3.7.4 → 3.13.21

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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1352 -0
  3. data/README.md +29 -8
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +53 -72
  6. data/ext/oj/cache.c +326 -0
  7. data/ext/oj/cache.h +21 -0
  8. data/ext/oj/cache8.c +61 -64
  9. data/ext/oj/cache8.h +12 -39
  10. data/ext/oj/circarray.c +37 -43
  11. data/ext/oj/circarray.h +16 -17
  12. data/ext/oj/code.c +165 -179
  13. data/ext/oj/code.h +27 -29
  14. data/ext/oj/compat.c +174 -194
  15. data/ext/oj/custom.c +809 -866
  16. data/ext/oj/debug.c +132 -0
  17. data/ext/oj/dump.c +848 -863
  18. data/ext/oj/dump.h +81 -67
  19. data/ext/oj/dump_compat.c +85 -123
  20. data/ext/oj/dump_leaf.c +100 -188
  21. data/ext/oj/dump_object.c +527 -656
  22. data/ext/oj/dump_strict.c +315 -338
  23. data/ext/oj/encode.h +7 -34
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +40 -29
  26. data/ext/oj/err.h +48 -48
  27. data/ext/oj/extconf.rb +17 -4
  28. data/ext/oj/fast.c +1070 -1087
  29. data/ext/oj/intern.c +301 -0
  30. data/ext/oj/intern.h +26 -0
  31. data/ext/oj/mimic_json.c +469 -436
  32. data/ext/oj/object.c +525 -593
  33. data/ext/oj/odd.c +154 -138
  34. data/ext/oj/odd.h +37 -38
  35. data/ext/oj/oj.c +1325 -986
  36. data/ext/oj/oj.h +333 -316
  37. data/ext/oj/parse.c +1002 -846
  38. data/ext/oj/parse.h +92 -87
  39. data/ext/oj/parser.c +1557 -0
  40. data/ext/oj/parser.h +91 -0
  41. data/ext/oj/rails.c +888 -878
  42. data/ext/oj/rails.h +11 -14
  43. data/ext/oj/reader.c +141 -147
  44. data/ext/oj/reader.h +73 -89
  45. data/ext/oj/resolve.c +41 -62
  46. data/ext/oj/resolve.h +7 -9
  47. data/ext/oj/rxclass.c +71 -75
  48. data/ext/oj/rxclass.h +18 -19
  49. data/ext/oj/saj.c +443 -486
  50. data/ext/oj/saj2.c +602 -0
  51. data/ext/oj/scp.c +88 -113
  52. data/ext/oj/sparse.c +787 -709
  53. data/ext/oj/stream_writer.c +133 -159
  54. data/ext/oj/strict.c +127 -118
  55. data/ext/oj/string_writer.c +230 -249
  56. data/ext/oj/trace.c +34 -41
  57. data/ext/oj/trace.h +19 -19
  58. data/ext/oj/usual.c +1254 -0
  59. data/ext/oj/util.c +136 -0
  60. data/ext/oj/util.h +20 -0
  61. data/ext/oj/val_stack.c +59 -67
  62. data/ext/oj/val_stack.h +91 -129
  63. data/ext/oj/validate.c +46 -0
  64. data/ext/oj/wab.c +342 -353
  65. data/lib/oj/bag.rb +1 -0
  66. data/lib/oj/easy_hash.rb +5 -4
  67. data/lib/oj/error.rb +1 -1
  68. data/lib/oj/json.rb +1 -1
  69. data/lib/oj/mimic.rb +48 -14
  70. data/lib/oj/saj.rb +20 -6
  71. data/lib/oj/state.rb +8 -7
  72. data/lib/oj/version.rb +2 -2
  73. data/lib/oj.rb +0 -8
  74. data/pages/Compatibility.md +1 -1
  75. data/pages/JsonGem.md +15 -0
  76. data/pages/Modes.md +53 -46
  77. data/pages/Options.md +72 -11
  78. data/pages/Parser.md +309 -0
  79. data/pages/Rails.md +73 -22
  80. data/pages/Security.md +1 -1
  81. data/test/activerecord/result_test.rb +7 -2
  82. data/test/activesupport5/abstract_unit.rb +45 -0
  83. data/test/activesupport5/decoding_test.rb +68 -60
  84. data/test/activesupport5/encoding_test.rb +111 -96
  85. data/test/activesupport5/encoding_test_cases.rb +33 -25
  86. data/test/activesupport5/test_helper.rb +43 -21
  87. data/test/activesupport5/time_zone_test_helpers.rb +18 -3
  88. data/test/activesupport6/abstract_unit.rb +44 -0
  89. data/test/activesupport6/decoding_test.rb +133 -0
  90. data/test/activesupport6/encoding_test.rb +507 -0
  91. data/test/activesupport6/encoding_test_cases.rb +98 -0
  92. data/test/activesupport6/test_common.rb +17 -0
  93. data/test/activesupport6/test_helper.rb +163 -0
  94. data/test/activesupport6/time_zone_test_helpers.rb +39 -0
  95. data/test/activesupport7/abstract_unit.rb +49 -0
  96. data/test/activesupport7/decoding_test.rb +125 -0
  97. data/test/activesupport7/encoding_test.rb +486 -0
  98. data/test/activesupport7/encoding_test_cases.rb +104 -0
  99. data/test/activesupport7/time_zone_test_helpers.rb +47 -0
  100. data/test/bar.rb +6 -12
  101. data/test/baz.rb +16 -0
  102. data/test/bug.rb +16 -0
  103. data/test/foo.rb +69 -75
  104. data/test/helper.rb +16 -0
  105. data/test/json_gem/json_common_interface_test.rb +8 -3
  106. data/test/json_gem/json_generator_test.rb +18 -4
  107. data/test/json_gem/json_parser_test.rb +9 -0
  108. data/test/json_gem/test_helper.rb +12 -0
  109. data/test/mem.rb +33 -0
  110. data/test/perf.rb +1 -1
  111. data/test/perf_dump.rb +50 -0
  112. data/test/perf_once.rb +58 -0
  113. data/test/perf_parser.rb +189 -0
  114. data/test/perf_scp.rb +11 -10
  115. data/test/perf_strict.rb +17 -23
  116. data/test/prec.rb +23 -0
  117. data/test/sample_json.rb +1 -1
  118. data/test/test_compat.rb +46 -10
  119. data/test/test_custom.rb +147 -8
  120. data/test/test_fast.rb +62 -2
  121. data/test/test_file.rb +25 -2
  122. data/test/test_gc.rb +13 -0
  123. data/test/test_generate.rb +21 -0
  124. data/test/test_hash.rb +11 -1
  125. data/test/test_integer_range.rb +7 -2
  126. data/test/test_object.rb +85 -9
  127. data/test/test_parser.rb +27 -0
  128. data/test/test_parser_saj.rb +335 -0
  129. data/test/test_parser_usual.rb +217 -0
  130. data/test/test_rails.rb +35 -0
  131. data/test/test_saj.rb +1 -1
  132. data/test/test_scp.rb +5 -5
  133. data/test/test_strict.rb +26 -1
  134. data/test/test_various.rb +87 -65
  135. data/test/test_wab.rb +2 -0
  136. data/test/test_writer.rb +19 -2
  137. data/test/tests.rb +1 -1
  138. data/test/zoo.rb +13 -0
  139. metadata +60 -110
  140. data/ext/oj/hash.c +0 -163
  141. data/ext/oj/hash.h +0 -46
  142. data/ext/oj/hash_test.c +0 -512
data/ext/oj/parse.h CHANGED
@@ -1,111 +1,116 @@
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
- #ifndef __OJ_PARSE_H__
7
- #define __OJ_PARSE_H__
4
+ #ifndef OJ_PARSE_H
5
+ #define OJ_PARSE_H
8
6
 
9
7
  #include <stdarg.h>
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"
17
+
18
+ struct _rxClass;
19
19
 
20
- struct _RxClass;
21
-
22
- 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;
36
- } *NumInfo;
37
-
38
- typedef struct _ParseInfo {
20
+ typedef struct _numInfo {
21
+ int64_t i;
22
+ int64_t num;
23
+ int64_t div;
24
+ int64_t di;
25
+ const char *str;
26
+ size_t len;
27
+ long exp;
28
+ int big;
29
+ int infinity;
30
+ int nan;
31
+ int neg;
32
+ int has_exp;
33
+ int no_big;
34
+ int bigdec_load;
35
+ } * NumInfo;
36
+
37
+ typedef struct _parseInfo {
39
38
  // used for the string parser
40
- const char *json;
41
- const char *cur;
42
- const char *end;
39
+ const char *json;
40
+ const char *cur;
41
+ const char *end;
43
42
  // 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;
73
- } *ParseInfo;
74
-
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);
79
-
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);
84
-
85
- extern void oj_sparse2(ParseInfo pi);
86
- extern VALUE oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd);
87
-
88
- static inline void
89
- parse_info_init(ParseInfo pi) {
90
- memset(pi, 0, sizeof(struct _ParseInfo));
43
+ struct _reader rd;
44
+
45
+ struct _err err;
46
+ struct _options options;
47
+ VALUE handler;
48
+ struct _valStack stack;
49
+ CircArray circ_array;
50
+ struct _rxClass str_rx;
51
+ int expect_value;
52
+ int max_depth; // just for the json gem
53
+ VALUE proc;
54
+ VALUE (*start_hash)(struct _parseInfo *pi);
55
+ void (*end_hash)(struct _parseInfo *pi);
56
+ VALUE (*hash_key)(struct _parseInfo *pi, const char *key, size_t klen);
57
+ void (*hash_set_cstr)(struct _parseInfo *pi,
58
+ Val kval,
59
+ const char * str,
60
+ size_t len,
61
+ const char * orig);
62
+ void (*hash_set_num)(struct _parseInfo *pi, Val kval, NumInfo ni);
63
+ void (*hash_set_value)(struct _parseInfo *pi, Val kval, VALUE value);
64
+
65
+ VALUE (*start_array)(struct _parseInfo *pi);
66
+ void (*end_array)(struct _parseInfo *pi);
67
+ void (*array_append_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
68
+ void (*array_append_num)(struct _parseInfo *pi, NumInfo ni);
69
+ void (*array_append_value)(struct _parseInfo *pi, VALUE value);
70
+
71
+ void (*add_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
72
+ void (*add_num)(struct _parseInfo *pi, NumInfo ni);
73
+ void (*add_value)(struct _parseInfo *pi, VALUE val);
74
+ VALUE err_class;
75
+ bool has_callbacks;
76
+ } * ParseInfo;
77
+
78
+ extern void oj_parse2(ParseInfo pi);
79
+ extern void
80
+ oj_set_error_at(ParseInfo pi, VALUE err_clas, const char *file, int line, const char *format, ...);
81
+ extern VALUE oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yieldOk);
82
+ extern VALUE oj_num_as_value(NumInfo ni);
83
+
84
+ extern void oj_set_strict_callbacks(ParseInfo pi);
85
+ extern void oj_set_object_callbacks(ParseInfo pi);
86
+ extern void oj_set_compat_callbacks(ParseInfo pi);
87
+ extern void oj_set_custom_callbacks(ParseInfo pi);
88
+ extern void oj_set_wab_callbacks(ParseInfo pi);
89
+
90
+ extern void oj_sparse2(ParseInfo pi);
91
+ extern VALUE oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd);
92
+
93
+ extern VALUE oj_cstr_to_value(const char *str, size_t len, size_t cache_str);
94
+ extern VALUE oj_calc_hash_key(ParseInfo pi, Val parent);
95
+
96
+ static inline void parse_info_init(ParseInfo pi) {
97
+ memset(pi, 0, sizeof(struct _parseInfo));
91
98
  }
92
99
 
93
- static inline bool
94
- empty_ok(Options options) {
100
+ extern void oj_scanner_init(void);
101
+
102
+ static inline bool empty_ok(Options options) {
95
103
  switch (options->mode) {
96
104
  case ObjectMode:
97
- case WabMode:
98
- return true;
105
+ case WabMode: return true;
99
106
  case CompatMode:
100
- case RailsMode:
101
- return false;
107
+ case RailsMode: return false;
102
108
  case StrictMode:
103
109
  case NullMode:
104
110
  case CustomMode:
105
- default:
106
- break;
111
+ default: break;
107
112
  }
108
113
  return Yes == options->empty_string;
109
114
  }
110
115
 
111
- #endif /* __OJ_PARSE_H__ */
116
+ #endif /* OJ_PARSE_H */