sexp_processor 4.8.0 → 4.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.txt +14 -0
- data/lib/pt_testcase.rb +2 -2
- data/lib/sexp.rb +29 -3
- data/lib/sexp_processor.rb +2 -7
- data/test/test_sexp.rb +57 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8a4cb1d34e3c86a00ee122db28cf4d3b7d2ef34
|
4
|
+
data.tar.gz: bec449692c425f44e6e40da22b7dae0192956640
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ca8f74ecc9e62dc1dd2d2eb272b0cd2502255fa956c75bf8bdad60990070ec05a03d8806c6acf6f61f6d30915b5d3caea73410c551f1a21c7eb528d085f7553
|
7
|
+
data.tar.gz: ef4dde66d8a7a6903ddad8520c1bba5ac2885c3fea7a13d54f4d6affd7e42780e78faaebf7c70aa7b26a4aca650673c26d9f39a166bebb1d1cd201e31be25bc0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
=== 4.9.0 / 2017-04-13
|
2
|
+
|
3
|
+
* 9 minor enhancements:
|
4
|
+
|
5
|
+
* Added Sexp.depth
|
6
|
+
* Added Sexp.sexp_type=
|
7
|
+
* Cache Sexp.line_max. Massively speeds up large flay runs.
|
8
|
+
* Cleaned up SexpProcessor.process handling of result node type.
|
9
|
+
* Extend pt_testcase for ruby 2.4 tests.
|
10
|
+
* Extended Sexp.method_missing to only print on every invocation if $VERBOSE=1
|
11
|
+
* Extended Sexp.method_missing to warn if the expected sub-sexp is not found.
|
12
|
+
* Rewrote Sexp.mass to be MUCH faster. Helps tremendously with flay on large files.
|
13
|
+
* Warn that Sexp#method_missing was tripped if $DEBUG.
|
14
|
+
|
1
15
|
=== 4.8.0 / 2017-02-01
|
2
16
|
|
3
17
|
* 2 minor enhancements:
|
data/lib/pt_testcase.rb
CHANGED
@@ -76,7 +76,7 @@ class ParseTreeTestCase < Minitest::Test
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def self.add_19tests name, hash
|
79
|
-
add_tests "#{name}
|
79
|
+
add_tests "#{name}__19_20_21_22_23_24", hash # HACK?
|
80
80
|
end
|
81
81
|
|
82
82
|
def self.add_19edgecases ruby, sexp, cases
|
@@ -101,7 +101,7 @@ class ParseTreeTestCase < Minitest::Test
|
|
101
101
|
testcases[verbose][klass] = testcases[nonverbose][klass]
|
102
102
|
end
|
103
103
|
|
104
|
-
VER_RE = "(1[89]|2[
|
104
|
+
VER_RE = "(1[89]|2[01234])"
|
105
105
|
|
106
106
|
def self.generate_test klass, node, data, input_name, output_name
|
107
107
|
klass.send :define_method, "test_#{node}" do
|
data/lib/sexp.rb
CHANGED
@@ -95,6 +95,10 @@ class Sexp < Array # ZenTest FULL
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
+
def depth
|
99
|
+
1 + (each_sexp.map(&:depth).max || 0)
|
100
|
+
end
|
101
|
+
|
98
102
|
##
|
99
103
|
# Enumeratates the sexp yielding to +b+ when the node_type == +t+.
|
100
104
|
|
@@ -203,21 +207,36 @@ class Sexp < Array # ZenTest FULL
|
|
203
207
|
# Returns the maximum line number of the children of self.
|
204
208
|
|
205
209
|
def line_max
|
206
|
-
self.deep_each.map(&:line).max
|
210
|
+
@line_max ||= self.deep_each.map(&:line).max
|
207
211
|
end
|
208
212
|
|
209
213
|
##
|
210
214
|
# Returns the size of the sexp, flattened.
|
211
215
|
|
212
216
|
def mass
|
213
|
-
@mass ||=
|
217
|
+
@mass ||=
|
218
|
+
inject(1) { |t, s|
|
219
|
+
if Sexp === s then
|
220
|
+
t + s.mass
|
221
|
+
else
|
222
|
+
t
|
223
|
+
end
|
224
|
+
}
|
214
225
|
end
|
215
226
|
|
216
227
|
##
|
217
228
|
# Returns the node named +node+, deleting it if +delete+ is true.
|
218
229
|
|
219
230
|
def method_missing meth, delete = false
|
220
|
-
find_node meth, delete
|
231
|
+
r = find_node meth, delete
|
232
|
+
if ENV["DEBUG"] then
|
233
|
+
if r.nil? then
|
234
|
+
warn "%p.method_missing(%p) => nil from %s" % [self, meth, caller.first]
|
235
|
+
elsif ENV["VERBOSE"]
|
236
|
+
warn "%p.method_missing(%p) from %s" % [self, meth, caller.first]
|
237
|
+
end
|
238
|
+
end
|
239
|
+
r
|
221
240
|
end
|
222
241
|
|
223
242
|
def respond_to? msg, private = false # :nodoc:
|
@@ -241,6 +260,13 @@ class Sexp < Array # ZenTest FULL
|
|
241
260
|
first
|
242
261
|
end
|
243
262
|
|
263
|
+
##
|
264
|
+
# Sets the node type of the Sexp.
|
265
|
+
|
266
|
+
def sexp_type= v
|
267
|
+
self[0] = v
|
268
|
+
end
|
269
|
+
|
244
270
|
##
|
245
271
|
# Returns the Sexp body, ie the values without the node type.
|
246
272
|
|
data/lib/sexp_processor.rb
CHANGED
@@ -33,7 +33,7 @@ require 'sexp'
|
|
33
33
|
|
34
34
|
class SexpProcessor
|
35
35
|
|
36
|
-
VERSION = "4.
|
36
|
+
VERSION = "4.9.0"
|
37
37
|
|
38
38
|
##
|
39
39
|
# Automatically shifts off the Sexp type before handing the
|
@@ -278,12 +278,7 @@ class SexpProcessor
|
|
278
278
|
|
279
279
|
# NOTE: this is costly, but we are in the generic processor
|
280
280
|
# so we shouldn't hit it too much with RubyToC stuff at least.
|
281
|
-
|
282
|
-
begin
|
283
|
-
result.sexp_type = exp.sexp_type
|
284
|
-
rescue Exception
|
285
|
-
# nothing to do, on purpose
|
286
|
-
end
|
281
|
+
result.sexp_type = exp.sexp_type if Sexp === exp and exp.sexp_type
|
287
282
|
else
|
288
283
|
msg = "Bug! Unknown node-type #{type.inspect} to #{self.class}"
|
289
284
|
msg += " in #{exp_orig.inspect} from #{caller.inspect}" if $DEBUG
|
data/test/test_sexp.rb
CHANGED
@@ -1,10 +1,24 @@
|
|
1
1
|
$TESTING = true
|
2
2
|
|
3
3
|
require 'minitest/autorun'
|
4
|
+
require "minitest/benchmark" if ENV["BENCH"]
|
4
5
|
require 'sexp_processor'
|
5
6
|
require 'stringio'
|
6
7
|
require 'pp'
|
7
8
|
|
9
|
+
def pyramid_sexp max
|
10
|
+
# s(:array,
|
11
|
+
# s(:array, s(:s, 1)),
|
12
|
+
# s(:array, s(:s, 1), s(:s, 2)),
|
13
|
+
# ...
|
14
|
+
# s(:array, s(:s, 1), s(:s, 2), ... s(:s, max-1)))
|
15
|
+
|
16
|
+
s(:array,
|
17
|
+
*(1...max).map { |n|
|
18
|
+
s(:array, *(1..n).map { |m|
|
19
|
+
s(:s, m) })})
|
20
|
+
end
|
21
|
+
|
8
22
|
class SexpTestCase < Minitest::Test
|
9
23
|
# KEY for regex tests
|
10
24
|
# :a == no change
|
@@ -235,6 +249,15 @@ class TestSexp < SexpTestCase # ZenTest FULL
|
|
235
249
|
assert_equal 7, s.mass
|
236
250
|
end
|
237
251
|
|
252
|
+
def test_mass_huge
|
253
|
+
max = 100
|
254
|
+
sexp = pyramid_sexp max
|
255
|
+
|
256
|
+
exp = (max*max + max)/2 # pyramid number 1+2+3+...+m
|
257
|
+
|
258
|
+
assert_equal exp, sexp.mass
|
259
|
+
end
|
260
|
+
|
238
261
|
def test_method_missing
|
239
262
|
assert_nil @sexp.not_there
|
240
263
|
assert_equal s(:lit, 42), @basic_sexp.lit
|
@@ -342,6 +365,13 @@ class TestSexp < SexpTestCase # ZenTest FULL
|
|
342
365
|
assert_equal [42], @basic_sexp.each_sexp.map { |_, n| n }
|
343
366
|
end
|
344
367
|
|
368
|
+
def test_depth
|
369
|
+
assert_equal 1, s(:a).depth
|
370
|
+
assert_equal 2, s(:a, s(:b)).depth
|
371
|
+
assert_equal 3, s(:a, s(:b1, s(:c)), s(:b2)).depth
|
372
|
+
assert_equal 5, s(:a, s(:b, s(:c, s(:d, s(:e))))).depth
|
373
|
+
end
|
374
|
+
|
345
375
|
def test_deep_each
|
346
376
|
result = []
|
347
377
|
@complex_sexp.deep_each { |s| result << s if s.first == :if }
|
@@ -373,3 +403,30 @@ class TestSexpAny < SexpTestCase
|
|
373
403
|
end
|
374
404
|
|
375
405
|
end
|
406
|
+
|
407
|
+
class BenchSexp < Minitest::Benchmark
|
408
|
+
def run
|
409
|
+
GC.disable
|
410
|
+
super
|
411
|
+
ensure
|
412
|
+
GC.enable
|
413
|
+
end
|
414
|
+
|
415
|
+
def self.bench_range
|
416
|
+
bench_linear 100, 500, 50
|
417
|
+
end
|
418
|
+
|
419
|
+
@@data = Hash[bench_range.map { |n| [n, pyramid_sexp(n)] }]
|
420
|
+
|
421
|
+
def bench_pyramid
|
422
|
+
assert_performance_power do |max|
|
423
|
+
pyramid_sexp max
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
def bench_mass
|
428
|
+
assert_performance_power do |max|
|
429
|
+
@@data[max].mass
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end if ENV["BENCH"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sexp_processor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
E4oJcnPkJAr0rw504JGtlZtONZQblwmRJOIdXzolaE3NRGUzGVOUSptZppAKiavY
|
31
31
|
fO6tdKQc/5RfA8oQEkg8hrxA5PQSz4TOFJGLpFvIapEk6tMruQ0bHgkhr9auXg==
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2017-
|
33
|
+
date: 2017-04-13 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rdoc
|
metadata.gz.sig
CHANGED
Binary file
|