oj 3.13.22 → 3.13.23

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d90ba7b2698041767008afd20cef0dbd6ba1af0d97affa2253b12e199e6c528d
4
- data.tar.gz: f9a8219f0b6f66ef0608136068d78cbc6c8b1ee765bfaa68eeb828cae1401fd8
3
+ metadata.gz: 3d2f8a01b7a59da7cd25ed3551065dddd9e31e5184989804d172c2e39cc769d6
4
+ data.tar.gz: 7211a96856ec44173fa9dcc7245e3cb2f6b7c2e22a746ef35f168126873f4c88
5
5
  SHA512:
6
- metadata.gz: e72d7030911b6609946437de78aaf4fa9003a598c77dca472c2998f9af6115436e817fb4c46ec0ead55cb1ccb0ba80298c2ab060fab9fe37d0ec825d0ec6e5e4
7
- data.tar.gz: 4aacdb9f034a2548a3eb942b4a29fb66a9839a63770bd10d0b8b62d93d944070d78ee53ca26881f05108047cc9c120efb3a732048b0be51a608f144f2ad0a374
6
+ metadata.gz: ee3ad5cac6cac48bcf7fdf682e69770dfee08b502735cc75b84ae1635196fdcdaf2fde021e32e6d897bdc6935e111882ddc48fa5a274fe0d98ad45c2fdf68917
7
+ data.tar.gz: 3e05212fa84a2bf05954ec870ac27da7c845335b411507aa0bf5e45497403cccf4c40990f0ee8cee6d21f19163f33116bb240836795482737eaa744bc5ff6d94
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.13.23 - 2022-11-06
4
+
5
+ - Fixed issue with Oj::Parser extension regarding GC timeing.
6
+
3
7
  ## 3.13.22 - 2022-11-01
4
8
 
5
9
  - Reorganized Oj::Parser code to allow for parser extensions in C.
data/ext/oj/oj.c CHANGED
@@ -243,7 +243,7 @@ struct _options oj_default_options = {
243
243
  *references
244
244
  * - *:auto_define* [_Boolean_|_nil_] automatically define classes if they do not exist
245
245
  * - *:symbol_keys* [_Boolean_|_nil_] use symbols instead of strings for hash keys
246
- * - *:escape_mode* [_:newline_|_:json_|_:xss_safe_|_:ascii_|_unicode_xss_|_nil_] determines the
246
+ * - *:escape_mode* [_:newline_|_:json_|_:slash_|_:xss_safe_|_:ascii_|_:unicode_xss_|_nil_] determines the
247
247
  *characters to escape
248
248
  * - *:class_cache* [_Boolean_|_nil_] cache classes for faster parsing (if dynamically modifying
249
249
  *classes or reloading classes then don't use this)
@@ -251,7 +251,7 @@ struct _options oj_default_options = {
251
251
  *to use for JSON
252
252
  * - *:time_format* [_:unix_|_:unix_zone_|_:xmlschema_|_:ruby_] time format when dumping
253
253
  * - *:bigdecimal_as_decimal* [_Boolean_|_nil_] dump BigDecimal as a decimal number or as a String
254
- * - *:bigdecimal_load* [_:bigdecimal_|_:float_|_:auto_|_:fast_] load decimals as BigDecimal instead
254
+ * - *:bigdecimal_load* [_:bigdecimal_|_:float_|_:auto_|_:fast_|_:ruby_] load decimals as BigDecimal instead
255
255
  *of as a Float. :auto pick the most precise for the number of digits. :float should be the same as
256
256
  *ruby. :fast may require rounding but is must faster.
257
257
  * - *:compat_bigdecimal* [_true_|_false_] load decimals as BigDecimal instead of as a Float when in
data/ext/oj/parser.c CHANGED
@@ -1145,7 +1145,9 @@ static void parser_free(void *ptr) {
1145
1145
  p = (ojParser)ptr;
1146
1146
  buf_cleanup(&p->key);
1147
1147
  buf_cleanup(&p->buf);
1148
- p->free(p);
1148
+ if (NULL != p->free) {
1149
+ p->free(p);
1150
+ }
1149
1151
  xfree(ptr);
1150
1152
  }
1151
1153
 
@@ -1156,7 +1158,9 @@ static void parser_mark(void *ptr) {
1156
1158
  if (0 != p->reader) {
1157
1159
  rb_gc_mark(p->reader);
1158
1160
  }
1159
- p->mark(p);
1161
+ if (NULL != p->mark) {
1162
+ p->mark(p);
1163
+ }
1160
1164
  }
1161
1165
  }
1162
1166
 
data/lib/oj/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.13.22'
4
+ VERSION = '3.13.23'
5
5
  end
data/pages/Options.md CHANGED
@@ -66,6 +66,10 @@ Determines how to load decimals.
66
66
 
67
67
  - `:auto` the most precise for the number of digits is used.
68
68
 
69
+ - `:fast` faster conversion to Float.
70
+
71
+ - `:ruby` convert to Float using the Ruby `to_f` conversion.
72
+
69
73
  This can also be set with `:decimal_class` when used as a load or
70
74
  parse option to match the JSON gem. In that case either `Float`,
71
75
  `BigDecimal`, or `nil` can be provided.
@@ -154,6 +158,8 @@ Determines the characters to escape when dumping. Only the :ascii and
154
158
 
155
159
  - `:json` follows the JSON specification. This is the default mode.
156
160
 
161
+ - `:slash` escapes `/` characters.
162
+
157
163
  - `:xss_safe` escapes HTML and XML characters such as `&` and `<`.
158
164
 
159
165
  - `:ascii` escapes all non-ascii or characters with the hi-bit set.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.13.22
4
+ version: 3.13.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-01 00:00:00.000000000 Z
11
+ date: 2022-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -110,7 +110,6 @@ files:
110
110
  - ext/oj/fast.c
111
111
  - ext/oj/intern.c
112
112
  - ext/oj/intern.h
113
- - ext/oj/introspect.c
114
113
  - ext/oj/mimic_json.c
115
114
  - ext/oj/object.c
116
115
  - ext/oj/odd.c
data/ext/oj/introspect.c DELETED
@@ -1,96 +0,0 @@
1
-
2
- #include "cache.h"
3
- #include "oj.h"
4
- #include "parser.h"
5
- #include "usual.h"
6
-
7
- #define BYTE_OFFSETS_STACK_INC_SIZE 256
8
-
9
- VALUE mod = Qnil;
10
-
11
- typedef struct _introspect {
12
- struct _usual usual;
13
- void (*start)(struct _ojParser *p);
14
- void (*free)(struct _ojParser *p);
15
- void (*mark)(struct _ojParser *p);
16
- void (*open_object)(struct _ojParser *p);
17
- void (*close_object)(struct _ojParser *p);
18
-
19
- int len;
20
- int cur;
21
- long *stack;
22
-
23
- } * Introspect;
24
-
25
- static void dfree(ojParser p) {
26
- Introspect d = (Introspect)p->ctx;
27
-
28
- xfree(d->stack);
29
- // As with the mark() function, this function should still work.
30
- d->free(p);
31
- }
32
-
33
- static void start(ojParser p) {
34
- Introspect d = (Introspect)p->ctx;
35
-
36
- d->start(p);
37
-
38
- d->stack = ALLOC_N(long, BYTE_OFFSETS_STACK_INC_SIZE);
39
- d->len = BYTE_OFFSETS_STACK_INC_SIZE;
40
- d->cur = 0;
41
- }
42
-
43
- static void open_object(ojParser p) {
44
- Introspect d = (Introspect)p->ctx;
45
-
46
- d->open_object(p);
47
-
48
- // TBD add offset
49
- }
50
-
51
- static void close_object(ojParser p) {
52
- Introspect d = (Introspect)p->ctx;
53
-
54
- d->close_object(p);
55
-
56
- // TBD set offset on hash
57
- }
58
-
59
- static VALUE new_parser(VALUE self, VALUE ropts) {
60
- volatile VALUE pv = oj_parser_new();
61
- ojParser p = (ojParser)DATA_PTR(pv);
62
- Introspect d = ALLOC(struct _introspect);
63
-
64
- oj_init_usual(p, &d->usual);
65
-
66
- // Set the options before switching to the Introspect delegate.
67
- p->ctx = (void *)d;
68
-
69
- d->free = p->free;
70
- p->free = dfree;
71
-
72
- d->start = p->start;
73
- p->start = start;
74
-
75
- // We are cheating with the mark, free, and options functions. Since
76
- // struct _usual is the first member of struct _introspect the cast to
77
- // Usual in the usual.c mark() function should still work just fine.
78
-
79
- d->open_object = p->funcs[TOP_FUN].open_object;
80
- p->funcs[TOP_FUN].open_object = open_object;
81
-
82
- d->close_object = p->funcs[TOP_FUN].close_object;
83
- p->funcs[TOP_FUN].close_object = close_object;
84
-
85
- Check_Type(ropts, T_HASH);
86
- oj_parser_set_option(p, ropts);
87
-
88
- return pv;
89
- }
90
-
91
- void Init_introspect(void) {
92
- mod = rb_define_module("Introspect");
93
- rb_gc_register_address(&mod);
94
-
95
- rb_define_module_function(mod, "parser", new_parser, 1);
96
- }