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/trace.c CHANGED
@@ -1,30 +1,27 @@
1
- /* trace.h
2
- * Copyright (c) 2018, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2018 Peter Ohler. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file in the project root for license details.
5
3
 
6
- #include "parse.h"
7
4
  #include "trace.h"
8
5
 
9
- #define MAX_INDENT 256
6
+ #include "parse.h"
7
+
8
+ #define MAX_INDENT 256
10
9
 
11
- static void
12
- fill_indent(char *indent, int depth) {
10
+ static void fill_indent(char *indent, int depth) {
13
11
  if (MAX_INDENT <= depth) {
14
- depth = MAX_INDENT - 1;
12
+ depth = MAX_INDENT - 1;
15
13
  } else if (depth < 0) {
16
- depth = 0;
14
+ depth = 0;
17
15
  }
18
16
  if (0 < depth) {
19
- memset(indent, ' ', depth);
17
+ memset(indent, ' ', depth);
20
18
  }
21
19
  indent[depth] = '\0';
22
20
  }
23
21
 
24
- void
25
- oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, TraceWhere where) {
26
- char fmt[64];
27
- char indent[MAX_INDENT];
22
+ void oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, TraceWhere where) {
23
+ char fmt[64];
24
+ char indent[MAX_INDENT];
28
25
 
29
26
  depth *= 2;
30
27
  fill_indent(indent, depth);
@@ -32,47 +29,43 @@ oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, Tra
32
29
  printf(fmt, file, line, indent, func, rb_obj_classname(obj));
33
30
  }
34
31
 
35
- void
36
- oj_trace_parse_call(const char *func, ParseInfo pi, const char *file, int line, VALUE obj) {
37
- char fmt[64];
38
- char indent[MAX_INDENT];
39
- int depth = (int)(stack_size(&pi->stack) * 2);
40
-
32
+ void oj_trace_parse_call(const char *func, ParseInfo pi, const char *file, int line, VALUE obj) {
33
+ char fmt[64];
34
+ char indent[MAX_INDENT];
35
+ int depth = (int)(stack_size(&pi->stack) * 2);
36
+
41
37
  fill_indent(indent, depth);
42
38
  sprintf(fmt, "#0:%%13s:%%3d:Oj:-:%%%ds %%s %%s\n", depth);
43
39
  printf(fmt, file, line, indent, func, rb_obj_classname(obj));
44
40
  }
45
41
 
46
- void
47
- oj_trace_parse_in(const char *func, ParseInfo pi, const char *file, int line) {
48
- char fmt[64];
49
- char indent[MAX_INDENT];
50
- int depth = (int)(stack_size(&pi->stack) * 2);
51
-
42
+ void oj_trace_parse_in(const char *func, ParseInfo pi, const char *file, int line) {
43
+ char fmt[64];
44
+ char indent[MAX_INDENT];
45
+ int depth = (int)(stack_size(&pi->stack) * 2);
46
+
52
47
  fill_indent(indent, depth);
53
48
  sprintf(fmt, "#0:%%13s:%%3d:Oj:}:%%%ds %%s\n", depth);
54
49
  printf(fmt, file, line, indent, func);
55
50
  }
56
51
 
57
- void
58
- oj_trace_parse_hash_end(ParseInfo pi, const char *file, int line) {
59
- char fmt[64];
60
- char indent[MAX_INDENT];
61
- int depth = (int)(stack_size(&pi->stack) * 2 - 2);
62
- Val v = stack_peek(&pi->stack);
63
- VALUE obj = v->val;
64
-
52
+ void oj_trace_parse_hash_end(ParseInfo pi, const char *file, int line) {
53
+ char fmt[64];
54
+ char indent[MAX_INDENT];
55
+ int depth = (int)(stack_size(&pi->stack) * 2 - 2);
56
+ Val v = stack_peek(&pi->stack);
57
+ VALUE obj = v->val;
58
+
65
59
  fill_indent(indent, depth);
66
60
  sprintf(fmt, "#0:%%13s:%%3d:Oj:{:%%%ds hash_end %%s\n", depth);
67
61
  printf(fmt, file, line, indent, rb_obj_classname(obj));
68
62
  }
69
63
 
70
- void
71
- oj_trace_parse_array_end(ParseInfo pi, const char *file, int line) {
72
- char fmt[64];
73
- char indent[MAX_INDENT];
74
- int depth = (int)(stack_size(&pi->stack) * 2);
75
-
64
+ void oj_trace_parse_array_end(ParseInfo pi, const char *file, int line) {
65
+ char fmt[64];
66
+ char indent[MAX_INDENT];
67
+ int depth = (int)(stack_size(&pi->stack) * 2);
68
+
76
69
  fill_indent(indent, depth);
77
70
  sprintf(fmt, "#0:%%13s:%%3d:Oj:{:%%%ds array_ned\n", depth);
78
71
  printf(fmt, file, line, indent);
data/ext/oj/trace.h CHANGED
@@ -1,28 +1,55 @@
1
- /* trace.h
2
- * Copyright (c) 2018, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2018 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_TRACE_H
7
5
  #define OJ_TRACE_H
8
6
 
9
- #include <stdbool.h>
10
7
  #include <ruby.h>
8
+ #include <stdbool.h>
11
9
 
12
10
  typedef enum {
13
- TraceIn = '}',
14
- TraceOut = '{',
15
- TraceCall = '-',
16
- TraceRubyIn = '>',
17
- TraceRubyOut = '<',
11
+ TraceIn = '}',
12
+ TraceOut = '{',
13
+ TraceCall = '-',
14
+ TraceRubyIn = '>',
15
+ TraceRubyOut = '<',
18
16
  } TraceWhere;
19
17
 
20
18
  struct _parseInfo;
21
19
 
22
- extern void oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, TraceWhere where);
23
- extern void oj_trace_parse_in(const char *func, struct _parseInfo *pi, const char *file, int line);
24
- extern void oj_trace_parse_call(const char *func, struct _parseInfo *pi, const char *file, int line, VALUE obj);
25
- extern void oj_trace_parse_hash_end(struct _parseInfo *pi, const char *file, int line);
26
- extern void oj_trace_parse_array_end(struct _parseInfo *pi, const char *file, int line);
20
+ extern void oj_trace(const char *func, VALUE obj, const char *file, int line, int depth, TraceWhere where);
21
+ extern void oj_trace_parse_in(const char *func, struct _parseInfo *pi, const char *file, int line);
22
+ extern void oj_trace_parse_call(const char *func, struct _parseInfo *pi, const char *file, int line, VALUE obj);
23
+ extern void oj_trace_parse_hash_end(struct _parseInfo *pi, const char *file, int line);
24
+ extern void oj_trace_parse_array_end(struct _parseInfo *pi, const char *file, int line);
25
+
26
+ #ifdef OJ_ENABLE_TRACE_LOG
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
+ }
47
+ #else
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)
53
+ #endif
27
54
 
28
55
  #endif /* OJ_TRACE_H */