From 0f519375ab0fe774ccbca66104fe6234709cd466 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 31 Oct 2006 08:08:46 +0000 Subject: [PATCH] * time.c (time_dup): duplicate the class of original time. [ruby-core:09357] * lib/time.rb (Time::make_time, Time::rfc2822, Time::httpdate): should respect subclasses. [ruby-core:09357] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ lib/time.rb | 10 +++++----- time.c | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 12c2a44356..10b0e3cfeb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Tue Oct 31 17:03:21 2006 Yukihiro Matsumoto + + * time.c (time_dup): duplicate the class of original time. + [ruby-core:09357] + + * lib/time.rb (Time::make_time, Time::rfc2822, Time::httpdate): + should respect subclasses. [ruby-core:09357] + Tue Oct 31 16:25:22 2006 Yukihiro Matsumoto * array.c (ary_shared_first): should address offset after diff --git a/lib/time.rb b/lib/time.rb index b96c6e73d0..f7a08e947c 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -181,7 +181,7 @@ class Time t.localtime if !zone_utc?(zone) t else - Time.local(year, mon, day, hour, min, sec, usec) + self.local(year, mon, day, hour, min, sec, usec) end end private :make_time @@ -304,7 +304,7 @@ class Time year, mon, day, hour, min, sec = apply_offset(year, mon, day, hour, min, sec, zone_offset(zone)) - t = Time.utc(year, mon, day, hour, min, sec) + t = self.utc(year, mon, day, hour, min, sec) t.localtime if !zone_utc?(zone) t else @@ -331,14 +331,14 @@ class Time (\d{2}):(\d{2}):(\d{2})\x20 GMT \s*\z/ix =~ date - Time.rfc2822(date) + self.rfc2822(date) elsif /\A\s* (?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday),\x20 (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d)\x20 (\d\d):(\d\d):(\d\d)\x20 GMT \s*\z/ix =~ date - Time.parse(date) + self.parse(date) elsif /\A\s* (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)\x20 (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\x20 @@ -346,7 +346,7 @@ class Time (\d\d):(\d\d):(\d\d)\x20 (\d{4}) \s*\z/ix =~ date - Time.utc($6.to_i, MonthValue[$1.upcase], $2.to_i, + self.utc($6.to_i, MonthValue[$1.upcase], $2.to_i, $3.to_i, $4.to_i, $5.to_i) else raise ArgumentError.new("not RFC 2616 compliant date: #{date.inspect}") diff --git a/time.c b/time.c index c9be587c47..68ed3844ac 100644 --- a/time.c +++ b/time.c @@ -1019,7 +1019,7 @@ time_init_copy(VALUE copy, VALUE time) static VALUE time_dup(VALUE time) { - VALUE dup = time_s_alloc(rb_cTime); + VALUE dup = time_s_alloc(CLASS_OF(time)); time_init_copy(dup, time); return dup; }