oj-introspect 0.6.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 718229e62c9fde37495f36cb674b79025c626a934d188698a0e2c87937566809
4
- data.tar.gz: 490a556129f5d13bc29c1b422e0af6cded6d97c88ead6b953ada4abf06ada594
3
+ metadata.gz: 74ab6b62802075f9e3c9d9efc7fb13a2eca6d61c6da2f58e1b5f853fe08841c8
4
+ data.tar.gz: 13874ca3c2afea6ba3fb9de442f904b1dd8fe24131f7c4430ee496c01b6fd627
5
5
  SHA512:
6
- metadata.gz: 92ddcdc95170deef8d6854a879c5c910181ab6a16bbdb175e8d92ab67169ca80ee36d7ddfdcbf3aa45c036955c60d6642c53e45d9bbed3f3584aac61335c83cf
7
- data.tar.gz: a45c33ee35937db46ee01819b25264b9d7e9336a014a93edaba0cf878b5ad5d3a4a3303f8357b9848253d2953a50c2679469cc52e62ceabeb462da2616f43338
6
+ metadata.gz: c7bfa4f6a854ae76136e01f102b63c231b055c06b3fbe5941b98b0c3a00b6d79653fad56afde069fc2907e693164ac1385ef4c3363e817cb48fb12592a99da4d
7
+ data.tar.gz: b151a7bbc3f00291110db4c30f5bfb2cbdbcfdc3ac150062ba98f07f58598cd71eaced956bca86a40fb6fce83c529a2599a2b6948d95495b6fe8e665b0b13658
data/Gemfile CHANGED
@@ -5,6 +5,6 @@ gemspec
5
5
 
6
6
  gem "benchmark-ips"
7
7
  gem "pry"
8
- gem "rake", "~> 12.0"
8
+ gem "rake", "~> 13.0"
9
9
  gem "rspec", "~> 3.0"
10
10
  gem "rake-compiler"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oj-introspect (0.6.0)
4
+ oj-introspect (0.7.1)
5
5
  oj (>= 3.13.23)
6
6
 
7
7
  GEM
@@ -15,7 +15,7 @@ GEM
15
15
  pry (0.14.1)
16
16
  coderay (~> 1.1)
17
17
  method_source (~> 1.0)
18
- rake (12.3.3)
18
+ rake (13.0.6)
19
19
  rake-compiler (1.2.0)
20
20
  rake
21
21
  rspec (3.12.0)
@@ -39,7 +39,7 @@ DEPENDENCIES
39
39
  benchmark-ips
40
40
  oj-introspect!
41
41
  pry
42
- rake (~> 12.0)
42
+ rake (~> 13.0)
43
43
  rake-compiler
44
44
  rspec (~> 3.0)
45
45
 
@@ -7,6 +7,22 @@ oj_version_file_path = Pathname.new(oj_version_file)
7
7
 
8
8
  OJ_HEADERS = oj_version_file_path.join('..', '..', '..', 'ext', 'oj').to_s
9
9
 
10
+ cc_version = `#{RbConfig.expand("$(CC) --version".dup)}`
11
+ if cc_version.match?(/clang/i)
12
+ # Ignore symbols loaded from Oj in case Ruby is compiled without
13
+ # "-Wl,-undefined,dynamic_lookup" (related to https://bugs.ruby-lang.org/issues/19005)
14
+ symfile = File.join(__dir__, 'oj.sym')
15
+ dynamic_symbols = File.readlines(symfile)
16
+ dynamic_symbols.each do |sym|
17
+ $DLDFLAGS << " -Wl,-U,#{sym.strip}"
18
+ end
19
+
20
+ # Needed for Ruby 3.2 ABI check: https://github.com/ruby/ruby/pull/5474
21
+ if RUBY_VERSION >= "3.2"
22
+ $LDFLAGS << " -Wl,-exported_symbol,_ruby_abi_version"
23
+ end
24
+ end
25
+
10
26
  dir_config('oj', [OJ_HEADERS], [])
11
27
 
12
28
  create_makefile("oj/introspect/introspect_ext")
@@ -30,6 +30,10 @@ typedef struct _introspect_S {
30
30
  void (*delegated_close_array_key_func)(struct _ojParser *p);
31
31
  } * IntrospectDelegate;
32
32
 
33
+ static VALUE introspection_key;
34
+ static VALUE start_byte_key;
35
+ static VALUE end_byte_key;
36
+
33
37
  static void dfree(ojParser p) {
34
38
  IntrospectDelegate d = (IntrospectDelegate)p->ctx;
35
39
 
@@ -53,10 +57,11 @@ static void start(ojParser p) {
53
57
  }
54
58
 
55
59
  static void copy_ruby_str(char **target, VALUE source) {
56
- size_t len = RSTRING_LEN(source);
60
+ const char *ruby_str = StringValueCStr(source);
61
+ size_t len = strlen(ruby_str);
62
+
57
63
  *target = ALLOC_N(char, len + 1);
58
- memcpy(*target, RSTRING_PTR(source), len);
59
- (*target)[len] = '\0'; // Parantheses are important as it means => (*target + sizeof(char) * len)
64
+ strncpy(*target, ruby_str, len + 1);
60
65
  }
61
66
 
62
67
  static VALUE option(ojParser p, const char *key, VALUE value) {
@@ -148,9 +153,9 @@ static void set_introspection_values(ojParser p) {
148
153
  if(!d->introspect) return;
149
154
 
150
155
  volatile VALUE obj = rb_hash_new();
151
- rb_hash_aset(obj, ID2SYM(rb_intern("start_byte")), INT2FIX(pop(p)));
152
- rb_hash_aset(obj, ID2SYM(rb_intern("end_byte")), INT2FIX(p->cur));
153
- rb_hash_aset(*(d->usual.vtail - 1), ID2SYM(rb_intern("__oj_introspection")), obj);
156
+ rb_hash_aset(obj, start_byte_key, INT2FIX(pop(p)));
157
+ rb_hash_aset(obj, end_byte_key, INT2FIX(p->cur));
158
+ rb_hash_aset(*(d->usual.vtail - 1), introspection_key, obj);
154
159
  }
155
160
 
156
161
  static void close_object_introspected(ojParser p) {
@@ -181,7 +186,7 @@ static void close_array_key_introspected(ojParser p) {
181
186
  static void init_introspect_parser(ojParser p, VALUE ropts) {
182
187
  IntrospectDelegate d = ALLOC(struct _introspect_S);
183
188
 
184
- oj_init_usual(p, (Usual)d);
189
+ oj_init_usual(p, &d->usual);
185
190
 
186
191
  // now function mangling...
187
192
  d->delegated_free_func = p->free;
@@ -245,10 +250,6 @@ static VALUE rb_new_introspect_parser(int argc, VALUE *argv, VALUE self) {
245
250
 
246
251
  init_introspect_parser(p, options);
247
252
 
248
- // This locks the object in memory and is never recovered. Best to let the
249
- // mark function handle it.
250
- // rb_gc_register_address(&oj_parser);
251
-
252
253
  return oj_parser;
253
254
  }
254
255
 
@@ -272,6 +273,14 @@ void Init_introspect_ext() {
272
273
  VALUE parser_module = rb_const_get(oj_module, rb_intern("Parser"));
273
274
  VALUE introspection_class = rb_define_class_under(oj_module, "Introspect", rb_cObject);
274
275
 
276
+ introspection_key = ID2SYM(rb_intern("__oj_introspection"));
277
+ rb_gc_register_address(&introspection_key);
278
+ start_byte_key = ID2SYM(rb_intern("start_byte"));
279
+ rb_gc_register_address(&start_byte_key);
280
+ end_byte_key = ID2SYM(rb_intern("end_byte"));
281
+ rb_gc_register_address(&end_byte_key);
282
+
283
+ rb_const_set(introspection_class, rb_intern("KEY"), introspection_key);
275
284
  rb_define_singleton_method(parser_module, "introspect", rb_get_default_introspect_parser, 0);
276
285
  rb_define_singleton_method(introspection_class, "new", rb_new_introspect_parser, -1);
277
286
  }
@@ -0,0 +1,3 @@
1
+ _oj_init_usual
2
+ _oj_parser_new
3
+ _oj_parser_set_option
@@ -1,5 +1,5 @@
1
1
  module Oj
2
2
  class Introspect
3
- VERSION = "0.6.0"
3
+ VERSION = "0.7.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj-introspect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Emin INAC
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-06 00:00:00.000000000 Z
11
+ date: 2022-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -47,6 +47,7 @@ files:
47
47
  - bin/test_run
48
48
  - ext/oj-introspect/extconf.rb
49
49
  - ext/oj-introspect/introspect.c
50
+ - ext/oj-introspect/oj.sym
50
51
  - lib/oj/introspect.rb
51
52
  - lib/oj/introspect/version.rb
52
53
  - oj-introspect.gemspec