yeptris 0.6.28.1-powerpc64le-linux → 0.6.28.3-powerpc64le-linux

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: 43ecbf90a5a887b64dfd5d58d53ac6f881331afce2eb8d698b62bdb4345771b6
4
- data.tar.gz: b987336717bf22f5145b1a5c87d5d19b8199374f8f06522ee965a8f0a94b5a05
3
+ metadata.gz: 59a8ac563b8b1a5e4d9e97616e3b4c1c0721d9d53daf10d2cb03d42513207948
4
+ data.tar.gz: 6a4d565c878be41e836a80e720b71d52e5a94ca859d4ca0afaa476c3aa0ae6e2
5
5
  SHA512:
6
- metadata.gz: d2e8a66a4272d4c9dce9c85b5befc5b9a209a8304c696063e6447923df6ff3952d5a153e4fbc87253ac1767842c951689824f2721bdb252654c4b8e14ad2f250
7
- data.tar.gz: 4a7628da942e0e7f4655c989d98dbbc0aef06336a98a764086a607101b71041d402c8fc8469ad63437f475ff48b1fd79666537da0b5f9cac7b0e939258778f5f
6
+ metadata.gz: '05963ff7cae99604b9e7bff9cd3aeccb73a921f4d228a72e2f26d7058191a7f5809dd64d7bd4de8704f9a8e2935077187e96e07b5ed44503f602eac03f711f3a'
7
+ data.tar.gz: 50eb9480d3f33a3168cb527cd6ef4c63fdc83651ea43b457d160b99be0e25fcc3ed076a686f2fca444fc0739dd0810d0e7fe0ed0a5f3d45f01d61ee3575a481b
@@ -320,15 +320,32 @@ void yep_rb_set_gc_mode(int mode) {
320
320
  #include <time.h>
321
321
 
322
322
 
323
+ /* portable monotonic seconds: clock_gettime macro-expands to Ruby's
324
+ * rb_w32_clock_gettime on mingw toolchains, which the windows-11-arm
325
+ * Ruby does not export (undefined symbol at link) */
326
+ #ifdef _WIN32
327
+ #include <windows.h>
328
+ static double yep_now_s(void) {
329
+ LARGE_INTEGER c, f;
330
+ QueryPerformanceCounter(&c);
331
+ QueryPerformanceFrequency(&f);
332
+ return (double)c.QuadPart / (double)f.QuadPart;
333
+ }
334
+ #else
335
+ static double yep_now_s(void) {
336
+ struct timespec t;
337
+ clock_gettime(CLOCK_MONOTONIC, &t);
338
+ return (double)t.tv_sec + (double)t.tv_nsec / 1e9;
339
+ }
340
+ #endif
341
+
323
342
  double yep_rb_scan_time(const char* p, size_t len, int n) {
324
343
  static const YeptrisVisitVTable none = {0};
325
- struct timespec t0, t1;
326
- clock_gettime(CLOCK_MONOTONIC, &t0);
344
+ double s0 = yep_now_s();
327
345
  for (int i = 0; i < n; i++) {
328
346
  (void)yeptris_visit_json(p, len, &none, NULL);
329
347
  }
330
- clock_gettime(CLOCK_MONOTONIC, &t1);
331
- return (double)(t1.tv_sec - t0.tv_sec) + (double)(t1.tv_nsec - t0.tv_nsec) / 1e9;
348
+ return yep_now_s() - s0;
332
349
  }
333
350
 
334
351
  VALUE yep_rb_parse_json(const char* p, size_t len, int strict_dup) {
Binary file
data/lib/yeptris/psych.rb CHANGED
@@ -182,12 +182,26 @@ module Yeptris
182
182
  Visitors::ToRuby.visit(tree.children.first)
183
183
  end
184
184
 
185
- def safe_load(yaml, permitted_classes: [::Date, ::Time], aliases: false, **)
185
+ def deep_symbolize_keys(obj)
186
+ case obj
187
+ when Hash
188
+ obj.each_with_object({}) do |(k, v), out|
189
+ out[k.is_a?(String) ? k.to_sym : k] = deep_symbolize_keys(v)
190
+ end
191
+ when Array then obj.map { |v| deep_symbolize_keys(v) }
192
+ else obj
193
+ end
194
+ end
195
+
196
+ def safe_load(yaml, permitted_classes: [::Date, ::Time], aliases: false,
197
+ symbolize_names: false, **)
186
198
  begin
187
199
  doc = Yeptris::Document.parse(yaml, schema: :compat_11)
188
200
  return nil if doc.nil? # the legal empty stream
189
201
 
190
- force_utf8_scalars(walk_safe(doc.root(0), permitted_classes, aliases))
202
+ res = force_utf8_scalars(walk_safe(doc.root(0), permitted_classes, aliases))
203
+ res = deep_symbolize_keys(res) if symbolize_names
204
+ res
191
205
  rescue ::Yeptris::ParseError => e
192
206
  doc&.free unless doc&.freed?
193
207
  translate_parse_error(e)
@@ -242,7 +242,13 @@ module Yeptris
242
242
  pending_key.pop
243
243
  pending_key_tag.pop
244
244
  target = merge_target.pop
245
- Materializer.merge_into(target, closed) if target
245
+ if target
246
+ if closed.is_a?(Hash) || (closed.is_a?(Array) && closed.all? { |e| e.is_a?(Hash) })
247
+ Materializer.merge_into(target, closed)
248
+ else
249
+ target["<<"] = closed # Psych keeps non-mergeable merge values literally
250
+ end
251
+ end
246
252
  when DOC
247
253
  docs.push(nil)
248
254
  when ALIAS
@@ -402,7 +408,13 @@ module Yeptris
402
408
  pending_key.pop
403
409
  pending_key_tag.pop
404
410
  target = merge_target.pop
405
- Materializer.merge_into(target, closed) if target
411
+ if target
412
+ if closed.is_a?(Hash) || (closed.is_a?(Array) && closed.all? { |e| e.is_a?(Hash) })
413
+ Materializer.merge_into(target, closed)
414
+ else
415
+ target["<<"] = closed # Psych keeps non-mergeable merge values literally
416
+ end
417
+ end
406
418
  when DOC
407
419
  docs.push(nil)
408
420
  when ALIAS
@@ -442,9 +454,12 @@ module Yeptris
442
454
  if key == "<<" && pending_key_tag[-1] == 9 # TAG_MERGE
443
455
  if (v.is_a?(Hash) || v.is_a?(Array)) && v.empty?
444
456
  parent # deferred: contents arrive after the open
445
- else
457
+ elsif v.is_a?(Hash) || (v.is_a?(Array) && v.all? { |e| e.is_a?(Hash) })
446
458
  Materializer.merge_into(parent, v)
447
459
  nil
460
+ else
461
+ parent["<<"] = v # Psych keeps non-mergeable merge values literally
462
+ nil
448
463
  end
449
464
  else
450
465
  parent[key] = v
data/lib/yeptris.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Yeptris
4
4
  # The gem's version lives in the parent namespace's file — the last
5
5
  # internal require (yeptris/version) retired with it.
6
- VERSION = "0.6.28.1".freeze
6
+ VERSION = "0.6.28.3".freeze
7
7
 
8
8
  # Informational notices are OPT-IN (yeptris-ruby#217): consumers
9
9
  # embed yeptris inside CLIs that assert clean stderr, and a
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yeptris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.28.1
4
+ version: 0.6.28.3
5
5
  platform: powerpc64le-linux
6
6
  authors:
7
7
  - Ribose Inc.