parsanol 1.3.126-aarch64-linux → 1.3.127-aarch64-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: 469d7b9dfb1cf9dd2233e11cf5afa05f0520302ca2de9e8f03516e56359a03d4
4
- data.tar.gz: dd910cd797d6396499295dcea8b92d42f5421d220ad8e29981f492d2f23a1ad1
3
+ metadata.gz: a414d7d80c3c60e8c75348b4af940ebc39ece665b2161f78a087fc8387fd9fd8
4
+ data.tar.gz: 78f18689b7a0f96ddca6a92ddc0358c854ef0c7b5be1dd2c35a0f5ac8714e6f4
5
5
  SHA512:
6
- metadata.gz: ed437bb1664e82aea80c6caa0603bf95e2f87f2b67489d2c48998a67169ad774a3b9c4d6879f8bd24842101111520d04350dc4eb3a4cce2caa7a54c5e75acd96
7
- data.tar.gz: 1be256e1960f5693715114cdb3050a5514a6db2c412eca7f5d4fe9b1c1ced1c930d467d3e70b79a130bbc9fd94f9f147e03f3dbc39563090333c25cbace69e18
6
+ metadata.gz: b1287ff6268999ad7eaece78fa3a506e020be8d258c1dc195c2462ea72b137fcb3ecfc06843e192f1b2de69600ee68a9cc8bea2351730268b40e8baf8524d336
7
+ data.tar.gz: 95be672cb009898a4a23fe1e397751386f558b2cb6251e41aa6daed41e1c9da287d6e5baf632934b338508f37af89d6c500605d595cd352da5559ade668450ed
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: data/lib/parsanol/3.2/parsanol_native.so
3
3
  size: 46910336 bytes
4
- sha256: 8d7e1966a60b119c94e953d2c8ac4252458c6212504e49dda57f717dd56e9189
4
+ sha256: 5cd5a302f76b0909f10f387af4c8a22dfe9da90192063253ca8410520d77267e
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: data/lib/parsanol/3.3/parsanol_native.so
3
3
  size: 47149512 bytes
4
- sha256: 08447a1aa4099facf97b0ca641d0c45edf9b6367209c910c11ea8f18f733eb87
4
+ sha256: e104c338a85bc11c45bd64f8492fd960dc47d7965da09d5ee248a2fb70c62901
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: data/lib/parsanol/3.4/parsanol_native.so
3
3
  size: 47153584 bytes
4
- sha256: e3457976c543c4a6903dac2fbb4fd35974993625607dfd1bfdaca22d26e1c7ba
4
+ sha256: fe0565167c22afdb6643360716d5e19a5d73536fdaa663fa4b7af2e12dc0131f
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: data/lib/parsanol/4.0/parsanol_native.so
3
3
  size: 47163544 bytes
4
- sha256: c3c1c4ce3aa03dd09d4f914f6153fd4340139667779c8e30b4203659d004c62c
4
+ sha256: feab8ac11d723ae37873cd5b48940c7c7e1e0ca0d1240286cd02500309d9757d
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: data/lib/parsanol/native/libparsanol.so
3
- size: 42619488 bytes
4
- sha256: afdcd2e4f62a20e8ffe905d5364d8b06211b6741a986d0eb4237f30b3e646723
3
+ size: 42619384 bytes
4
+ sha256: 6b86ec205cdca97b35f0f249d5b1e4af27278c3ec6e6c62279af613fa8ec882d
@@ -36,10 +36,24 @@ module Parsanol
36
36
  # bound map (parsanol-ruby#413): a capture present in the parse
37
37
  # but bound nowhere is silent data loss, the one case the
38
38
  # binding layer's other checks miss. Absence in the TREE is
39
- # legitimate optionality and never raises.
39
+ # legitimate optionality and never raises. Coverage is checked
40
+ # against every hash key anywhere in the bound map, not just the
41
+ # binding's own leaf: a `(raw)` binding carries its entire
42
+ # subtree, so captures nested inside a raw-bound ancestor are
43
+ # delivered through it (parsanol-ruby#427 — BS 9113 bundled_list).
44
+ bound_keys = {}
45
+ walk_keys = lambda do |node|
46
+ case node
47
+ when Hash
48
+ node.each_key { |key| bound_keys[key.to_sym] = true }
49
+ node.each_value { |value| walk_keys.call(value) }
50
+ when Array then node.each(&walk_keys)
51
+ end
52
+ end
53
+ walk_keys.call(out)
40
54
  lost = bindings.select do |binding|
41
55
  capture = binding["capture"].to_sym
42
- present.include?(capture) && !bound?(out, binding)
56
+ present.include?(capture) && !bound_keys.key?(capture)
43
57
  end
44
58
  unless lost.empty?
45
59
  raise BindError,
@@ -49,21 +63,6 @@ module Parsanol
49
63
  out
50
64
  end
51
65
 
52
- # Did this binding contribute anything to the bound map? Scalars
53
- # bind under their leaf key; array groups bind under their prefix.
54
- def bound?(out, binding)
55
- path = binding["path"].to_s
56
- if path.include?("[]")
57
- prefix = path.split("[]").first.to_sym
58
- rows = out[prefix]
59
- rows.is_a?(Array) && rows.any? do |row|
60
- row.is_a?(Hash) && row.key?(leaf_key(binding))
61
- end
62
- else
63
- out.key?(leaf_key(binding))
64
- end
65
- end
66
-
67
66
  # Canonical test-value form: one equality surface for capture and
68
67
  # example expectations on both sides of the comparison (Slice vs
69
68
  # source literal was comparing heterogeneous types). Terminals
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parsanol
4
- VERSION = "1.3.126"
4
+ VERSION = "1.3.127"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parsanol
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.126
4
+ version: 1.3.127
5
5
  platform: aarch64-linux
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-11-02 00:00:00.000000000 Z
11
+ date: 2026-11-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A small Ruby library for constructing parsers in the PEG (Parsing Expression
14
14
  Grammar) fashion. Parsanol provides Parslet-compatible API with additional features