leptris 1.9.264.0 → 1.9.265.0

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: 5803ebc28d7490b7cae3c2480593a2423075f5754902e48d11457e1385245c6c
4
- data.tar.gz: 49fcec82b15a2eb710b5c0b3367ddc4452e318d62a18f982b7d969a0b00df6d5
3
+ metadata.gz: 5549f821f7f1ba7a4d5c161680e4535d439938b0d0d5220417e636b684805719
4
+ data.tar.gz: d7cb676a13bbce365e0f704e8cee85d006318071867040b3a6f87b29f90379ba
5
5
  SHA512:
6
- metadata.gz: fb77c7b03fbd9a5a4fa15a43670c90c1aabd696607a5a3749c695189ec402af5e7aa325bb47aeebe009fe7828c00abd2088eaa7d6b2f8e011d2b5353169c33fb
7
- data.tar.gz: 111f8ae2b22743ca774909884e4e8cdc1143aed496dba4639aff2fedb73ccde3eada170533ae51235d1e85fbdc11263d0ae3dc6f779ab2463667cf342f2528ce
6
+ metadata.gz: 88f706c894390f015bb8501e711a3063d5ae0d1588d5319e2606cdfa79fe1a657da37dda758a85b79833d172ccdc075fe1f61f5a300b42652f51d71b088516d1
7
+ data.tar.gz: a99096295f37ed317e9201400f273c76f94f29d78602cec42f8eba9bc4d4808d7cfa99a646cb11e7392ed4defbc7ea2e4f5be8e690c339ac73ddb257bc4c7ab8
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to Leptris will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.9.265.0] - 2026-09-28
9
+
10
+ ### Fixed
11
+
12
+ - Vendored libleptris 1.9.265: portable noinline macro for the
13
+ overflow_lookup helper, and overflow-table TLS reads confined to
14
+ the cold sentinel path (compact-mode perf).
15
+
8
16
  ## [1.9.260.0] - 2026-09-27
9
17
 
10
18
  ### Fixed
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ RSpec::Core::RakeTask.new(:spec)
8
8
  # Pin for `rake compile` and the platform-gem builds. Keep in lockstep
9
9
  # with .github/workflows/build.yml (which calls `rake compile`) and the
10
10
  # CHANGELOG when libleptris releases.
11
- LIBLEPTRIS_VERSION = "1.9.264"
11
+ LIBLEPTRIS_VERSION = "1.9.265"
12
12
  # Vendored alongside libleptris for fn:normalize-unicode (TODO
13
13
  # .restructure/20): built per platform with a RELOCATABLE @rpath
14
14
  # install name, loaded by ffi.rb before libleptris so the
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leptris
4
- VERSION = "1.9.264.0"
4
+ VERSION = "1.9.265.0"
5
5
  end
data/vendor-src/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Sources vendored in this gem (recompile rights; the ruby
2
2
  variant builds them at install via extconf.rb):
3
3
 
4
- - libleptris v1.9.264
4
+ - libleptris v1.9.265
5
5
  - utf8proc v2.11.0
6
6
 
7
7
  Rebuild by hand:
@@ -1,5 +1,17 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.9.265] - 2026-09-28
4
+
5
+ ### Fixed
6
+
7
+ - portable noinline macro for the overflow_lookup helper (compact)
8
+
9
+ ### Performance
10
+
11
+ - confine overflow-table TLS reads to the cold sentinel path (compact)
12
+
13
+
14
+
3
15
  ## [1.9.264] - 2026-09-28
4
16
 
5
17
  ### Performance
@@ -3,7 +3,7 @@
3
3
  cmake_minimum_required(VERSION 3.20)
4
4
 
5
5
  project(leptris
6
- VERSION 1.9.264
6
+ VERSION 1.9.265
7
7
  DESCRIPTION "Fast XML parser and XPath evaluator in pure C"
8
8
  LANGUAGES C CXX
9
9
  )
@@ -198,6 +198,24 @@ void* leptris_compact_overflow_get(LeptrisCompactOverflowTable* table,
198
198
  static LEPTRIS_THREAD_LOCAL LeptrisCompactOverflowTable* g_overflow_table = NULL;
199
199
  static LEPTRIS_THREAD_LOCAL size_t g_overflow_table_refcount = 0;
200
200
 
201
+ /* Lane-18 round 12: sentinel-path lookup, deliberately NOINLINE.
202
+ * Under LTO the shared decoders inline into the attribute/child walk
203
+ * and get_overflow_table() inlines with them — the compiler then
204
+ * hoists its two thread-local loads (g_overflow_table,
205
+ * g_overflow_table_refcount — a tlv_get_addr pair) onto the HOT walk
206
+ * path as speculative loads, ~6 ns per query for a table that is
207
+ * never populated on single-arena documents. A call in the cold
208
+ * branch cannot be speculated: the TLS reads stay cold, the hot
209
+ * decode stays inline, and parse (which never takes this branch)
210
+ * is untouched. */
211
+ static LeptrisCompactOverflowTable* get_overflow_table(void);
212
+
213
+ static LEPTRIS_NOINLINE void* overflow_lookup(const void* field_addr, size_t size) {
214
+ LeptrisCompactOverflowTable* table = get_overflow_table();
215
+ if (!table) return NULL;
216
+ return leptris_compact_overflow_get(table, field_addr);
217
+ }
218
+
201
219
  static LeptrisCompactOverflowTable* get_overflow_table(void) {
202
220
  if (!g_overflow_table) {
203
221
  g_overflow_table = leptris_compact_overflow_table_create(256);
@@ -319,11 +337,8 @@ int32_t leptris_compact_int32_encode_doc(void* base, void* target,
319
337
  void* leptris_compact_int32_decode(void* base, int32_t off,
320
338
  const int32_t* field_addr) {
321
339
  if (off == 0) return NULL;
322
- if (off == LEPTRIS_INT32_OVERFLOW_SENTINEL) {
323
- LeptrisCompactOverflowTable* table = get_overflow_table();
324
- if (table) return leptris_compact_overflow_get(table, field_addr);
325
- return NULL;
326
- }
340
+ if (off == LEPTRIS_INT32_OVERFLOW_SENTINEL)
341
+ return overflow_lookup(field_addr, sizeof(int32_t));
327
342
  return (char*)base + off;
328
343
  }
329
344
 
@@ -409,11 +424,8 @@ void* leptris_compact_ptr16_decode(const void* base, int16_t off,
409
424
  int align_log2,
410
425
  const int16_t* field_addr) {
411
426
  if (off == 0) return NULL;
412
- if (off == LEPTRIS_COMPACT_PTR16_OVERFLOW) {
413
- LeptrisCompactOverflowTable* table = get_overflow_table();
414
- if (table) return leptris_compact_overflow_get(table, field_addr);
415
- return NULL;
416
- }
427
+ if (off == LEPTRIS_COMPACT_PTR16_OVERFLOW)
428
+ return overflow_lookup(field_addr, sizeof(int16_t));
417
429
  return (char*)base + ((ptrdiff_t)off << align_log2);
418
430
  }
419
431
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
3
3
  "name": "leptris",
4
- "version": "1.9.264",
4
+ "version": "1.9.265",
5
5
  "description": "High-performance XML parser and XPath 1.0 engine in C (libleptris)",
6
6
  "homepage": "https://github.com/leptris/leptris",
7
7
  "license": "MIT",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leptris
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.264.0
4
+ version: 1.9.265.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.