parsanol 1.3.57-aarch64-linux → 1.3.60-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 +4 -4
- data/lib/parsanol/native.rb +38 -10
- data/lib/parsanol/parg.rb +4 -0
- data/lib/parsanol/pools.rb +12 -0
- data/lib/parsanol/version.rb +1 -1
- data/lib/parsanol.rb +36 -33
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 07a4f1cbd772e683f781b87ee896a9f4372986e3c6fbb515be6fa8a552ceb4c9
|
|
4
|
+
data.tar.gz: 61037a0c5d5fb9b9e5fc0db6fa5bf6c322c06cebca137b8267473efcbb9bbf5f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1b818927c499281c6d03df9d1a1e8de34c754604c87809003fb13ff8097c565ae4c14b3c416f9cc022102749ac514bcdf1a349d6985ca2d799db767575e1c952
|
|
7
|
+
data.tar.gz: b770ea93130f499790000a3fdb0f273d1e39fa477542bee3ee6975c1582b22ffd8f1b14f72ba1c009a5edb78168993e7cf72f73112528cdc82651c6bb7ea1bcf
|
data/lib/parsanol/native.rb
CHANGED
|
@@ -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
|
-
#
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
@@ -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
|
data/lib/parsanol/version.rb
CHANGED
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
|
-
|
|
283
|
-
|
|
284
|
-
require "parsanol
|
|
285
|
-
require
|
|
286
|
-
|
|
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.
|
|
4
|
+
version: 1.3.60
|
|
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
|
+
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
|