summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-09 08:38:24 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-09 08:38:24 +0000
commite8fea3f8dda47198a78d8957a07e8b304664e0a1 (patch)
tree4b6cad634b450bb58e95c21289c23882361d9bde
parent2b6ab941234426b8891f1bad036fd75611038312 (diff)
1.1b9_00 picachu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@111 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--MANIFEST1
-rw-r--r--class.c2
-rw-r--r--lib/date2.rb243
-rw-r--r--version.h4
5 files changed, 251 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 41c1078314..30c0d0b8e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,10 @@ Mon Mar 9 16:53:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
* sprintf.c (remove_sign_bits): failed to remove some bits.
+Sat Mar 7 21:51:46 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * class.c (ins_methods_i): body may be NULL for some case.
+
Sat Mar 7 00:43:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
* parse.y (logop): short cut syntax tree.
diff --git a/MANIFEST b/MANIFEST
index 19cd467a1b..5e8fc92df5 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -88,6 +88,7 @@ lib/base64.rb
lib/cgi-lib.rb
lib/complex.rb
lib/date.rb
+lib/date2.rb
lib/debug.rb
lib/delegate.rb
lib/e2mmap.rb
diff --git a/class.c b/class.c
index 87842c3d3b..5d4606d59b 100644
--- a/class.c
+++ b/class.c
@@ -298,7 +298,7 @@ ins_methods_i(key, body, ary)
ary_push(ary, name);
}
}
- else if (nd_type(body->nd_body) == NODE_ZSUPER) {
+ else if (body->nd_body && nd_type(body->nd_body) == NODE_ZSUPER) {
ary_push(ary, Qnil);
ary_push(ary, str_new2(rb_id2name(key)));
}
diff --git a/lib/date2.rb b/lib/date2.rb
new file mode 100644
index 0000000000..ffd74fac1b
--- /dev/null
+++ b/lib/date2.rb
@@ -0,0 +1,243 @@
+# date.rb: Written by Tadayoshi Funaba 1998
+# $Id: date.rb,v 1.3 1998/03/08 09:43:54 tadf Exp $
+
+class Date
+
+ include Comparable
+
+ MONTHNAMES = [ '', 'January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December' ]
+
+ DAYNAMES = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
+ 'Friday', 'Saturday' ]
+
+ GREGORY = 2299161 # Oct 15, 1582
+ ENGLAND = 2361222 # Sept 14, 1752
+
+ def Date.civil_to_jd(y, m, d, gs = true)
+ if m <= 2 then
+ y -= 1
+ m += 12
+ end
+ a = (y / 100).to_i
+ b = (a / 4).to_i
+ c = 2 - a + b
+ e = (365.25 * (y + 4716)).to_i
+ f = (30.6001 * (m + 1)).to_i
+ jd = c + d + e + f - 1524
+ unless
+ (if gs.kind_of? Numeric then jd >= gs else gs end) then
+ jd -= c
+ end
+ return jd
+ end
+
+ def Date.jd_to_civil(jd, gs = true)
+ unless
+ (if gs.kind_of? Numeric then jd >= gs else gs end) then
+ a = jd
+ else
+ w = ((jd - 1867216.25) / 36524.25).to_i
+ x = (w / 4).to_i
+ a = jd + 1 + w - x
+ end
+ b = a + 1524
+ c = ((b - 122.1) / 365.25).to_i
+ d = (365.25 * c).to_i
+ e = ((b - d) / 30.6001).to_i
+ f = (30.6001 * e).to_i
+ day = b - d - f
+ if e <= 13 then
+ m = e - 1
+ else
+ m = e - 13
+ end
+ if m <= 2 then
+ y = c - 4715
+ else
+ y = c - 4716
+ end
+ return y, m, day
+ end
+
+ def Date.mjd_to_jd(mjd)
+ mjd + 2400000.5
+ end
+
+ def Date.jd_to_mjd(jd)
+ jd - 2400000.5
+ end
+
+ def Date.tjd_to_jd(tjd)
+ tjd + 2440000.5
+ end
+
+ def Date.jd_to_tjd(jd)
+ jd - 2440000.5
+ end
+
+ def initialize(jd = 0, gs = GREGORY)
+ @jd = jd
+ @gs = gs
+ end
+
+ def Date.new3(y = -4712, m = 1, d = 1, gs = GREGORY)
+ jd = Date.civil_to_jd(y, m, d, gs)
+ y2, m2, d2 = Date.jd_to_civil(jd, gs)
+ unless y == y2 and m == m2 and d == d2 then
+ raise ArgumentError, 'invalid date'
+ end
+ Date.new(jd, gs)
+ end
+
+ def Date.today(gs = GREGORY)
+ Date.new3(*(Time.now.to_a[3..5].reverse << gs))
+ end
+
+ def jd
+ @jd
+ end
+
+ def mjd
+ Date.jd_to_mjd(@jd)
+ end
+
+ def tjd
+ Date.jd_to_tjd(@jd)
+ end
+
+ def year
+ Date.jd_to_civil(@jd, @gs)[0]
+ end
+
+ def yday
+ gs = if @gs.kind_of? Numeric then @jd >= @gs else @gs end
+ jd = Date.civil_to_jd(year - 1, 12, 31, gs)
+ @jd - jd
+ end
+
+ def mon
+ Date.jd_to_civil(@jd, @gs)[1]
+ end
+
+ def mday
+ Date.jd_to_civil(@jd, @gs)[2]
+ end
+
+ def wday
+ k = (@jd + 1) % 7
+ k += 7 if k < 0
+ k
+ end
+
+ def leap?
+ gs = if @gs.kind_of? Numeric then @jd >= @gs else @gs end
+ jd = Date.civil_to_jd(year, 2, 28, gs)
+ Date.jd_to_civil(jd + 1, gs)[1] == 2
+ end
+
+ def + (other)
+ if other.kind_of? Numeric then
+ return Date.new(@jd + other, @gs)
+ end
+ raise TypeError, 'expected numeric'
+ end
+
+ def - (other)
+ if other.kind_of? Numeric then
+ return Date.new(@jd - other, @gs)
+ elsif other.kind_of? Date then
+ return @jd - other.jd
+ end
+ raise TypeError, 'expected numeric or date'
+ end
+
+ def <=> (other)
+ if other.kind_of? Numeric then
+ return @jd <=> other
+ elsif other.kind_of? Date then
+ return @jd <=> other.jd
+ end
+ raise TypeError, 'expected numeric or date'
+ end
+
+ def downto(min)
+ @jd.downto(min.jd) do |jd|
+ yield Date.new(jd, @gs)
+ end
+ end
+
+ def upto(max)
+ @jd.upto(max.jd) do |jd|
+ yield Date.new(jd, @gs)
+ end
+ end
+
+ def step(max, step)
+ @jd.step(max.jd, step) do |jd|
+ yield Date.new(jd, @gs)
+ end
+ end
+
+ def eql? (other)
+ self == other
+ end
+
+ def hash
+ @jd
+ end
+
+ def to_s
+ format('%04d-%02d-%02d', *Date.jd_to_civil(@jd, @gs))
+ end
+
+end
+[3 goodfriday.rb <text/plain; us-ascii (7bit)>]
+#! /usr/local/bin/ruby
+
+# goodfriday.rb: Written by Tadayoshi Funaba 1998
+# $Id: goodfriday.rb,v 1.1 1998/03/08 09:44:44 tadf Exp $
+
+require 'date'
+
+def easter(y)
+ g = (y % 19) + 1
+ c = (y / 100) + 1
+ x = (3 * c / 4) - 12
+ z = ((8 * c + 5) / 25) - 5
+ d = (5 * y / 4) - x - 10
+ e = (11 * g + 20 + z - x) % 30
+ e += 1 if e == 25 and g > 11 or e == 24
+ n = 44 - e
+ n += 30 if n < 21
+ n = n + 7 - ((d + n) % 7)
+ if n <= 31 then [y, 3, n] else [y, 4, n - 31] end
+end
+
+es = Date.new3(*easter(Time.now.year))
+[[-9*7, 'Septuagesima Sunday'],
+ [-8*7, 'Sexagesima Sunday'],
+ [-7*7, 'Quinquagesima Sunday (Shrove Sunday)'],
+ [-48, 'Shrove Monday'],
+ [-47, 'Shrove Tuesday'],
+ [-46, 'Ash Wednesday'],
+ [-6*7, 'Quadragesima Sunday'],
+ [-3*7, 'Mothering Sunday'],
+ [-2*7, 'Passion Sunday'],
+ [-7, 'Palm Sunday'],
+ [-3, 'Maunday Thursday'],
+ [-2, 'Good Friday'],
+ [-1, 'Easter Eve'],
+ [0, 'Easter Day'],
+ [1, 'Easter Monday'],
+ [7, 'Low Sunday'],
+ [5*7, 'Rogation Sunday'],
+ [39, 'Ascension Day (Holy Thursday)'],
+ [42, 'Sunday after Ascension Day'],
+ [7*7, 'Pentecost (Whitsunday)'],
+ [50, 'Whitmonday'],
+ [8*7, 'Trinity Sunday'],
+ [60, 'Corpus Christi (Thursday after Trinity)']].
+each do |xs|
+ puts ((es + xs.shift).to_s + ' ' + xs.shift)
+end
diff --git a/version.h b/version.h
index c96a890185..d6736b64de 100644
--- a/version.h
+++ b/version.h
@@ -1,2 +1,2 @@
-#define RUBY_VERSION "1.1b9"
-#define VERSION_DATE "98/02/27"
+#define RUBY_VERSION "1.1b9_01"
+#define VERSION_DATE "98/03/06"