parsanol 1.3.58 → 1.3.60
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 +30 -10
- data/lib/parsanol/pools.rb +12 -0
- data/lib/parsanol/version.rb +1 -1
- data/lib/parsanol.rb +36 -33
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7b0b6d85c512010d47ad5bb8237ac68ed2e9d16f1d4c7082bad5c77870ad1836
|
|
4
|
+
data.tar.gz: b97e208a29314adfe0d13344383518ea50114c140dc2208d74fd9b5bdd502677
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f8d1294a9f3d674464b25087a4e7a0f89522be9e822b44a6307cbacd195f0db4cdf6151c2f1b02eb93d4b46acff1942fc4d5bf57efcbcc3b9c42f26a53177ce5
|
|
7
|
+
data.tar.gz: e6fd368e0aaae0519280932e4697d0e5f491975d25fbf2343a62f59822a55e076256ec7c6f9ce14c7017f61cde2a1daf45860c476108cee39baa5cab9beb9ba3
|
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
|
|
|
@@ -304,14 +306,32 @@ module Parsanol
|
|
|
304
306
|
end
|
|
305
307
|
end
|
|
306
308
|
|
|
307
|
-
#
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
|
316
336
|
end
|
|
317
337
|
end
|
|
@@ -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,7 +1,7 @@
|
|
|
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: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
@@ -140,6 +140,7 @@ files:
|
|
|
140
140
|
- lib/parsanol/pattern.rb
|
|
141
141
|
- lib/parsanol/pattern/binding.rb
|
|
142
142
|
- lib/parsanol/pool.rb
|
|
143
|
+
- lib/parsanol/pools.rb
|
|
143
144
|
- lib/parsanol/pools/array_pool.rb
|
|
144
145
|
- lib/parsanol/pools/buffer_pool.rb
|
|
145
146
|
- lib/parsanol/pools/position_pool.rb
|