I have a good fix for RubyTime dup. I will fix later today. I am adding a bunch of unit tests.
-Tom On Sat, 25 Mar 2006, Ola Bini defenestrated me: > Hi. > > The initialize_copy-error comes from Time#dup not working correctly. My > quickie-fix solves that. (add a dup-method with more or less the same > contents as RubyString)... as Thomas pointed out, this is not really so > great, since there are stuff that solution disregards, but it works for now. > > /O > > ----- Original Message ----- > From: Charles O Nutter <[EMAIL PROTECTED]> > Date: Saturday, March 25, 2006 7:34 am > Subject: Re: [Jruby-devel] Bug 1121928 Patch > To: [email protected] > > > FIXED! RubyGlobals was passing null in to newHash for > > defaultValue...whichis bad! I fixed that instance and added an > > assertion in newHash to prevent > > it in the future. > > > > I can now run RubyGems up to the same initialize_copy error, which > > I'll dig > > into next...I suspect it's not going to be terribly pretty, since > > nothing'sbeen using initialize_copy heavily in the past and I don't > > think our > > semantics are right. > > > > Committed on both HEAD and cnutter_work1. > > > > On 3/24/06, Charles O Nutter <[EMAIL PROTECTED]> wrote: > > > > > > The new Hash#default patch appears to be broken: > > > > > > puts ENV('BOGUS') > > > > > > .. blows up with an NPE. I think it has to do with calling > > default via > > > RubyObject.callMethod...there's a null coming back from there, > > methinks.> I'll see what I can find. > > > > > > > > > On 3/24/06, Thomas E Enebo <[EMAIL PROTECTED]> wrote: > > > > > > > > I sooo bungled the explanation in that bug that I must > > apologize in > > > > the first sentence. :) > > > > > > > > Your patch fixed some problems, but not the one represented > > by my > > > > ether- > > > > sniffing-induced code sample in the bug report. What I meant > > to put > > > > in that bug was something along the lines of: > > > > > > > > h = Hash.new > > > > > > > > class << h > > > > def default(k); 2; end > > > > end > > > > > > > > p h[12] => 2 > > > > > > > > I committed a different patch which I thinks solves > > everything. I > > > > also added a few extra tests too. Give a gander. > > > > > > > > I promise to make better bug reports in the future and I at > > least hope > > > > the making of your patch helped to learn a little more about inner > > > > workings of JRuby's implementation. > > > > > > > > -Tom > > > > > > > > PS- All explicit method calls (callMethod("foo", args)) to a > > ruby method > > > > should pass IRubyObject.NULL_ARRAY as an argument. We want to > > eliminate> > the > > > > need to null check the args list by always passing in am empty > > array.> > I thought we would assert when this happens, but I guess > > not.> > > > > > On Thu, 23 Mar 2006, Marc Hadley defenestrated me: > > > > > > > > > Here's a patch to solve bug 1121928. With this patch > > Hash#default now > > > > > respects any block you set for the default and supports code > > like:> > > > > > > > h = Hash.new {|h,k| h[k] = k.to_i*10} > > > > > puts h[2] # => 20 > > > > > puts h.default # => 0 > > > > > puts h.default(2) # => 20 > > > > > > > > > > Note that I also had to modify HashMetaClass so Hash#default can > > > > > accept an argument. I also added a couple of unit tests to test/ > > > > > testHash.rb and made sure there were no regressions. > > > > > > > > > > Marc. > > > > > > > > > > > > ===================================================================> > > > RCS file: /cvsroot/jruby/jruby/src/org/jruby/RubyHash.java,v > > > > > retrieving revision 1.30 > > > > > diff -r1.30 RubyHash.java > > > > > 89,90c89,100 > > > > > < public IRubyObject getDefaultValue() { > > > > > < return (defaultValue == null) ? > > getRuntime().getNil() : > > > > > defaultValue; > > > > > --- > > > > > > public IRubyObject getDefaultValue(IRubyObject[] args) { > > > > > > if (args!=null && args.length>1) > > > > > > throw getRuntime().newArgumentError( > > args.length, 1); > > > > > > > > > > > > IRubyObject key = (args==null || args.length==0) ? > > > > > getRuntime().getNil() : args[0]; > > > > > > > > > > > > if (!defaultProc.isNil()) { > > > > > > IRubyObject[] procargs = {this, key}; > > > > > > return ((RubyProc) defaultProc).call(procargs, > > this);> > > > } > > > > > > else > > > > > > return (defaultValue == null) ? > > getRuntime().getNil> > > () : defaultValue; > > > > > 234c244 > > > > > < RubyHash result = newHash(getRuntime(), > > getValueMap> > > (), getDefaultValue()); > > > > > --- > > > > > > RubyHash result = newHash(getRuntime(), > > getValueMap> > > (), getDefaultValue(null)); > > > > > 276,281c286,287 > > > > > < if (!defaultProc.isNil()) { > > > > > < IRubyObject[] args = {this, key}; > > > > > < return ((RubyProc) defaultProc).call(args, > > this);> > > < } > > > > > < > > > > > < return getDefaultValue(); > > > > > --- > > > > > > IRubyObject[] args = {key}; > > > > > > return getDefaultValue(args); > > > > > 414c420,421 > > > > > < return getDefaultValue(); > > > > > --- > > > > > > IRubyObject[] args = {key}; > > > > > > return getDefaultValue(args); > > > > > > > > > > > > ===================================================================> > > > RCS file: /cvsroot/jruby/jruby/src/org/jruby/runtime/builtin/meta/ > > > > > HashMetaClass.java,v > > > > > retrieving revision 1.7 > > > > > diff -r1.7 HashMetaClass.java > > > > > 36c36 > > > > > < defineMethod("default", > > Arity.noArguments(),> > > "getDefaultValue"); > > > > > --- > > > > > > defineMethod("default", > > Arity.optional(),> > > "getDefaultValue"); > > > > > > > > > > > > ===================================================================> > > > RCS file: /cvsroot/jruby/jruby/test/testHash.rb,v > > > > > retrieving revision 1.8 > > > > > diff -r1.8 testHash.rb > > > > > 39c39 > > > > > < h = Hash.new {|h,k| h[k] = 10000 } > > > > > --- > > > > > > h = Hash.new {|h,k| h[k] = k.to_i*10 } > > > > > 41c41,43 > > > > > < test_equal(10000, h[10]) > > > > > --- > > > > > > test_equal(100, h[10]) > > > > > > test_equal(0, h.default) > > > > > > test_equal(20, h.default(2)) > > > > > 44d45 > > > > > < > > > > > > > > > > > > > > > --- > > > > > Marc Hadley <marc.hadley at sun.com> > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > > > This SF.Net email is sponsored by xPML, a groundbreaking > > scripting> > language > > > > > that extends applications into web and mobile media. Attend > > the live > > > > webcast > > > > > and join the prime developer group breaking into this new coding > > > > territory! > > > > > > > > > http://sel.as- > > us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642> > > > > _______________________________________________> > > Jruby-devel > > mailing list > > > > > [email protected] > > > > > https://lists.sourceforge.net/lists/listinfo/jruby-devel > > > > > > > > -- > > > > + http://www.tc.umn.edu/~enebo <http://www.tc.umn.edu/%7Eenebo> > > +---- > > > > mailto:[EMAIL PROTECTED] ----+ > > > > | Thomas E Enebo, Protagonist | "Luck favors the prepared | > > > > | | mind." -Louis Pasteur | > > > > > > > > > > > > ------------------------------------------------------- > > > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > > > > language > > > > that extends applications into web and mobile media. Attend the > > live> > webcast > > > > and join the prime developer group breaking into this new coding > > > > territory! > > > > http://sel.as- > > us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642> > > > _______________________________________________> > Jruby-devel > > mailing list > > > > [email protected] > > > > https://lists.sourceforge.net/lists/listinfo/jruby-devel > > > > > > > > > > > > > > > > -- > > > Charles Oliver Nutter @ headius.blogspot.com > > > JRuby Developer @ jruby.sourceforge.net > > > Application Architect @ www.ventera.com > > > > > > > > > > > -- > > Charles Oliver Nutter @ headius.blogspot.com > > JRuby Developer @ jruby.sourceforge.net > > Application Architect @ www.ventera.com > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by xPML, a groundbreaking scripting language > that extends applications into web and mobile media. Attend the live webcast > and join the prime developer group breaking into this new coding territory! > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 > _______________________________________________ > Jruby-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/jruby-devel -- + http://www.tc.umn.edu/~enebo +---- mailto:[EMAIL PROTECTED] ----+ | Thomas E Enebo, Protagonist | "Luck favors the prepared | | | mind." -Louis Pasteur | ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ Jruby-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jruby-devel
