parsanol 1.3.57-arm-linux → 1.3.60-arm-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: b95e9035301a942d6d8f3acea734d6a4b0f6c5716dee43bc003cbb0be22060d1
4
- data.tar.gz: c473d80ba7ebcf0ad407c5b1d120641bfc914808d90d7f3cbe45af296f391c69
3
+ metadata.gz: 3da792758f39f95fbce274233536ba8519258c53630d11fc7c0a672563fbd17d
4
+ data.tar.gz: 6fbfbb9537fbc97d84724e7cba802db0c3e1af038191612f60727fe5a854cd35
5
5
  SHA512:
6
- metadata.gz: f998f1206ae7342ff33b5ed1f8225e0a05b9e6f92af7602d7c7741763ca621ee22c50d95ec303a5f44e2ec2f373ee714e20aeb4a57ccc8da108da1b290895820
7
- data.tar.gz: 0a607fc6dda81038d2181e7226afe026a025564deed09b12caab1c938afd25f086096bd3bf6210c0a1b4bb38dfe8445fef032654832dfebd2e24f24b4df2becc
6
+ metadata.gz: 8dc9c2beb73b4a5a704fae73d6b6dff230f634d48a97c79ea6f2d77fa8c861b5c5c6789f3ebd3d3f659a28bffb880783064a6bb48d09499341793cbce6cc6939
7
+ data.tar.gz: 23f12c81803f60944b8a856da0e275df70f11957816612a5337fabd544d547eef2e08e42915fb95e3eee9ed8b0c4c9ec687e731fd033b3a8127084d238d60441
@@ -22,8 +22,10 @@ module Parsanol
22
22
  # never raises NameError into the silent :ruby fallback (issue #38).
23
23
  autoload :Dynamic, "parsanol/native/dynamic"
24
24
  class << self
25
- # Check if native extension is available
25
+ # Check if native extension is available. First call performs the
26
+ # lazy bundle load (see the bottom of this file).
26
27
  def available?
28
+ native_load!
27
29
  Parser.available?
28
30
  end
29
31
 
@@ -241,6 +243,14 @@ module Parsanol
241
243
  value.raise
242
244
  end
243
245
 
246
+ if (marker = error.message.match(NATIVE_POS_MARKER))
247
+ source = Parsanol::Source.new(input)
248
+ cause = Parsanol::Cause.new(
249
+ error.message.sub(NATIVE_POS_MARKER, ""), source, marker[1].to_i
250
+ )
251
+ raise Parsanol::ParseFailed.new(cause.to_s, cause)
252
+ end
253
+
244
254
  source = Parsanol::Source.new(input)
245
255
  cause = Parsanol::Cause.new(error.message, source, source.bytepos)
246
256
  raise Parsanol::ParseFailed.new(cause.to_s, cause)
@@ -296,14 +306,32 @@ module Parsanol
296
306
  end
297
307
  end
298
308
 
299
- # Attempt to load native extension
300
- begin
301
- ruby_version = RUBY_VERSION.split(".").take(2).join(".")
302
- require "parsanol/#{ruby_version}/parsanol_native"
303
- rescue LoadError
304
- begin
305
- require "parsanol/parsanol_native"
306
- rescue LoadError
307
- # Native extension not built yet
309
+ # The native extension loads lazily: dyld-binding the statically-linked
310
+ # engine plus magnus/rb-sys init costs on the order of two seconds, and
311
+ # `require "parsanol"` must stay cheap for consumers that only configure
312
+ # grammars up front. `available?` and `parse` trigger the load; once the
313
+ # bundle is in, its definitions of these same methods take over.
314
+ module Parsanol
315
+ module Native
316
+ @native_state = :pending
317
+
318
+ class << self
319
+ def native_load!
320
+ return @native_state unless @native_state == :pending
321
+
322
+ @native_state = begin
323
+ ruby_version = RUBY_VERSION.split(".").take(2).join(".")
324
+ require "parsanol/#{ruby_version}/parsanol_native"
325
+ :loaded
326
+ rescue LoadError
327
+ begin
328
+ require "parsanol/parsanol_native"
329
+ :loaded
330
+ rescue LoadError
331
+ :unavailable
332
+ end
333
+ end
334
+ end
335
+ end
308
336
  end
309
337
  end
data/lib/parsanol/parg.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # The PARG compiler builds Parsanol atoms, so requiring "parsanol/parg"
4
+ # directly must also load the parsanol core.
5
+ require "parsanol"
6
+
3
7
  module Parsanol
4
8
  # PARG — the parsanol grammar language.
5
9
  #
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parsanol
4
+ # Pool namespace: per-type object pools backing the parser's arena
5
+ # allocations. Each pool loads on first reference.
6
+ module Pools
7
+ autoload :SlicePool, "parsanol/pools/slice_pool"
8
+ autoload :ArrayPool, "parsanol/pools/array_pool"
9
+ autoload :PositionPool, "parsanol/pools/position_pool"
10
+ autoload :BufferPool, "parsanol/pools/buffer_pool"
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parsanol
4
- VERSION = "1.3.57"
4
+ VERSION = "1.3.60"
5
5
  end
data/lib/parsanol.rb CHANGED
@@ -273,47 +273,50 @@ module Parsanol
273
273
  end
274
274
  module_function :exp
275
275
 
276
+ autoload :Resettable, "parsanol/resettable"
277
+ autoload :Result, "parsanol/result"
278
+ autoload :Slice, "parsanol/slice"
279
+ autoload :StringView, "parsanol/string_view"
280
+ autoload :Rope, "parsanol/rope"
281
+ autoload :ObjectPool, "parsanol/pool"
282
+ autoload :Buffer, "parsanol/buffer"
283
+ autoload :Pools, "parsanol/pools"
284
+ autoload :LazyResult, "parsanol/lazy_result"
285
+ autoload :ResultBuilder, "parsanol/result_builder"
286
+ autoload :FirstSet, "parsanol/first_set"
287
+ autoload :Cause, "parsanol/cause"
288
+ autoload :Source, "parsanol/source"
289
+ autoload :Atoms, "parsanol/atoms"
290
+ autoload :Pattern, "parsanol/pattern"
291
+ autoload :Transform, "parsanol/transform"
292
+ autoload :VM, "parsanol/vm"
293
+ autoload :Parser, "parsanol/parser"
294
+ autoload :ErrorReporter, "parsanol/error_reporter"
295
+ autoload :Scope, "parsanol/scope"
296
+ autoload :Optimizer, "parsanol/optimizer"
297
+ autoload :ZeroCopy, "parsanol/options/zero_copy"
298
+ autoload :Native, "parsanol/native"
299
+ autoload :SourcePosition, "parsanol/source_location"
300
+ autoload :GrammarBuilder, "parsanol/grammar_builder"
301
+ autoload :GrammarBuilderDSL, "parsanol/grammar_builder"
302
+ autoload :StreamingParser, "parsanol/streaming_parser"
303
+ autoload :Edit, "parsanol/incremental_parser"
304
+ autoload :IncrementalParser, "parsanol/incremental_parser"
305
+ autoload :BuilderCallbacks, "parsanol/builder_callbacks"
306
+ autoload :Parallel, "parsanol/parallel"
276
307
  autoload :Expression, "parsanol/expression"
277
308
  autoload :IncrementalSession, "parsanol/incremental"
278
309
  autoload :TreeDiff, "parsanol/tree_diff"
279
310
  end
280
311
 
281
312
  require "parsanol/version"
282
- require "parsanol/resettable"
283
- require "parsanol/result"
284
- require "parsanol/slice"
285
- require "parsanol/string_view"
286
- require "parsanol/rope"
287
- require "parsanol/pool"
288
- require "parsanol/pools/slice_pool"
289
- require "parsanol/pools/array_pool"
290
- require "parsanol/pools/position_pool"
291
- require "parsanol/buffer"
292
- require "parsanol/pools/buffer_pool"
293
- require "parsanol/lazy_result"
294
- require "parsanol/result_builder"
295
- require "parsanol/first_set"
296
- require "parsanol/cause"
297
- require "parsanol/source"
298
- require "parsanol/atoms"
299
- require "parsanol/pattern"
313
+
314
+ # Load lazily via autoload (entries live in the file that owns each
315
+ # constant's namespace): `require "parsanol"` is on every consumer's hot
316
+ # path, and the eager require chain cost ~0.9s before the first line of
317
+ # user code. pattern/binding only REOPENS Pattern, so it stays eager.
300
318
  require "parsanol/pattern/binding"
301
- require "parsanol/transform"
302
- require "parsanol/vm"
303
- require "parsanol/parser"
304
- require "parsanol/error_reporter"
305
- require "parsanol/scope"
306
- require "parsanol/optimizer"
307
- require "parsanol/options"
308
- require "parsanol/native"
309
-
310
- # New features (require native extension for full functionality)
311
- require "parsanol/source_location"
312
319
  require "parsanol/grammar_builder"
313
- require "parsanol/streaming_parser"
314
- require "parsanol/incremental_parser"
315
- require "parsanol/builder_callbacks"
316
- require "parsanol/parallel"
317
320
 
318
321
  # Add GrammarBuilder DSL to Parsanol module
319
322
  Parsanol.extend(Parsanol::GrammarBuilderDSL)
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.57
4
+ version: 1.3.60
5
5
  platform: arm-linux
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-30 00:00:00.000000000 Z
11
+ date: 2026-10-01 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
@@ -123,6 +123,7 @@ files:
123
123
  - lib/parsanol/pattern.rb
124
124
  - lib/parsanol/pattern/binding.rb
125
125
  - lib/parsanol/pool.rb
126
+ - lib/parsanol/pools.rb
126
127
  - lib/parsanol/pools/array_pool.rb
127
128
  - lib/parsanol/pools/buffer_pool.rb
128
129
  - lib/parsanol/pools/position_pool.rb