redparse 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,4 +1,63 @@
1
- === 0.8.3 / 2009-07-01
1
+ === 0.8.4 / 21dec2009
2
+ * 5 Major Enhancements:
3
+ * OpNode and related modules are now classes
4
+ * parse results are now cached -> substantial speedup on reparse
5
+ * moderate performance improvements for regular parser too
6
+ * inspect now dumps node trees in more readable tree-like output
7
+ * tests now ignore (with a warning) differences in just a :begin node
8
+
9
+ * 18 Minor Enhancements:
10
+ * single code path utility now converts bare => in calls and between [ and ]
11
+ * reworked the way ternary rescue is parsed
12
+ * new build script & gemspec
13
+ * better way to deal with default of :rubyversion parser option
14
+ * various fixes to xform_tree! rewriter utility (still doesn't work, tho)
15
+ * improvements to constructors to make creating nodes by hand more pleasant
16
+ * parser now creates nodes via Node.create
17
+ * use AssignmentRhsListStart/EndToken to delimit right hand sides
18
+ * lhs* and rhs* should be considered unary ops again
19
+ * when parens in assign lhs, treat unary* and single arg like no parens
20
+ * VarNode#ident is now kept in a slot, not an ivar
21
+ * force body of a block to always be a SequenceNode
22
+ * added RedParse::Nodes; include it to get all the redparse node classes
23
+ * have each node class remember a list of its slot names
24
+ * added aliases and accessors in various nodes to make the api nicer
25
+ * moved some utilities into the support libraries where they belong
26
+ * slight improvements to parser compiler
27
+ * added a version of depthwalk which just visits the Nodes of the tree
28
+
29
+ * 18 Bugfixes:
30
+ * parser now runs under MRI 1.9
31
+ * (more?) accurate version of Float#to_s, for 1.8
32
+ * minor tweaks to #unparse
33
+ * value of () is nil, not false
34
+ * get redparse/version.rb relative to current directory from gemspec
35
+ * when comparing trees, more insignificant differences are ignored
36
+ * Node#deep_copy makes more faithful copies now
37
+ * node marshalling should be more reliable
38
+ * tweaks to parse_tree support to improve conformance
39
+ * support automagicness of integer&regexp in flipflop (in parse_tree output)
40
+ * parse_tree's placement of :begin nodes is somewhat better emulated
41
+ * always put parse inputs into binary mode
42
+ * changed some operators (lhs, rescue3 unary* rhs*) to proper precedence
43
+ * numeric literals inserted directly in parsetrees should be autoquoted
44
+ * ensure @lhs_parens set in AssignNode when it should be
45
+ * make sure ListInNode is extended into arrays added to Nodes via writers
46
+ * permit empty symbol LiteralNode to be made
47
+ * fixed bad permissions in gem file
48
+
49
+ * 9 Changes To Tests:
50
+ * test Node trees surviving Marshal/Ron round-trip and deep_copy unscathed
51
+ * tests for many of the new 1.9 syntax constructions
52
+ * parse_tree server process now started in a more portable way
53
+ * lots of new test cases
54
+ * rp-locatetest now has docs on how to use it
55
+ * keep track of problematic files if even the slightest problem occurs
56
+ * enable/disable fuzzing with ENV var rather than comments
57
+ * make sure inputs are unchanged by parse
58
+ * better organized some of the known failing testcases
59
+
60
+ === 0.8.3 / 1jul2009
2
61
  * 7 Minor Enhancements:
3
62
  * most nodes now have startline, endline, and offset
4
63
  * Node.[] is more fun to use now (most attributes can be left off)
@@ -12,7 +71,7 @@
12
71
  * more faithful ParseTree emulation in a couple of cases
13
72
  * minor fixes in node processing for some rare conditions
14
73
 
15
- === 0.8.2 / 2009-04-21
74
+ === 0.8.2 / 21apr2009
16
75
  * 14 Minor Enhancements:
17
76
  * should be no tokens left in Node tree now
18
77
  * lots of code trying to make things faster (no luck so far)
@@ -43,14 +102,14 @@
43
102
  * (so escape translation has to be done later, when Nodes are used)
44
103
  * #to_parsetree of an empty source text should be happier now
45
104
 
46
- === 0.8.1 / 2009-04-21
105
+ === 0.8.1 / 21apr2009
47
106
  * 4 Minor Enhancements:
48
107
  * fixed embarassing permissions problems
49
108
  * version.rb and History.txt were missing from the release
50
109
  * I left off the dependancy on reg, oops!
51
110
  * hacked up tests to ignore sudden problem with extra nils
52
111
 
53
- === 0.8.0 / 2008-10-10
112
+ === 0.8.0 / 10oct2008
54
113
  * 1 Major Enhancement:
55
114
  * Birthday!
56
115
 
data/Makefile ADDED
@@ -0,0 +1,43 @@
1
+ name=RedParse
2
+ lname=redparse
3
+ gemname=redparse
4
+
5
+ #everything after this line is generic
6
+
7
+ version=$(shell ruby -r ./lib/$(lname)/version.rb -e "puts $(name)::VERSION")
8
+ filelist=$(shell git ls-files)
9
+
10
+ .PHONY: all test docs gem tar pkg email
11
+ all: test
12
+
13
+ test:
14
+ ruby -Ilib test/test_all.rb
15
+
16
+ docs:
17
+ rdoc lib/*
18
+
19
+ pkg: gem tar
20
+
21
+ gem:
22
+ gem build $(lname).gemspec
23
+
24
+ tar:
25
+ tar cf - $(filelist) | ( mkdir $(gemname)-$(version); cd $(gemname)-$(version); tar xf - )
26
+ tar czf $(gemname)-$(version).tar.gz $(gemname)-$(version)
27
+ rm -rf $(gemname)-$(version)
28
+
29
+ email: README.txt History.txt
30
+ ruby -e ' \
31
+ require "rubygems"; \
32
+ load "./$(lname).gemspec"; \
33
+ spec= Gem::Specification.list.find{|x| x.name=="$(gemname)"}; \
34
+ puts "\
35
+ Subject: [ANN] $(name) #{spec.version} Released \
36
+ \n\n$(name) version #{spec.version} has been released! \n\n\
37
+ #{Array(spec.homepage).map{|url| " * #{url}\n" }} \
38
+ \n\
39
+ #{$(name)::Description} \
40
+ \n\nChanges:\n\n \
41
+ #{$(name)::Latest_changes} \
42
+ "\
43
+ '
data/README.txt CHANGED
@@ -10,9 +10,11 @@ tool is LALR(1)-equivalent and the 'parse language' is pretty nice,
10
10
  even in it's current crude form.)
11
11
 
12
12
  My intent is to have a completely correct parser for ruby, in 100%
13
- ruby. It's not all there yet, but I'm getting pretty close. Currently,
14
- RedParse can parse slightly in excess of 99% of ruby files found in
15
- the wild. For known problems, see below.
13
+ ruby. Currently, RedParse can parse all known ruby 1.8 constructions
14
+ correctly. There might be some problems with unparsing or otherwise
15
+ working with texts in a character set other than ascii. Some of the
16
+ new ruby 1.9 constructions are supported in 1.9 mode. For more
17
+ details on known problems, see below.
16
18
 
17
19
  == REQUIREMENTS:
18
20
  * RedParse requires RubyLexer, my hand-coded lexer for ruby. It also
@@ -41,6 +43,7 @@ Please see COPYING.LGPL for details.
41
43
  * Pretty AST trees (at least, I think so). (To program for, not
42
44
  necessarily to look at.)
43
45
  * AST trees closely mirror the actual structure of source code.
46
+ * unparser is built in
44
47
  * ParseTree format output too, if you want that.
45
48
  * Did I mention that there's no YACC at all? YACC grammars are
46
49
  notoriously difficult to modify, (I've never successfully done it)
@@ -63,7 +66,6 @@ Please see COPYING.LGPL for details.
63
66
  * Pathetically, ridiculously slow (ok, compiler-compilers are hard...)
64
67
  * Error handling is very minimal right now.
65
68
  * No warnings at all.
66
- * Some expressions aren't parsed correctly. see below.
67
69
  * Unit test takes a fairly long time.
68
70
  * Lots of warnings printed during unit test.
69
71
  * Debugging parse rules is not straightforward.
@@ -71,6 +73,8 @@ Please see COPYING.LGPL for details.
71
73
  * "loosey-goosey" parser happily parses many expressions which normal
72
74
  ruby considers errors.
73
75
 
76
+
77
+
74
78
  == SYNOPSIS:
75
79
 
76
80
  #simple example of usage:
@@ -140,219 +144,150 @@ existing format in the future, but no incompatibility-creating changes.
140
144
  UnAmpNode means UnOpNode with op == "&"
141
145
 
142
146
  Node<Array #abstract ancestor of all nodes
143
- +RescueNode #a rescue clause in a def or begin statement
147
+ +-RescueNode #a rescue clause in a def or begin statement
144
148
  | (exceptions: Array[Expr*], varname: VarNode|nil, action: Expr)
145
- +WhenNode #a when clause in a case statement
149
+ +-WhenNode #a when clause in a case statement
146
150
  | (when: Expr|Array[Expr+] then: Expr|nil )
147
- +ElsifNode #an elsif clause in an if statement
151
+ +-ElsifNode #an elsif clause in an if statement
148
152
  | (elsif: Expr, then: Expr|nil)
149
- +ValueNode #abstract, a node which has a value (an expression)
150
- |+VarNode #represents variables and constants
153
+ +-ValueNode #abstract, a node which has a value (an expression)
154
+ |+-VarNode #represents variables and constants
151
155
  || (ident: String)
152
- |+ListOpNode #abstract, ancestor for nodes which are lists of
156
+ |+-ListOpNode #abstract, ancestor for nodes which are lists of
153
157
  ||| #things separated by some op
154
- ||+SequenceNode #a sequence of statements
158
+ ||+-SequenceNode #a sequence of statements
155
159
  ||| (Array[Expr*])
156
- ||+ConstantNode #a constant expression of the form A::B::C or the like
160
+ ||+-ConstantNode #a constant expression of the form A::B::C or the like
157
161
  || #first expression can be anything
158
162
  || (Array[String|Expr|nil,String+])
159
- |+RawOpNode #ancestor of all operators (but not . :: ; , ?..:)
163
+ |+-RawOpNode #ancestor of all binary operators (except . :: ; , ?..:)
160
164
  ||| (left: Expr, op: String, right: Expr)
161
- ||+OpNode #ancestor of some operators
162
- |||+RangeNode #a range literal node
163
- |||+KeywordOpNode #abstract, ancestor of keyword operators
164
- ||||+LogicalNode #and or && || expressions
165
- ||||+WhileOpNode #while as an operator
166
- ||||+UntilOpNode #until as an operator
167
- ||||+IfOpNode #if as an operator
168
- ||||+UnlessOpNode #unless as an operator
169
- ||||+RescueOpNode #rescue as an operator
170
- |||| (body: Expr, rescues: Array[RescueNode*])
171
- |||+NotEqualNode #!= expressions
172
- |||+MatchNode #=~ expressions
173
- |||+NotMatchNode #!~ expressions
174
- |+LiteralNode #literal symbols, integers
165
+ ||+-RangeNode #a range literal node
166
+ ||+-KeywordOpNode #abstract, ancestor of keyword operators
167
+ |||+-LogicalNode #and or && || expressions
168
+ |||+-WhileOpNode #while as an operator
169
+ |||+-UntilOpNode #until as an operator
170
+ |||+-IfOpNode #if as an operator
171
+ |||+-UnlessOpNode #unless as an operator
172
+ |||+-RescueOpNode #rescue as an operator
173
+ ||| (body: Expr, rescues: Array[RescueNode*])
174
+ ||+-OpNode #ancestor of some binary operators (those with methods hidden in them)
175
+ |||+-NotEqualNode #!= expressions
176
+ |||+-MatchNode #=~ expressions
177
+ |||+-NotMatchNode #!~ expressions
178
+ |+-LiteralNode #literal symbols, integers
175
179
  || (val: Numeric|Symbol|StringNode)
176
- |+StringNode #literal strings
180
+ |+-StringNode #literal strings
177
181
  ||| (Array[(String|Expr)+])
178
- ||+HereDocNode #here documents
179
- |+StringCatNode #adjacent strings are catenated ("foo" "bar" == "foobar")
182
+ ||+-HereDocNode #here documents
183
+ |+-StringCatNode #adjacent strings are catenated ("foo" "bar" == "foobar")
180
184
  || (Array[StringNode+])
181
- |+NopNode #an expression with no tokens at all in it
185
+ |+-NopNode #an expression with no tokens at all in it
182
186
  || (no attributes)
183
- |+VarLikeNode #nil,false,true,__FILE__,__LINE__,self
187
+ |+-VarLikeNode #nil,false,true,__FILE__,__LINE__,self
184
188
  || (name: String)
185
- |+UnOpNode #unary operators
189
+ |+-UnOpNode #unary operators
186
190
  || (op: String, val: Expr)
187
- ||+UnaryStarNode #unary star (splat)
188
- |||+DanglingStarNode #unary star with no argument
189
- ||||| (no attributes)
190
- ||||+DanglingCommaNode #comma with no rhs
191
- || (no attributes)
192
- |+BeginNode #begin..end block
191
+ ||+-UnaryStarNode #unary star (splat)
192
+ |||+-DanglingStarNode #unary star with no argument
193
+ ||||| (no attributes)
194
+ ||||+-DanglingCommaNode #comma with no rhs
195
+ || (no attributes)
196
+ |+-BeginNode #begin..end block
193
197
  || (body: Expr|nil, rescues: Array[RescueNode*],
194
198
  || else: Expr|nil, ensure: Expr|nil)
195
- |+ParenedNode #parenthesized expressions
199
+ |+-ParenedNode #parenthesized expressions
196
200
  || (body: Expr)
197
- |+AssignNode #assignment (including eg +=)
201
+ |+-AssignNode #assignment (including eg +=)
198
202
  || (left:AssigneeList|LValue, op:String ,right:Array[Expr*]|Expr)
199
- |+AssigneeList #abstract, comma-delimited list of assignables
203
+ |+-AssigneeList #abstract, comma-delimited list of assignables
200
204
  ||| (Array[LValue*])
201
- ||+NestedAssign #nested lhs, in parentheses
202
- ||+MultiAssign #regular top-level lhs
203
- ||+BlockParams #block formal parameter list
204
- |+CallSiteNode #abstract, method calls
205
+ ||+-NestedAssign #nested lhs, in parentheses
206
+ ||+-MultiAssign #regular top-level lhs
207
+ ||+-BlockParams #block formal parameter list
208
+ |+-CallSiteNode #abstract, method calls
205
209
  ||| (receiver: Expr|nil, name: String, params: nil|Array[Expr+,UnaryStarNode?,UnAmpNode?],
206
210
  ||| blockparams: BlockParams|nil, block: Expr|nil)
207
- ||+CallNode #normal method calls
208
- ||+KWCallNode #keywords that look (more or less) like methods (BEGIN END yield return break continue next)
209
- |+ArrayLiteralNode #[..]
210
- || (Array[Expr*])
211
- |+IfNode #if..end and unless..end
211
+ ||+-CallNode #normal method calls
212
+ ||+-KWCallNode #keywords that look (more or less) like methods (BEGIN END yield return break continue next)
213
+ |+-ArrayLiteralNode #[..]
214
+ || (Array[Expr*])
215
+ |+-IfNode #if..end and unless..end
212
216
  || (if: Expr, then: Expr|nil, elsifs: Array[ElsifNode+]|nil, else: Expr|nil)
213
- |+LoopNode #while..end and until..end
217
+ |+-LoopNode #while..end and until..end
214
218
  || (while: Expr, do: Expr:nil)
215
- |+CaseNode #case..end
219
+ |+-CaseNode #case..end
216
220
  || (case: Expr|nil, whens: Array[WhenNode*], else: Expr|nil)
217
- |+ForNode #for..end
221
+ |+-ForNode #for..end
218
222
  || (for: LValue, in: Expr, do: Expr|nil)
219
- |+HashLiteralNode #{..}
220
- || (Array[Expr*]) (size must be even)
221
- |+TernaryNode # ? .. :
223
+ |+-HashLiteralNode #{..}
224
+ || (Array[Expr*]) (size must be even)
225
+ |+-TernaryNode # ? .. :
222
226
  || (if: Expr, then: Expr, else: Expr)
223
- |+MethodNode #def..end
227
+ |+-MethodNode #def..end
224
228
  || (receiver:Expr|nil, name:String,
225
229
  || params:Array[VarNode*,AssignNode*,UnaryStarNode?,UnAmpNode?]|nil,
226
230
  || body: Expr|nil, rescues: Array[RescueNode+]|nil, else: Expr|nil, ensure: Expr|nil)
227
- |+AliasNode #alias foo bar
231
+ |+-AliasNode #alias foo bar
228
232
  || (to: String|VarNode|StringNode, from: String|VarNode|StringNode)
229
- |+UndefNode #undef foo
233
+ |+-UndefNode #undef foo
230
234
  || (Array[String|StringNode+])
231
- |+NamespaceNode #abstract
232
- ||+ModuleNode #module..end
235
+ |+-NamespaceNode #abstract
236
+ ||+-ModuleNode #module..end
233
237
  ||| (name: VarNode|ConstantNode, body: Expr|nil
234
238
  ||| rescues: Array[RescueNode+]|nil, else: Expr|nil, ensure: Expr|nil)
235
- ||+ClassNode #class..end
239
+ ||+-ClassNode #class..end
236
240
  ||| (name: VarNode|ConstantNode, parent: Expr|nil, body: Expr|nil,
237
241
  ||| rescues: Array[RescueNode+]|nil, else: Expr|nil, ensure: Expr|nil)
238
- ||+MetaClassNode #class<<x..end
242
+ ||+-MetaClassNode #class<<x..end
239
243
  || (val: Expr, body: Expr|nil,
240
244
  || rescues: Array[RescueNode+]|nil, else: Expr|nil, ensure: Expr|nil)
241
- |+BracketsGetNode #a[b]
245
+ |+-BracketsGetNode #a[b]
242
246
  | (receiver: Expr, params: Array[Expr+,UnaryStarNode?]|nil)
243
247
  |
244
248
  ErrorNode #mixed in to nodes with a syntax error
245
- +MisparsedNode #mismatched braces or begin..end or the like
246
-
247
-
248
-
249
- == Known failing expressions
250
- * The following expressions are known to parse incorrectly currently:
251
- * def foo(a = 1) end; def foo(a=b=c={}) end; def bar(a=b=c=1,d=2) end
252
- * <<-EOS<<__LINE__
253
- EOS
254
- * z = valueo_s rescue "?"
255
- * self.<=>:p8
256
- * return (@images = @old_imgs)
257
- * p ?e.<<?y
258
- * doc_status, err_args = Documeh_status{fcgi_state = 3; docespond do doc_response =fcgi_state = 1; end }
259
- * class A;def b;class <<self;@@p = false end;end;end
260
- * return @senders[1] =
261
- 2
262
-
263
- == Not exactly right, but semantically equivalent
264
- * These don't return exactly the same s-exp as MRI/ParseTree, but close enough:
265
- * for i in (begin
266
- [44,55,66,77,88] end) do p i**Math.sqrt(i) end
267
- * %W"is #{"Slim #{2?"W":"S"}"}#{xx}."
268
- * def d; return (block_given? ? begin; yield f; ensure; f.close; end : f); end
269
- * "#{publi}#{}>"
270
- * /__A#{__FILE__}tcase/n =~ i
249
+ +-MisparsedNode #mismatched braces or begin..end or the like
250
+
251
+ == Known problems with the parser:
252
+ * Encoding of the input is not stored anywhere in resulting parse tree.
253
+ * Ascii, binary, utf-8, and euc encodings are supported, but sjis is not.
254
+
255
+ == Known problems with the unparser:
256
+ * On unparse, here documents are converted into regular strings. For the most
257
+ part, these are exactly equivalent to the original. However, whatever tokens
258
+ appeared between the here document header and body will now show up on a
259
+ different line. If one of those tokens was __LINE__, it will have a
260
+ different value in the unparsed code than it had originally.
261
+ * some floating-point literals don't survive parse/unparse roundtrip intact,
262
+ due to bugs in MRI 1.8's Float#to_s/String#to_f.
263
+ * unparsing of trees whose input was in a character set other than ascii may
264
+ not work.
265
+
266
+ == Known problems with ParseTree compatibility
267
+ * Major:
268
+ * converting non-ascii encoded parsetrees to ParseTree format doesn't work
269
+ * Minor:
270
+ * :begin is not always emitted in the same places as ParseTree does:
271
+ * return begin; f; end
272
+ * string nodes don't always come out the same way as in ParseTree...
273
+ but what I emit is equivalent.
274
+ * %W"is #{"Slim #{2?"W":"S"}"}#{xx}."
275
+ * silly empty case nodes aren't always optimized to nop like in ParseTree.
271
276
 
272
277
  == Bugs in ruby
273
278
  * These expressions don't parse the same as in MRI because of bug(s) in MRI:
274
279
  * p = p m %(1)
275
280
  * p=556;p (e) /a
276
- * c do p (110).m end
281
+ * c do p (110).m end #buggy in 1.8 only, fixed in 1.9
282
+ * module Array ([Array]).first::E; end #buggy in 1.8 only, fixed in 1.9
277
283
 
278
284
  == Bugs in ParseTree
279
285
  * Unit tests see failures in these cases, but due to bugs in ParseTree:
286
+ * doc_status, err_args = Documeh_status{fcgi_state = 3; docespond do doc_response =fcgi_state = 1; end }
280
287
  * case F;when G; else;case; when j; end;end
281
288
  * def foo(a=b=c={}) end
282
289
  * $11111111111111111111111111111111111111111111111111111111111111111111
283
290
  * proc{|&b| }
284
291
  * def sum(options = {:weights => weights = Hash.new(1)}); opt; end
285
-
286
- ==Known failing files
287
- * And here's a list of files which are known to parse incorrectly:
288
-
289
-
290
- activerdf-1.6.10/lib/active_rdf/queryengine/query2jars2.rb
291
- aquarium-0.4.2/spec/aquarium/aspects/aspect_spec.rb
292
- aspectr-0-3-5/lib/aspectr.rb
293
- authorails-1.0.0/lib/initializer.rb
294
- bibliomori-0.2.3/src/filter.rb
295
- cursor-0.9/cursor/circular.rb
296
- cursor-0.9/duck.rb
297
- data_objects-0.9.2/lib/data_objects/transaction.rb
298
- docdiff-0.3.2/docdiff/charstring.rb
299
- extract_curves-0.0.1/ruby_libs/pav/string/observable.rb
300
- extract-curves-0.1.1/ruby_libs/pav/string/observable.rb
301
- gecoder-with-gecode-0.8.2/lib/gecoder/interface/constraints/set/connection.rb
302
- gettext-1.91.0/test/test_gettext.rb
303
- lazytools-0.1.0/lib/dirstructure.rb
304
- lockfile-1.4.3/lib/lockfile-1.4.3.rb
305
- lockfile-1.4.3/lib/lockfile.rb
306
- logging-0.8.0/test/test_logger.rb
307
- logmerge-1.0.0/lib/logmerge/resolv.rb
308
- main-2.8.0/lib/main/base.rb
309
- muding-0.2.0/lib/initializer.rb
310
- net-mdns-0.4/lib/net/dns/resolv.rb
311
- not_naughty-0.5.1/spec/not_naughty_spec.rb
312
- radiant-0.6.7/vendor/rails/railties/lib/initializer.rb
313
- redparse/test/data/def_spec.rb
314
- reg/regcompiler.rb
315
- rgen-0.4.2/redist/xmlscan/tests/deftestcase.rb
316
- rq-3.4.0/lib/rq/lockfile.rb
317
- ruby-ajp-0.2.1/lib/net/ajp13.rb
318
- ruby-contract-0.1.1/lib/contract/overrides.rb
319
- ruby-debug-0.10.0/cli/ruby-debug/processor.rb
320
- rubygame-2.3.0/lib/rubygame/rect.rb
321
- rubygems-update-1.2.0/lib/rubygems/test_utilities.rb
322
- rubylexer/test/data/heremonsters_dos.rb
323
- ruby-nuggets-0.2.1.246/lib/nuggets/array/to_hash.rb
324
- sequel_core-2.2.0/lib/sequel_core/core_sql.rb
325
- skktools/filters/skkdictools.rb
326
- stick-1.3.3/lib/stick/matrix.rb
327
- stomp-1.0.5/lib/stomp.rb
328
- syntax-1.0.0/lib/syntax/lang/ruby.rb
329
- tournament-1.1.0/lib/tournament/bracket.rb
330
- typo-5.0.3.98.1/config/environment.rb
331
- typo-5.0.3.98.1/vendor/syntax/lib/syntax/lang/ruby.rb
332
- /usr/lib/ruby/1.8/docdiff/charstring.rb
333
- /usr/lib/ruby/1.8/puppet/provider/nameservice.rb
334
- /usr/lib/ruby/1.8/qwik/util-css.rb
335
- /usr/lib/ruby/1.8/resolv.rb
336
- /usr/lib/ruby/1.8/rexml/doctype.rb
337
- /usr/lib/ruby/1.8/tkextlib/bwidget/buttonbox.rb
338
- /usr/lib/ruby/1.9.0/resolv.rb
339
- /usr/lib/ruby/1.9.0/rexml/doctype.rb
340
- /usr/share/doc/libtcltk-ruby1.8/examples/tkextlib/tkHTML/ss.rb
341
- /usr/share/doc/libtcltk-ruby1.9/examples/tkextlib/tkHTML/ss.rb
342
- /usr/share/doc/libxml-ruby/tests/tc_xml_parser8.rb
343
- /usr/share/glark/options.rb
344
- /usr/share/hiki/hiki/docdiff/charstring.rb
345
- /usr/share/nadoka/rice/irc.rb
346
- /usr/share/rails/actionpack/test/controller/caching_test.rb
347
- /usr/share/rails/actionpack/test/controller/fragment_store_setting_test.rb
348
- /usr/share/rails/activesupport/lib/active_support/multibyte/handlers/utf8_handler.rb
349
- /usr/share/rails/railties/builtin/rails_info/rails/info.rb
350
- /usr/share/rails/railties/lib/initializer.rb
351
- /usr/share/skktools/filters/skkdictools.rb
352
- /usr/share/tdiary/TC_tdiary-setup.rb
353
- wwwsrv-0.15.3/wwwsrv/fastcgi.rb
354
- xmlscan-0.2.3/tests/deftestcase.rb
355
- ya2yaml-0.26/lib/ya2yaml.rb
356
- ActiveRecord-JDBC-0.5/lib/jdbc_adapter/jdbc_hsqldb.rb
357
- ruby-web-1.1.1/lib/webunit/parser.rb
358
- filemanager-0.2.0/filemanager/app/controllers/fm/filemanager_controller.rb
292
+ * def foo(a = 1) end; def foo(a=b=c={}) end; def bar(a=b=c=1,d=2) end
293
+ * yield [a_i, *p]