sexp_processor 4.11.0 → 4.16.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 +1 -3
- data/History.rdoc +88 -0
- data/Manifest.txt +1 -0
- data/Rakefile +2 -0
- data/lib/pt_testcase.rb +22 -19
- data/lib/sexp.rb +32 -1061
- data/lib/sexp_matcher.rb +1100 -0
- data/lib/sexp_processor.rb +2 -2
- data/lib/strict_sexp.rb +26 -4
- data/test/test_sexp.rb +213 -134
- data/test/test_sexp_processor.rb +2 -2
- data.tar.gz.sig +1 -2
- metadata +32 -22
- metadata.gz.sig +0 -0
data/lib/sexp_processor.rb
CHANGED
@@ -34,7 +34,7 @@ require "sexp"
|
|
34
34
|
class SexpProcessor
|
35
35
|
|
36
36
|
# duh
|
37
|
-
VERSION = "4.
|
37
|
+
VERSION = "4.16.0"
|
38
38
|
|
39
39
|
##
|
40
40
|
# Automatically shifts off the Sexp type before handing the
|
@@ -317,7 +317,7 @@ class SexpProcessor
|
|
317
317
|
|
318
318
|
def assert_type list, typ
|
319
319
|
raise SexpTypeError, "Expected type #{typ.inspect} in #{list.inspect}" if
|
320
|
-
not Array === list or list.
|
320
|
+
not Array === list or list.sexp_type != typ
|
321
321
|
end
|
322
322
|
|
323
323
|
def error_handler type, exp = nil # :nodoc:
|
data/lib/strict_sexp.rb
CHANGED
@@ -36,6 +36,7 @@
|
|
36
36
|
# 4 = sexp << => no
|
37
37
|
|
38
38
|
class Sexp
|
39
|
+
# alias :_concat :concat in sexp.rb so we have access to the original
|
39
40
|
alias :safe_idx :[]
|
40
41
|
alias :safe_asgn :[]=
|
41
42
|
alias :sexp_type= :sexp_type=
|
@@ -43,9 +44,10 @@ class Sexp
|
|
43
44
|
alias :shift :shift
|
44
45
|
|
45
46
|
def self.nuke_method name, level
|
47
|
+
return unless __strict >= level
|
46
48
|
define_method name do |*args|
|
47
|
-
raise "no: %
|
48
|
-
end
|
49
|
+
raise "no mutation allowed on sexps: %s.%s %s" % [self, name, args]
|
50
|
+
end
|
49
51
|
end
|
50
52
|
|
51
53
|
def self.__strict
|
@@ -87,7 +89,7 @@ class Sexp
|
|
87
89
|
|
88
90
|
nuke_method :collect!, 4
|
89
91
|
nuke_method :compact!, 4
|
90
|
-
nuke_method :concat, 4
|
92
|
+
nuke_method :concat, 4 # HACK: using self.class.new.concat(...) for speed
|
91
93
|
nuke_method :flatten!, 4
|
92
94
|
nuke_method :map!, 4
|
93
95
|
nuke_method :pop, 4
|
@@ -111,7 +113,7 @@ class Sexp
|
|
111
113
|
end
|
112
114
|
|
113
115
|
def sexp_body from = 1
|
114
|
-
safe_idx
|
116
|
+
self.new._concat(safe_idx(from..-1) || [])
|
115
117
|
end
|
116
118
|
|
117
119
|
def sexp_type= v
|
@@ -123,4 +125,24 @@ class Sexp
|
|
123
125
|
end
|
124
126
|
end unless Sexp.new.respond_to? :safe_asgn if ENV["STRICT_SEXP"]
|
125
127
|
|
128
|
+
if ENV["SP_DEBUG"] && !ENV["STRICT_SEXP"] then
|
129
|
+
class Sexp
|
130
|
+
mutators = %i[
|
131
|
+
[]= clear collect! compact! concat delete delete_at
|
132
|
+
delete_if drop drop_while fill flatten! replace insert
|
133
|
+
keep_if map! pop push reject! reverse! rotate! select!
|
134
|
+
shift shuffle! slice! sort! sort_by! transpose uniq!
|
135
|
+
unshift
|
136
|
+
]
|
137
|
+
|
138
|
+
mutators.each do |method|
|
139
|
+
define_method method do |*|
|
140
|
+
warn "Sexp modified by %p at %s" % [__method__, caller.first] if
|
141
|
+
$VERBOSE or (defined?(@hash) and @hash)
|
142
|
+
super
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
126
148
|
# :startdoc:
|