if false return {}.size 1.return {}.size break {}.size 1.break {}.size next {}.size 1.next {}.size raise {}.to_s+"****" 1.raise {}.to_s+"****" throw {}.to_s+"****" 1.throw {}.to_s+"****" end module SR def SelfReferencing #old name alias end def SelfReferencing #old name alias end def SelfReferencing#old name alias end def SelfReferencing;end#old name alias end P ::Class p <99}) p %{{{{#{"}}}"}}}}} case 1 when *[2]: p 1 else p 2 end p :"jim"; p :'jim'; p %s/jim/; p %s"jim"; p %s'jim'; p %s`jim`; p %s[jim]; p %s{jim}; p %s(jim); p %s; p %s jim ; for bob in [100] do p(bob %(22)) end proc{ foo bar=>baz bar %(1) } module Y2534534 def foo1 p (1..10).method(:each) #implicit parens around the whole thing end def foo2() p((1..10).method(:each)) #explicitly parenthesized... no implicit parens needed end def foo3() p (1..10).method(:each) #implicit parens around the whole thing #matz ruby parses this differently than identical line in foo1!? end end module Y668 p [1,2,3,] #p {1=>2,3=>4,} #syntax error #p aaa,bbb,ccc,=1,2,3 #syntax error p aaa p bbb p ccc proc{|a,b,c,| p a,b,c }.call(1,2,3) p proc{| a,b,(c,d,),e| p a %(1) p b %(2) p c %(3) p d %(4) p e %(5) [ a,b,c,d,e]}.call(1,2,[3,4],5) p (Module.instance_methods - Object.instance_methods).sort # an outer set of implicit parens is needed p(Module.instance_methods - Object.instance_methods).sort #no outer implicit parens "foo".slice (1-2).nil? #no outer implicit parens p (1-2).nil? #outer implicit parens needed p(1-2).nil? #no outer implicit parens needed def self.z(*); end def self.zz(*,&x); end def self.zzz(&x); end z z z z z z {} z z z z z z do end (/ 1/) p(/ 1/) # (p / 1/) #ruby no like def ggg(x=nil) p x;9 end (ggg / 1) false and( true ? f : g ) false and( f .. g ) false and( f ... g ) p 1&2 #should be OperatorToken, not KeywordToken p 1|2 #ditto p 1**2 p 1*2 p 1%(2) p 1^2 p 1+2 p 1-2 p 1/2 p 1?2:3 #keyword p 1 ?2:3 #keyword p 1? 2:3 #keyword p 1?2 :3 #keyword p 1?2: 3 #keyword p 1 ? 2:3 #keyword p 1 ?2 :3 #keyword p 1 ?2: 3 #keyword p 1? 2 :3 #keyword p 1? 2: 3 #keyword p 1?2 : 3 #keyword p 1 ? 2 : 3 #keyword p 1==2 p 1===2 p 1[2] #keyword p 1;2 #keyword p 1,2 #keyword p 1.2 p 1.class #keyword p 1..2 #keyword p 1...2 #keyword p 1<2 p 1>2 p 1<=2 p 1>=2 p 1<<2 p 1>>2 p 1!=2 #this is keyword p 1=~2 p 1!~2 #this is keyword p 1&&2 #... p 1||2 #... p 1<=>2 define_method(:foo, &proc{:bar}) define_method :foo, &proc{:bar} define_method(:foo) &proc{:bar} define_method :foo &proc{:bar} p :k, *nil p :k, *nil, &nil p *nil p *nil, &nil end module Y19 #limit lvar scope a,b,c,(d,e)=1,2,3,[4,5] p a %(4) p c %(4) p d %(4) p e %(4) a=[1,2,3,4,5] def self.g(x=nil); 3 end def a.g=(x) p x end g = 5 self.g = 55 class<"PMK:njs;d| foobar0 p 0.9 p 1.45000000000000000000000000000000000000001 p 9.999999999999999999999999999999999999999999 p 9.999999999999999999999999999999999999999999e999999999999999999999999999 p 0b0100011001 p 0o123456701 p 0123456701 p 0x123456789abcdefABCDEF01 p % foo p % foo p % foo p eval "%\sfoo\s" p eval "%\tfoo\t" p :p p :p p eval "%\vfoo\v" p eval "%\rfoo\r" p :p p :p p eval "%\nfoo\n" p eval "%\0foo\0" p eval "%\r\nfoo\r\n" #given that \n\r is not considered a valid eol #sequence in ruby (unlike \r\n), the next 2 are ok p eval "%\n\rfoo\n\r" #ruby get this wrong p eval "%\n\rfoo\n" #this shouldn't work but does #seems like just \r isn't valid newline either, which is #puzzling but the following are are correct. #does ruby do these all correctly? seems kinda inconsistant #either both of these should fail, or both should succeed p eval "%\r\nfoo\r" #this does not work, p eval "%\r\nfoo\n" #this shouldn't work but does p eval "%\rfoo\r" #this works p eval "%\rfoo\n" #this does not work, p eval "%\rfoo\r\n" #this does not work, p eval "%\nfoo\r" #this does not work p eval "%\nfoo\n" #this works p eval "%\nfoo\r\n" #this works, p "Hi, my name is #{"Slim #{(4)>2?"Whitman":"Shady"} "}." p "Hi, my name is #{"Slim #{(4)<2?"Whitman":"Shady"} "}." p(String *Class) class String class Class end end #def String(x) x.to_s end #it's already built-in. duh! def String.*(right) [self,right] end def String.<<(right) [self,:<<,right] end def String./(right) [self,:/,right] end def String.[](right) [self,:[],right] end def Class.-@; [:-@, self] end p(String::Class) p(String:: Class) p(String ::Class) p(String :: Class) p(String< p end q=9 Q=99 p:p8 false ? p: p8 p :p8 false ? p : p8 false ? q:p8 false ? q: p8 false ? q :p8 false ? q : p8 #false ? Q:p8 #gives ruby indigestion false ? Q: p8 #false ? Q :p8 #gives ruby indigestion false ? Q : p8 p?:p8 false ? p?: p8 p? :p8 false ? p? : p8 p??1 p? ?1 p(p?? 1 : 2) p(p? ? 1 : 2) P?:p8 false ? P?: p8 P? :p8 false ? P? : p8 P??1 P? ?1 p(P?? 1 : 2) p(P? ? 1 : 2) self.[]:p8 false ? self.[]: p8 self.[] :p8 false ? self.[] : p8 self.<=>:p8 false ? self.<=>: p8 self.<=> :p8 false ? self.<=> : p8 self <=>:p8 #false ? self <=>: p8 #gives ruby indigestion self <=> :p8 #false ? self <=> : p8 #gives ruby indigestion end p <2) p(p >2) p(p> 2) p(p > 2) end module M34 p(p~6) p(p ~6) p(p~ 6) p(p ~ 6) p(p*[1]) p(p *[1]) p(p* [1]) p(p * [1]) p(p&proc{}) p(p &proc{}) p(p& proc{}) p(p & proc{}) p(p !1) p(p ?1) p(p ! 1) p(p ? 1 : 6) p(p@a) p(p @a) # p(p@ a) #wont # p(p @ a) #work p(p#a ) p(p #a ) p(p# a ) p(p # a ) p(p$a) p(p $a) # p(p$ a) #wont # p(p $ a) #work p(p%Q{:foo}) p(p %Q{:foo}) p(p% Q{:foo}) p(p % Q{:foo}) p(p^6) p(p ^6) p(p^ 6) p(p ^ 6) p(p&7) p(p &proc{7}) p(p& 7) p(p & 7) p(p(2)) p(p (2)) p(p( 2)) p(p ( 2)) p(p(p)) p(p()) p(p (p)) p(p ()) p(p ( p)) p(p ( )) p(p( p)) p(p( )) p(p) p((p)) p(p ) p((p )) p((p p)) p((p p,p)) p((p p)) p((p p,p)) p(p-0) p(p -1) p(p- 0) p(p - 0) p(p+9) p(p +9) p(p+ 9) p(p + 9) p(p[1]) p(p [1]) p(p[ 1]) p(p [ 1]) p(p{1}) p(p {1}) p(p{ 1}) p(p { 1}) p(p/1) p(p /22/) p(p/ 1) p(p / 22) p(p._) p(p ._) p(p. _) p(p . _) p(p:f) p(p :f) p(false ? p: f) p(false ? p : f) p((p;1)) p((p ;1)) p((p; 1)) p((p ; 1)) p(p<1) p(p <1) p(p< 1) p(p < 1) p(p<<1) p(p <<1) foobar 1 p(p<< 1) p(p << 1) p(p'j') p(p 'j') p(p' j') p(p ' j') p(p"k") p(p "k") p(p" k") p(p " k") p(p|4) p(p |4) p(p| 4) p(p | 4) p(p>2) p(p >2) p(p> 2) p(p > 2) end def bob(x) x end def bill(x) x end p(bob %(22)) for bob in [100] do p(bob %(22)) end p(bob %(22)) def %(n) to_s+"%#{n}" end p(bill %(22)) begin sdjkfsjkdfsd; rescue Object => bill; p(bill %(22)) end p(bill %(22)) undef % class Object public :` def `(s) print "bq: #{s}\n" end end 69.`('what a world') 79::`('what a word') p :` p{} p {} module Y7284 a=5 p p +5 p a +5 end def nil.+(x) ~x end def nil.[](*x) [x] end p( p + 5 ) p( p +5 ) p( p+5 ) p( p[] ) p( p [] ) p( p [ ] ) class NilClass; undef +,[] end class Foou public def [] x=-100,&y; p x; 100 end end module Y345636 a0=8 p Foou.new.[]!false #value p Foou.new.[] !false #value p Foou.new.[]~9 #value p Foou.new.[] ~9 #value p Foou.new.[]-9 #op p Foou.new.[]+9 #op p Foou.new.[] -9 #value p Foou.new.[] +9 #value p Foou.new.[]<<9 #op p Foou.new.[] <<9 #value foobar 9 p Foou.new.[]%9 #op p Foou.new.[]/9 #op p Foou.new.[] %(9) #value p Foou.new.[] /9/ #value p Foou.new.[]$9 #value p Foou.new.[]a0 #value p Foou.new.[] $9 #value p Foou.new.[] a0 #value p Foou.new.[]{9} #lambda (op) p Foou.new.[] {9} #lambda (op) if p then p end p({:foo=>:bar}) #why does this work? i'd think that ':foo=' would be 1 token p EMPTY = 0 p BLACK = 1 p WHITE = - BLACK end module Y8576456 a=b=c=0 a ? b:c a ?b:c p(a ? b:c) p(a ?b:c) p~4 p:f p(~4){} p(:f){} h={} h.default=:foo p def (h="foobar").default= v; p @v=v;v end p h p h.default=:b end module Y6543423 x, (*y) = [:x, :y, :z] p x p y x, *y = [:x, :y, :z] p x p y x, * = [:x, :y, :z] p x end p Array("foo\nbar") p +(4) p -(4) p :'\\' class Foop def Foop.bar a,b p a,b end end Foop.bar 1,2 Foop::bar 3,4 class Foop def Foop::baz a,b p :baz,a,b end end Foop.baz 5,6 Foop::baz 7,8 without_creating=widgetname=nil if without_creating && !widgetname #foo fail ArgumentError, "if set 'without_creating' to true, need to define 'widgetname'" end #class, module, and def should temporarily hide local variables def mopsdfjskdf arg; arg*2 end mopsdfjskdf=5 class C p mopsdfjskdf %(3) #calls method end module M p mopsdfjskdf %(4) #calls method end def d p mopsdfjskdf %(5) #calls method end p d p mopsdfjskdf %(6) #reads variable p proc{mopsdfjskdf %(7)}[] #reads variable #fancy symbols p %s{symbol} #multiple assignment test proc { a,b,c,d,e,f,g,h,i,j,k=1,2,3,4,5,6,7,8,9,10,11 p(b %(c)) p(a %(c)) p(k %(c)) p(p %(c)) }.call =begin disable for now p "#{< 1} 1+[1,2,3][1..-1].index 3 _=@cu.fixup_match_result 'md' #works _=md=@cu.fixup_match_result 'md' #don't work 3+"".slice 1 ""+p "" #given: def foo; end foo.===/#/ #syntax error foo.=== /#/ #no error foo===/#/ #no error #these work: (not true) p(!true) #etc (true if false) #etc (true and false) #etc (undef foo) (alias bar foo) (BEGIN{p :yyy}) #these don't: p(not true) p(true if false) #etc p(true and false) #etc p(undef foo) p(alias bar foo) p(BEGIN{p :yyy}) p 1{2} p 1 {2} p(false ? Q :p8 ) p(false ? Q:p8 ) end if false equal?(p) or Position===p && equal? p.data #syntax error unless add parens, but why? end raise LexerError, "expected >=#{tok.offset}, got #{endpos}, "\ "token #{tok}:#{tok.class}" #there's a space after the backslash =end disable for now proc { } p "#{<~m) proc { h={:a=>(foo=100)} p( foo %(5)) }.call def foo(a=<>|\|\||\&\&)=|\&\&|\|\|)/) p(:%) module Y45234234234223567675 p( { :class => class_=0}) end p cls_name = {}[:class] p foo p "#{$!.class}" p :p p(:p) p(:"[]") p :"[]" p("\\") p(/\\/) p(/[\\]/) p 0x80 p ?p p 0.1 p 0.8 p 0.9 p(-1) p %/p/ p %Q[
  • ] i=99 p %Q[
  • #{i[0]+i[1]+(i[2])}\n] p(:side=>:top) p %w[a b c d e f] p %w[a b c\n d e f] p %w[\\] p %w[\]] p :+ p 99 / 3 module Y66 a=99;b=3 p 1+(a / b) end p %Q[\"] p %Q[ some [nested] text] if false formatter.format_element(element) do amrita_expand_and_format1(element, context, formatter) end end if false ret = <<-END @@parts_template = #{template.to_ruby} def parts_template @@parts_template end #{c.const_def_src.join("\n")} def amrita_expand_and_format(element, context, formatter) if element.tagname_symbol == :span and element.attrs.size == 0 amrita_expand_and_format1(element, context, formatter) else formatter.format_element(element) do amrita_expand_and_format1(element, context, formatter) end end end def amrita_expand_and_format1(element, context, formatter) #{method_src} end END j=55 end p ' ' p '\n' p " " p "\n" p %w/ / p %w/\n/ p %W/ / p %W/\n/ p(/ /) p(/\n/) p proc { p ` ` p `\n` } p(%r[foo]i) p <