leptris 1.9.396.0-ppc64le-linux → 1.9.397.0-ppc64le-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: 948d64de60780abbd35c5eb75ecbb69609396b681b219047ef0ac7775b9383c3
4
- data.tar.gz: 69236732f06743bd08714bbf46697cadd63febc486e324ffeee46798c5182fce
3
+ metadata.gz: b3f0490bdb914347d99bb5eedb4fff6923bea51c797fcce2abae924bbb324030
4
+ data.tar.gz: d1598985f60183da355dd0daea94991ec924d760b28e2e5d93cd32448e9f8c4a
5
5
  SHA512:
6
- metadata.gz: d3a2ee8d49e508f8d27bbf36610c2d9cd1975c5ec8fdf6f8f752d81c1154f22c630fc5883ab2fd5af5afcafa920eebb8342a7e8777af3dd82fef88d6acf7957b
7
- data.tar.gz: 955dccf5c781bd9e1906bade2ae4182fa50d28c15dc899950f0edb340cb77c8deacc307a9132f9e7ba23348398ddd71e911d1082105c07940576f8fb9600956c
6
+ metadata.gz: 9acbe89414fca6dffbdb4c1f276586e3181caa64b92503c6e37a9fcfff5a742763d807c586990198c07da83835cfb7432bf0e5bc576f3090ce1bf357e142d221
7
+ data.tar.gz: bcb66c4941d8bc3a6870ff4b2f33976108cdd9d2e9068ee2b3da137e50ce7795491f168ccab2ca81488c7fa84af968785ab655472f19e757654c88a8b2011fd7
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.396"
11
+ LIBLEPTRIS_VERSION = "1.9.397"
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.396.0"
4
+ VERSION = "1.9.397.0"
5
5
  end
data/lib/libleptris.so CHANGED
Binary file
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.396
4
+ - libleptris v1.9.397
5
5
  - utf8proc v2.11.0
6
6
 
7
7
  Rebuild by hand:
@@ -1,5 +1,22 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.9.397] - 2026-10-31
4
+
5
+ ### Performance
6
+
7
+ - **Attribute-value tail fused into one pass (leptris#1842, PR
8
+ #1934).** With the UTF-8 gate on the SIMD validator, the line
9
+ profile moved to `dp_parse_attrs`: values of ~50 bytes just miss
10
+ the 48-byte inline probe, so every attribute paid the quote
11
+ memchr AND a SIMD-contains CALL for `&` AND a second full byte
12
+ loop for literal whitespace — three scans of every value. One
13
+ fused early-exit loop computes both flags: **parse +28%** on the
14
+ 2.2MB dense-UTF-8 fixture (4.11 -> 3.20 ms, 536 -> 686 MB/s with
15
+ frame pointers). Flag semantics unchanged; amp/whitespace hits
16
+ from the inline probe still short-circuit the tail.
17
+
18
+
19
+
3
20
  ## [1.9.396] - 2026-10-31
4
21
 
5
22
  ### Fixed
@@ -3,7 +3,7 @@
3
3
  cmake_minimum_required(VERSION 3.20)
4
4
 
5
5
  project(leptris
6
- VERSION 1.9.396
6
+ VERSION 1.9.397
7
7
  DESCRIPTION "Fast XML parser and XPath evaluator in pure C"
8
8
  LANGUAGES C CXX
9
9
  )
@@ -1114,17 +1114,17 @@ static int dp_parse_attrs(DParser* p, LeptrisElement elem) {
1114
1114
  if (q >= p->end) return -1; /* unterminated */
1115
1115
  val_end = (char*)memchr(q, quote, p->end - q);
1116
1116
  if (!val_end) return -1;
1117
- if (q < val_end) {
1118
- if (!has_amp &&
1119
- leptris_text_contains(q, (size_t)(val_end - q), '&'))
1120
- has_amp = 1;
1121
- if (!has_ws) {
1122
- for (const char* w = q; w < val_end; w++) {
1123
- if (*w == '\t' || *w == '\n' || *w == '\r') {
1124
- has_ws = 1;
1125
- break;
1126
- }
1127
- }
1117
+ if (q < val_end && (!has_amp || !has_ws)) {
1118
+ /* One fused pass for '&' and literal \t/\n/\r: the old
1119
+ * shape paid a SIMD-contains CALL plus a second byte
1120
+ * loop per attribute — 3 scans of every value on the
1121
+ * #1842 profile (50-byte values just miss the 48-byte
1122
+ * inline probe, so this tail ran for all of them). */
1123
+ for (const char* w = q; w < val_end; w++) {
1124
+ unsigned char c = (unsigned char)*w;
1125
+ has_amp |= (c == '&');
1126
+ has_ws |= (c == '\t' || c == '\n' || c == '\r');
1127
+ if (has_amp && has_ws) break;
1128
1128
  }
1129
1129
  }
1130
1130
  }
@@ -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.396",
4
+ "version": "1.9.397",
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.396.0
4
+ version: 1.9.397.0
5
5
  platform: ppc64le-linux
6
6
  authors:
7
7
  - Ribose Inc.