home_run 0.9.0-x86-mswin32-60 → 0.9.1-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +46 -0
- data/README.rdoc +45 -33
- data/Rakefile +26 -67
- data/bench/cpu_bench.rb +1 -54
- data/bench/cpu_bench_util.rb +55 -0
- data/bench/parser_bench.rb +20 -0
- data/bin/home_run +14 -17
- data/default.mspec +1 -1
- data/ext/{date_ext.c → date_ext/date_ext.c} +95 -208
- data/ext/date_ext/date_ext.h +187 -0
- data/ext/date_ext/date_parser.c +852 -0
- data/ext/date_ext/date_parser.rl +352 -0
- data/ext/{datetime.c → date_ext/datetime.c} +120 -77
- data/ext/date_ext/extconf.rb +6 -0
- data/lib/1.8/date_ext.so +0 -0
- data/lib/1.9/date_ext.so +0 -0
- data/{ext → lib}/date/format.rb +1 -1
- data/lib/date.rb +7 -0
- data/lib/home_run.rb +5 -0
- data/spec/date/allocate_spec.rb +7 -0
- data/spec/date/encoding_spec.rb +42 -0
- data/spec/date/limits_spec.rb +121 -0
- data/spec/date/parse_spec.rb +154 -0
- data/spec/date/parsing_spec.rb +11 -0
- data/spec/date/step_spec.rb +22 -0
- data/spec/date/strptime_spec.rb +35 -3
- data/spec/datetime/add_spec.rb +4 -4
- data/spec/datetime/allocate_spec.rb +7 -0
- data/spec/datetime/encoding_spec.rb +42 -0
- data/spec/datetime/limits_spec.rb +170 -0
- data/spec/datetime/parse_spec.rb +73 -0
- data/spec/datetime/parsing_spec.rb +4 -0
- data/spec/datetime/step_spec.rb +22 -0
- data/spec/datetime/strptime_spec.rb +10 -0
- metadata +24 -14
- data/ext/1.8/date_ext.so +0 -0
- data/ext/1.9/date_ext.so +0 -0
- data/ext/date.rb +0 -7
- data/ext/date_parser.c +0 -367
- data/ext/date_parser.rl +0 -134
- data/ext/extconf.rb +0 -6
@@ -1,146 +1,5 @@
|
|
1
|
-
|
2
|
-
#include
|
3
|
-
#include <stdio.h>
|
4
|
-
#include <stdlib.h>
|
5
|
-
#include <inttypes.h>
|
6
|
-
#include <ruby.h>
|
7
|
-
|
8
|
-
#ifdef RUBY19
|
9
|
-
#define RHR_DEFAULT_CWYEAR -4713
|
10
|
-
#define RHR_DEFAULT_CWEEK 1
|
11
|
-
#define RHR_DEFAULT_CWDAY 1
|
12
|
-
#else
|
13
|
-
#define RHR_DEFAULT_CWYEAR 1582
|
14
|
-
#define RHR_DEFAULT_CWEEK 41
|
15
|
-
#define RHR_DEFAULT_CWDAY 5
|
16
|
-
#endif
|
17
|
-
|
18
|
-
#define RHR_JD_MJD 2400001
|
19
|
-
#define RHR_JD_LD 2299160
|
20
|
-
#define RHR_JD_ITALY 2299161
|
21
|
-
#define RHR_JD_ENGLAND 2361222
|
22
|
-
#define RHR_UNIX_EPOCH 2440588
|
23
|
-
#define RHR_SECONDS_PER_HOUR 3600
|
24
|
-
#define RHR_MINUTES_PER_DAYD 1440.0
|
25
|
-
#define RHR_SECONDS_PER_DAY 86400
|
26
|
-
#define RHR_SECONDS_PER_DAYD 86400.0
|
27
|
-
#define RHR_MAX_OFFSET_MINUTES 864
|
28
|
-
#define RHR_MAX_OFFSET_FRACT 0.6
|
29
|
-
#define RHR_MIN_OFFSET_MINUTES -864
|
30
|
-
#define RHR_MIN_OFFSET_FRACT -0.6
|
31
|
-
|
32
|
-
/*
|
33
|
-
In both the 32-bit and 64-bit cases, the limits are chosen so that you cannot
|
34
|
-
store a civil date where converting it to a jd would cause an overflow.
|
35
|
-
*/
|
36
|
-
#if __LP64__
|
37
|
-
/*
|
38
|
-
On 64-bit systems, the limits depend on the number of significant digits in
|
39
|
-
a double (15). These are slightly below the maximum so that all numbers used
|
40
|
-
in calculations have fewer than 15 digits.
|
41
|
-
*/
|
42
|
-
#define RHR_JD_MAX 999979466117609
|
43
|
-
#define RHR_JD_MIN -999979466119058
|
44
|
-
#define RHR_YEAR_MAX 2737850782415
|
45
|
-
#define RHR_MONTH_MAX 12
|
46
|
-
#define RHR_DAY_MAX 5
|
47
|
-
#define RHR_YEAR_MIN -2737850791845
|
48
|
-
#define RHR_MONTH_MIN 11
|
49
|
-
#define RHR_DAY_MIN 26
|
50
|
-
|
51
|
-
#else
|
52
|
-
/*
|
53
|
-
On 32-bit systems, the limits depend on the storage limits of 32-bit integers.
|
54
|
-
The numbers are slightly less than 2**31 - 1 and slightly greater than -2**31
|
55
|
-
so that no calculations can overflow.
|
56
|
-
*/
|
57
|
-
#define RHR_JD_MAX 2147438064
|
58
|
-
#define RHR_JD_MIN -2145083647
|
59
|
-
#define RHR_YEAR_MAX 5874773
|
60
|
-
#define RHR_MONTH_MAX 8
|
61
|
-
#define RHR_DAY_MAX 15
|
62
|
-
#define RHR_YEAR_MIN -5877752
|
63
|
-
#define RHR_MONTH_MIN 5
|
64
|
-
#define RHR_DAY_MIN 8
|
65
|
-
#endif
|
66
|
-
|
67
|
-
#define RHR_HAVE_JD 1
|
68
|
-
#define RHR_HAVE_CIVIL 2
|
69
|
-
#define RHR_HAVE_NANOS 4
|
70
|
-
#define RHR_HAVE_HMS 8
|
71
|
-
|
72
|
-
#define RHR_NANOS_PER_MILLISECOND 1000000LL
|
73
|
-
#define RHR_NANOS_PER_SECOND 1000000000LL
|
74
|
-
#define RHR_NANOS_PER_MINUTE 60000000000LL
|
75
|
-
#define RHR_NANOS_PER_DAY 86400000000000LL
|
76
|
-
#define RHR_NANOS_PER_DAYD 86400000000000.0
|
77
|
-
#define RHR_NANOS_PER_SECONDD 1000000000.0
|
78
|
-
|
79
|
-
#define RHRR_YEAR_SET 0x1
|
80
|
-
#define RHRR_MONTH_SET 0x2
|
81
|
-
#define RHRR_DAY_SET 0x4
|
82
|
-
#define RHRR_YDAY_SET 0x8
|
83
|
-
#define RHRR_HOUR_SET 0x10
|
84
|
-
#define RHRR_MINUTE_SET 0x20
|
85
|
-
#define RHRR_SECOND_SET 0x40
|
86
|
-
#define RHRR_WDAY_SET 0x80
|
87
|
-
#define RHRR_CENTURY_SET 0x100
|
88
|
-
#define RHRR_CWYEAR_SET 0x200
|
89
|
-
#define RHRR_CWEEK_SET 0x400
|
90
|
-
#define RHRR_CWDAY_SET 0x800
|
91
|
-
#define RHRR_SEC_FRACTION_SET 0x1000
|
92
|
-
#define RHRR_UNIX_SET 0x2000
|
93
|
-
#define RHRR_WNUM0_SET 0x4000
|
94
|
-
#define RHRR_WNUM1_SET 0x8000
|
95
|
-
#define RHRR_MERIDIAN_SET 0x10000
|
96
|
-
#define RHRR_ZONE_SET 0x20000
|
97
|
-
#define RHRR_OFFSET_SET 0x40000
|
98
|
-
#define RHRR_UNIXM_SET 0x80000
|
99
|
-
|
100
|
-
#define RHR_HAS_JD(d) (((d)->flags & RHR_HAVE_JD) == RHR_HAVE_JD)
|
101
|
-
#define RHR_HAS_CIVIL(d) (((d)->flags & RHR_HAVE_CIVIL) == RHR_HAVE_CIVIL)
|
102
|
-
|
103
|
-
#define RHR_FILL_JD(d) if (((d)->flags & RHR_HAVE_JD) == 0) { rhrd__civil_to_jd(d); }
|
104
|
-
#define RHR_FILL_CIVIL(d) if (((d)->flags & RHR_HAVE_CIVIL) == 0) { rhrd__jd_to_civil(d); }
|
105
|
-
|
106
|
-
#define RHRDT_FILL_JD(d) if (!((d)->flags & RHR_HAVE_JD)) { rhrdt__civil_to_jd(d); }
|
107
|
-
#define RHRDT_FILL_CIVIL(d) if (!((d)->flags & RHR_HAVE_CIVIL)) { rhrdt__jd_to_civil(d); }
|
108
|
-
#define RHRDT_FILL_HMS(d) if (!((d)->flags & RHR_HAVE_HMS)) { rhrdt__nanos_to_hms(d); }
|
109
|
-
#define RHRDT_FILL_NANOS(d) if (!((d)->flags & RHR_HAVE_NANOS)) { rhrdt__hms_to_nanos(d); }
|
110
|
-
|
111
|
-
#ifdef RUBY186
|
112
|
-
#define RHR_RETURN_RESIZED_STR(s, len) return rb_str_resize(s, len);
|
113
|
-
#else
|
114
|
-
#define RHR_RETURN_RESIZED_STR(s, len) rb_str_set_len(s, len); return s;
|
115
|
-
#endif
|
116
|
-
|
117
|
-
#define RHR_SPACE_SHIP(x, l, r) if (l < r) { x = -1; } else if (l == r) { x = 0; } else { x = 1; }
|
118
|
-
|
119
|
-
#define RHR_CHECK_JD(d) if ((d->jd > RHR_JD_MAX) || (d->jd < RHR_JD_MIN)) { rb_raise(rb_eRangeError, "date out of range: jd = %li", d->jd);}
|
120
|
-
#define RHR_CHECK_CIVIL(d) if (!rhrd__valid_civil_limits(d->year, d->month, d->day)) { rb_raise(rb_eRangeError, "date out of range: year = %li, month = %hhi, day = %hhi", d->year, d->month, d->day);}
|
121
|
-
|
122
|
-
#define RHR_CACHED_IV(self, iv) VALUE v = rb_ivar_get(self, iv); if (RTEST(v)) {return v;}
|
123
|
-
|
124
|
-
typedef struct rhrd_s {
|
125
|
-
long jd;
|
126
|
-
long year;
|
127
|
-
unsigned char month;
|
128
|
-
unsigned char day;
|
129
|
-
unsigned char flags;
|
130
|
-
} rhrd_t;
|
131
|
-
|
132
|
-
typedef struct rhrdt_s {
|
133
|
-
long long nanos; /* Nanoseconds since start of day */
|
134
|
-
long jd;
|
135
|
-
long year;
|
136
|
-
short offset; /* Offset from UTC in minutes */
|
137
|
-
unsigned char month;
|
138
|
-
unsigned char day;
|
139
|
-
unsigned char hour;
|
140
|
-
unsigned char minute;
|
141
|
-
unsigned char second;
|
142
|
-
unsigned char flags;
|
143
|
-
} rhrdt_t;
|
1
|
+
#include <ctype.h>
|
2
|
+
#include "date_ext.h"
|
144
3
|
|
145
4
|
const unsigned char rhrd_days_in_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
146
5
|
const long rhrd_cumulative_days_in_month[13] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
|
@@ -153,6 +12,7 @@ const char * rhrd__abbr_day_names[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri"
|
|
153
12
|
const char rhrd__zone_re_str[] = "\\A(?:gmt|utc?)?[-+]\\d+(?:[,.:]\\d+(?::\\d+)?)?|[[:alpha:].\\s]+(?:standard|daylight)\\s+time\\b|[[:alpha:]]+(?:\\s+dst)?\\b";
|
154
13
|
const char rhrd__zone_dst_re_str[] = "\\s+(?:(?:(standard)|daylight)\\s+time|dst)\\z";
|
155
14
|
const char rhrd__zone_sign_re_str[] = "\\A(?:gmt|utc?)?(?:(-)|\\+)";
|
15
|
+
const char rhrd__strptime_num_patterns[] = "CDdeFGgHIjkLlMmNQRrSsTUuVvWwXxYy0123456789";
|
156
16
|
|
157
17
|
VALUE rhrd_class;
|
158
18
|
VALUE rhrd_s_class;
|
@@ -191,6 +51,7 @@ ID rhrd_id_offset;
|
|
191
51
|
ID rhrd_id_slice;
|
192
52
|
ID rhrd_id_split;
|
193
53
|
ID rhrd_id_sub_b;
|
54
|
+
ID rhrd_id_to_enum;
|
194
55
|
ID rhrd_id_to_i;
|
195
56
|
#ifdef RUBY19
|
196
57
|
ID rhrd_id_nsec;
|
@@ -223,6 +84,7 @@ VALUE rhrd_sym_offset;
|
|
223
84
|
VALUE rhrd_sym_sec;
|
224
85
|
VALUE rhrd_sym_sec_fraction;
|
225
86
|
VALUE rhrd_sym_seconds;
|
87
|
+
VALUE rhrd_sym_step;
|
226
88
|
VALUE rhrd_sym_wday;
|
227
89
|
VALUE rhrd_sym_wnum0;
|
228
90
|
VALUE rhrd_sym_wnum1;
|
@@ -231,15 +93,7 @@ VALUE rhrd_sym_year;
|
|
231
93
|
VALUE rhrd_sym_zone;
|
232
94
|
|
233
95
|
static VALUE rhrd_step(int argc, VALUE *argv, VALUE self);
|
234
|
-
static VALUE rhrdt_step(int argc, VALUE *argv, VALUE self);
|
235
96
|
static VALUE rhrd_to_s(VALUE self);
|
236
|
-
static VALUE rhrdt_to_s(VALUE self);
|
237
|
-
static VALUE rhrd_s_zone_to_diff(VALUE self, VALUE zone);
|
238
|
-
VALUE rhrdt__new_offset(VALUE self, double offset);
|
239
|
-
void rhrdt__civil_to_jd(rhrdt_t *d);
|
240
|
-
void rhrdt__jd_to_civil(rhrdt_t *date);
|
241
|
-
void rhrdt__nanos_to_hms(rhrdt_t *d);
|
242
|
-
void rhrdt__hms_to_nanos(rhrdt_t *d);
|
243
97
|
|
244
98
|
/* C helper methods */
|
245
99
|
|
@@ -264,8 +118,8 @@ long rhrd__modll(long long a, long b) {
|
|
264
118
|
return c;
|
265
119
|
}
|
266
120
|
|
267
|
-
/* Return
|
268
|
-
* the allowed limits,
|
121
|
+
/* Return 1 if the year, month, day provided are within
|
122
|
+
* the allowed limits, 0 otherwise. */
|
269
123
|
int rhrd__valid_civil_limits(long year, long month, long day) {
|
270
124
|
if (year > RHR_YEAR_MAX || year < RHR_YEAR_MIN) {
|
271
125
|
return 0;
|
@@ -365,7 +219,7 @@ int rhrd__leap_year(long year) {
|
|
365
219
|
* fields in the rhrd_t and returning 1 if so. If the fields
|
366
220
|
* given are not a valid date, return 0.
|
367
221
|
* This also handles wrap around if the month or day is negative. */
|
368
|
-
int rhrd__valid_civil(rhrd_t *d, long year, long month, long day) {
|
222
|
+
int rhrd__valid_civil(rhrd_t *d, long year, long month, long day, int overlimit_raise) {
|
369
223
|
if (month < 0 && month >= -12) {
|
370
224
|
month += 13;
|
371
225
|
}
|
@@ -397,6 +251,9 @@ int rhrd__valid_civil(rhrd_t *d, long year, long month, long day) {
|
|
397
251
|
}
|
398
252
|
|
399
253
|
if(!rhrd__valid_civil_limits(year, month, day)) {
|
254
|
+
if (overlimit_raise == RHR_OVERLIMIT_RAISE) {
|
255
|
+
rb_raise(rb_eRangeError, "date out of range: year = %li, month = %li, day = %li", year, month, day);
|
256
|
+
}
|
400
257
|
return 0;
|
401
258
|
}
|
402
259
|
|
@@ -425,7 +282,7 @@ VALUE rhrd__add_days(VALUE self, long n) {
|
|
425
282
|
VALUE new;
|
426
283
|
long x;
|
427
284
|
Data_Get_Struct(self, rhrd_t, d);
|
428
|
-
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
285
|
+
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, newd);
|
429
286
|
|
430
287
|
if(!(RHR_HAS_JD(d))) {
|
431
288
|
x = rhrd__safe_add_long(n, (long)(d->day));
|
@@ -456,7 +313,7 @@ VALUE rhrd__add_months(VALUE self, long n) {
|
|
456
313
|
long x;
|
457
314
|
Data_Get_Struct(self, rhrd_t, d);
|
458
315
|
|
459
|
-
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
316
|
+
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, newd);
|
460
317
|
RHR_FILL_CIVIL(d)
|
461
318
|
n = rhrd__safe_add_long(n, (long)(d->month));
|
462
319
|
if(n > 1 && n <= 12) {
|
@@ -556,7 +413,7 @@ void rhrd__fill_commercial(rhrd_t *d) {
|
|
556
413
|
* and cwday arguments, if the date is valid, and return 1. If the
|
557
414
|
* date is not valid, return 0. This also handles wrap around if
|
558
415
|
* the cweek or cwday arguments is negative. */
|
559
|
-
int rhrd__valid_commercial(rhrd_t *d, long cwyear, long cweek, long cwday) {
|
416
|
+
int rhrd__valid_commercial(rhrd_t *d, long cwyear, long cweek, long cwday, int overlimit_raise) {
|
560
417
|
rhrd_t n;
|
561
418
|
memset(&n, 0, sizeof(rhrd_t));
|
562
419
|
|
@@ -586,6 +443,9 @@ int rhrd__valid_commercial(rhrd_t *d, long cwyear, long cweek, long cwday) {
|
|
586
443
|
}
|
587
444
|
|
588
445
|
if ((n.jd > RHR_JD_MAX) || (n.jd < RHR_JD_MIN)) {
|
446
|
+
if (overlimit_raise == RHR_OVERLIMIT_RAISE) {
|
447
|
+
rb_raise(rb_eRangeError, "date out of range");
|
448
|
+
}
|
589
449
|
return 0;
|
590
450
|
}
|
591
451
|
|
@@ -608,7 +468,7 @@ long rhrd__ordinal_day(long year, unsigned char month, unsigned char day) {
|
|
608
468
|
* given ordinal day fields, if they are valid. Returns
|
609
469
|
* 1 if the date is valid, 0 if not. This also handles
|
610
470
|
* wrap around for a negative yday argument. */
|
611
|
-
int rhrd__valid_ordinal(rhrd_t *d, long year, long yday) {
|
471
|
+
int rhrd__valid_ordinal(rhrd_t *d, long year, long yday, int overlimit_raise) {
|
612
472
|
int leap;
|
613
473
|
long month, day;
|
614
474
|
|
@@ -636,6 +496,9 @@ int rhrd__valid_ordinal(rhrd_t *d, long year, long yday) {
|
|
636
496
|
}
|
637
497
|
|
638
498
|
if(!rhrd__valid_civil_limits(year, month, day)) {
|
499
|
+
if (overlimit_raise == RHR_OVERLIMIT_RAISE) {
|
500
|
+
rb_raise(rb_eRangeError, "date out of range");
|
501
|
+
}
|
639
502
|
return 0;
|
640
503
|
}
|
641
504
|
|
@@ -778,7 +641,7 @@ int rhrd__fill_from_hash(rhrd_t *d, VALUE hash) {
|
|
778
641
|
d->jd = rhrd__yday1_jd(year);
|
779
642
|
d->flags |= RHR_HAVE_JD;
|
780
643
|
rhrd__fill_commercial(d);
|
781
|
-
if(!rhrd__valid_commercial(d, d->year, 1, NUM2LONG(rwday))) {
|
644
|
+
if(!rhrd__valid_commercial(d, d->year, 1, NUM2LONG(rwday), RHR_NO_RAISE)) {
|
782
645
|
return 1;
|
783
646
|
}
|
784
647
|
d->flags &= ~RHR_HAVE_CIVIL;
|
@@ -835,15 +698,17 @@ int rhrd__fill_from_hash(rhrd_t *d, VALUE hash) {
|
|
835
698
|
} else {
|
836
699
|
return -1;
|
837
700
|
}
|
838
|
-
|
701
|
+
|
702
|
+
if (yday && rhrd__valid_ordinal(d, year, yday, RHR_OVERLIMIT_RAISE)) {
|
839
703
|
return 0;
|
840
|
-
}
|
704
|
+
}
|
705
|
+
if (cweek && cwday && rhrd__valid_commercial(d, cwyear, cweek, cwday, RHR_OVERLIMIT_RAISE)) {
|
841
706
|
return 0;
|
842
|
-
} else if (!rhrd__valid_civil(d, year, month, day)) {
|
843
|
-
return 1;
|
844
707
|
}
|
845
|
-
|
846
|
-
|
708
|
+
if (rhrd__valid_civil(d, year, month, day, RHR_OVERLIMIT_RAISE)) {
|
709
|
+
return 0;
|
710
|
+
}
|
711
|
+
return 1;
|
847
712
|
}
|
848
713
|
|
849
714
|
/* Returns a new ruby object filled with information from
|
@@ -851,7 +716,7 @@ int rhrd__fill_from_hash(rhrd_t *d, VALUE hash) {
|
|
851
716
|
* did not contain valid date information. */
|
852
717
|
VALUE rhrd__from_hash(VALUE hash) {
|
853
718
|
rhrd_t *d;
|
854
|
-
VALUE rd = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
719
|
+
VALUE rd = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, d);
|
855
720
|
if(rhrd__fill_from_hash(d, hash)) {
|
856
721
|
rb_raise(rb_eArgError, "invalid date");
|
857
722
|
} else {
|
@@ -1071,6 +936,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1071
936
|
long wnum1 = 0;
|
1072
937
|
long i;
|
1073
938
|
long fmt_pos;
|
939
|
+
int year_only4 = 0;
|
1074
940
|
int scan_len;
|
1075
941
|
VALUE zone = Qnil;
|
1076
942
|
VALUE hash;
|
@@ -1180,7 +1046,16 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1180
1046
|
state |= RHRR_CWYEAR_SET | RHRR_CENTURY_SET;
|
1181
1047
|
break;
|
1182
1048
|
case 'G':
|
1183
|
-
|
1049
|
+
#define RHR_PARSE_year_only4 year_only4 = 0;\
|
1050
|
+
if (fmt_pos + 1 < fmt_len) {\
|
1051
|
+
if(isdigit(fmt_str[fmt_pos + 1])) {\
|
1052
|
+
year_only4 = 1;\
|
1053
|
+
} else if ((fmt_pos + 2 < fmt_len) && (fmt_str[fmt_pos + 1] == '%') && strchr(rhrd__strptime_num_patterns, fmt_str[fmt_pos + 2])) {\
|
1054
|
+
year_only4 = 1;\
|
1055
|
+
}\
|
1056
|
+
}
|
1057
|
+
RHR_PARSE_year_only4
|
1058
|
+
if (sscanf(str + pos, year_only4 ? "%4ld%n" : "%ld%n", &cwyear, &scan_len) != 1) {
|
1184
1059
|
return Qnil;
|
1185
1060
|
}
|
1186
1061
|
state |= RHRR_CWYEAR_SET + RHRR_CENTURY_SET;
|
@@ -1365,10 +1240,11 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1365
1240
|
RHR_PARSE_y
|
1366
1241
|
break;
|
1367
1242
|
case 'Y':
|
1368
|
-
#define RHR_PARSE_Y if (sscanf(str + pos, "%ld%n", &year, &scan_len) != 1) {\
|
1243
|
+
#define RHR_PARSE_Y if (sscanf(str + pos, year_only4 ? "%4ld%n" : "%ld%n", &year, &scan_len) != 1) {\
|
1369
1244
|
return Qnil;\
|
1370
1245
|
}\
|
1371
1246
|
state |= RHRR_YEAR_SET + RHRR_CENTURY_SET;
|
1247
|
+
RHR_PARSE_year_only4
|
1372
1248
|
RHR_PARSE_Y
|
1373
1249
|
break;
|
1374
1250
|
case 'z':
|
@@ -1402,6 +1278,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1402
1278
|
RHR_PARSE_sep(':')
|
1403
1279
|
RHR_PARSE_S
|
1404
1280
|
RHR_PARSE_sep(' ')
|
1281
|
+
RHR_PARSE_year_only4
|
1405
1282
|
RHR_PARSE_Y
|
1406
1283
|
break;
|
1407
1284
|
case 'x':
|
@@ -1446,6 +1323,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1446
1323
|
RHR_PARSE_sep('-')
|
1447
1324
|
RHR_PARSE_b
|
1448
1325
|
RHR_PARSE_sep('-')
|
1326
|
+
RHR_PARSE_year_only4
|
1449
1327
|
RHR_PARSE_Y
|
1450
1328
|
break;
|
1451
1329
|
case '+':
|
@@ -1463,6 +1341,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1463
1341
|
RHR_PARSE_sep(' ')
|
1464
1342
|
RHR_PARSE_Z
|
1465
1343
|
RHR_PARSE_sep(' ')
|
1344
|
+
RHR_PARSE_year_only4
|
1466
1345
|
RHR_PARSE_Y
|
1467
1346
|
break;
|
1468
1347
|
default:
|
@@ -1569,8 +1448,6 @@ void rhrd__set_cw_ivs(VALUE self, rhrd_t *d) {
|
|
1569
1448
|
rb_ivar_set(self, rhrd_id_cwday, LONG2NUM(d->day));
|
1570
1449
|
}
|
1571
1450
|
|
1572
|
-
#include "date_parser.c"
|
1573
|
-
|
1574
1451
|
/* Ruby class methods */
|
1575
1452
|
|
1576
1453
|
/* call-seq:
|
@@ -1587,7 +1464,7 @@ static VALUE rhrd_s__load(VALUE klass, VALUE string) {
|
|
1587
1464
|
rhrd_t * d;
|
1588
1465
|
VALUE jd, rd;
|
1589
1466
|
jd = rb_marshal_load(string);
|
1590
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1467
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1591
1468
|
d->jd = NUM2LONG(jd);
|
1592
1469
|
RHR_CHECK_JD(d)
|
1593
1470
|
d->flags = RHR_HAVE_JD;
|
@@ -1648,7 +1525,7 @@ static VALUE rhrd_s_civil(int argc, VALUE *argv, VALUE klass) {
|
|
1648
1525
|
long year;
|
1649
1526
|
long month = 1;
|
1650
1527
|
long day = 1;
|
1651
|
-
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1528
|
+
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1652
1529
|
|
1653
1530
|
switch(argc) {
|
1654
1531
|
case 3:
|
@@ -1667,8 +1544,7 @@ static VALUE rhrd_s_civil(int argc, VALUE *argv, VALUE klass) {
|
|
1667
1544
|
break;
|
1668
1545
|
}
|
1669
1546
|
|
1670
|
-
if (!rhrd__valid_civil(d, year, month, day)) {
|
1671
|
-
RHR_CHECK_CIVIL(d)
|
1547
|
+
if (!rhrd__valid_civil(d, year, month, day, RHR_OVERLIMIT_RAISE)) {
|
1672
1548
|
rb_raise(rb_eArgError, "invalid date (year: %li, month: %li, day: %li)", year, month, day);
|
1673
1549
|
}
|
1674
1550
|
return rd;
|
@@ -1693,7 +1569,7 @@ static VALUE rhrd_s_commercial(int argc, VALUE *argv, VALUE klass) {
|
|
1693
1569
|
long cwyear = RHR_DEFAULT_CWYEAR;
|
1694
1570
|
long cweek = RHR_DEFAULT_CWEEK;
|
1695
1571
|
long cwday = RHR_DEFAULT_CWDAY;
|
1696
|
-
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1572
|
+
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1697
1573
|
|
1698
1574
|
switch(argc) {
|
1699
1575
|
case 3:
|
@@ -1717,8 +1593,7 @@ static VALUE rhrd_s_commercial(int argc, VALUE *argv, VALUE klass) {
|
|
1717
1593
|
break;
|
1718
1594
|
}
|
1719
1595
|
|
1720
|
-
if(!rhrd__valid_commercial(d, cwyear, cweek, cwday)) {
|
1721
|
-
RHR_CHECK_JD(d)
|
1596
|
+
if(!rhrd__valid_commercial(d, cwyear, cweek, cwday, RHR_OVERLIMIT_RAISE)) {
|
1722
1597
|
rb_raise(rb_eArgError, "invalid date (cwyear: %li, cweek: %li, cwday: %li)", cwyear, cweek, cwday);
|
1723
1598
|
}
|
1724
1599
|
return rd;
|
@@ -1742,7 +1617,7 @@ static VALUE rhrd_s_gregorian_leap_q(VALUE klass, VALUE year) {
|
|
1742
1617
|
*/
|
1743
1618
|
static VALUE rhrd_s_jd (int argc, VALUE *argv, VALUE klass) {
|
1744
1619
|
rhrd_t *d;
|
1745
|
-
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1620
|
+
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1746
1621
|
|
1747
1622
|
switch(argc) {
|
1748
1623
|
case 0:
|
@@ -1779,7 +1654,7 @@ static VALUE rhrd_s_julian_leap_q(VALUE klass, VALUE y) {
|
|
1779
1654
|
*/
|
1780
1655
|
static VALUE rhrd_s_new_b(int argc, VALUE *argv, VALUE klass) {
|
1781
1656
|
rhrd_t *d;
|
1782
|
-
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1657
|
+
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1783
1658
|
|
1784
1659
|
switch(argc) {
|
1785
1660
|
case 0:
|
@@ -1812,7 +1687,7 @@ static VALUE rhrd_s_ordinal(int argc, VALUE *argv, VALUE klass) {
|
|
1812
1687
|
long year;
|
1813
1688
|
long day = 1;
|
1814
1689
|
rhrd_t *d;
|
1815
|
-
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1690
|
+
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1816
1691
|
|
1817
1692
|
switch(argc) {
|
1818
1693
|
case 2:
|
@@ -1820,8 +1695,7 @@ static VALUE rhrd_s_ordinal(int argc, VALUE *argv, VALUE klass) {
|
|
1820
1695
|
day = NUM2LONG(argv[1]);
|
1821
1696
|
case 1:
|
1822
1697
|
year = NUM2LONG(argv[0]);
|
1823
|
-
if(!rhrd__valid_ordinal(d, year, day)) {
|
1824
|
-
RHR_CHECK_JD(d)
|
1698
|
+
if(!rhrd__valid_ordinal(d, year, day, RHR_OVERLIMIT_RAISE)) {
|
1825
1699
|
rb_raise(rb_eArgError, "invalid date (year: %li, yday: %li)", year, day);
|
1826
1700
|
}
|
1827
1701
|
break;
|
@@ -1854,7 +1728,7 @@ static VALUE rhrd_s_parse(int argc, VALUE *argv, VALUE klass) {
|
|
1854
1728
|
|
1855
1729
|
switch(argc) {
|
1856
1730
|
case 0:
|
1857
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1731
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1858
1732
|
d->flags = RHR_HAVE_JD;
|
1859
1733
|
return rd;
|
1860
1734
|
case 1:
|
@@ -1885,7 +1759,7 @@ static VALUE rhrd_s_strptime(int argc, VALUE *argv, VALUE klass) {
|
|
1885
1759
|
|
1886
1760
|
switch(argc) {
|
1887
1761
|
case 0:
|
1888
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1762
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1889
1763
|
d->flags = RHR_HAVE_JD;
|
1890
1764
|
return rd;
|
1891
1765
|
case 1:
|
@@ -1914,7 +1788,7 @@ static VALUE rhrd_s_strptime(int argc, VALUE *argv, VALUE klass) {
|
|
1914
1788
|
*/
|
1915
1789
|
static VALUE rhrd_s_today(int argc, VALUE *argv, VALUE klass) {
|
1916
1790
|
rhrd_t *d;
|
1917
|
-
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
1791
|
+
VALUE rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
1918
1792
|
|
1919
1793
|
switch(argc) {
|
1920
1794
|
case 0:
|
@@ -1948,7 +1822,7 @@ static VALUE rhrd_s_valid_civil_q(int argc, VALUE *argv, VALUE klass) {
|
|
1948
1822
|
switch(argc) {
|
1949
1823
|
case 3:
|
1950
1824
|
case 4:
|
1951
|
-
if (!rhrd__valid_civil(&d, NUM2LONG(argv[0]), NUM2LONG(argv[1]), NUM2LONG(argv[2]))) {
|
1825
|
+
if (!rhrd__valid_civil(&d, NUM2LONG(argv[0]), NUM2LONG(argv[1]), NUM2LONG(argv[2]), RHR_NO_RAISE)) {
|
1952
1826
|
#ifdef RUBY19
|
1953
1827
|
return Qfalse;
|
1954
1828
|
#else
|
@@ -1988,7 +1862,7 @@ static VALUE rhrd_s_valid_commercial_q(int argc, VALUE *argv, VALUE klass) {
|
|
1988
1862
|
switch(argc) {
|
1989
1863
|
case 3:
|
1990
1864
|
case 4:
|
1991
|
-
if (!rhrd__valid_commercial(&d, NUM2LONG(argv[0]), NUM2LONG(argv[1]), NUM2LONG(argv[2]))) {
|
1865
|
+
if (!rhrd__valid_commercial(&d, NUM2LONG(argv[0]), NUM2LONG(argv[1]), NUM2LONG(argv[2]), RHR_NO_RAISE)) {
|
1992
1866
|
#ifdef RUBY19
|
1993
1867
|
return Qfalse;
|
1994
1868
|
#else
|
@@ -2052,7 +1926,7 @@ static VALUE rhrd_s_valid_ordinal_q(int argc, VALUE *argv, VALUE klass) {
|
|
2052
1926
|
switch(argc) {
|
2053
1927
|
case 2:
|
2054
1928
|
case 3:
|
2055
|
-
if (!rhrd__valid_ordinal(&d, NUM2LONG(argv[0]), NUM2LONG(argv[1]))) {
|
1929
|
+
if (!rhrd__valid_ordinal(&d, NUM2LONG(argv[0]), NUM2LONG(argv[1]), RHR_NO_RAISE)) {
|
2056
1930
|
#ifdef RUBY19
|
2057
1931
|
return Qfalse;
|
2058
1932
|
#else
|
@@ -2087,7 +1961,7 @@ static VALUE rhrd_s_valid_ordinal_q(int argc, VALUE *argv, VALUE klass) {
|
|
2087
1961
|
*
|
2088
1962
|
* On ruby 1.9, this method is private.
|
2089
1963
|
*/
|
2090
|
-
|
1964
|
+
VALUE rhrd_s_zone_to_diff(VALUE klass, VALUE str) {
|
2091
1965
|
long offset = 0;
|
2092
1966
|
long len, i, j;
|
2093
1967
|
char *s;
|
@@ -2125,8 +1999,8 @@ static VALUE rhrd_s_zone_to_diff(VALUE klass, VALUE str) {
|
|
2125
1999
|
if((s[i] == ',') || (s[i] == '.')) {
|
2126
2000
|
v = rb_funcall(str, rhrd_id_split, 1, rhrd_re_comma_period);
|
2127
2001
|
e = rb_ary_entry(v, 1);
|
2128
|
-
return LONG2NUM((NUM2LONG(rb_funcall(rb_ary_entry(v, 0), rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR)
|
2129
|
-
+ (NUM2LONG(rb_funcall(e, rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR) / (long)pow(10, RSTRING_LEN(rb_str_to_str(e))) * offset);
|
2002
|
+
return LONG2NUM(((NUM2LONG(rb_funcall(rb_ary_entry(v, 0), rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR)
|
2003
|
+
+ ((NUM2LONG(rb_funcall(e, rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR) / (long)pow(10, RSTRING_LEN(rb_str_to_str(e))))) * offset);
|
2130
2004
|
}
|
2131
2005
|
}
|
2132
2006
|
switch (len) {
|
@@ -2574,24 +2448,33 @@ static VALUE rhrd_step(int argc, VALUE *argv, VALUE self) {
|
|
2574
2448
|
rhrd_t *d, *n, *newd;
|
2575
2449
|
rhrdt_t *ndt;
|
2576
2450
|
long step, limit, current;
|
2577
|
-
VALUE rlimit, new;
|
2451
|
+
VALUE rlimit, new, rstep;
|
2578
2452
|
Data_Get_Struct(self, rhrd_t, d);
|
2579
2453
|
RHR_FILL_JD(d)
|
2580
2454
|
|
2581
|
-
rb_need_block();
|
2582
2455
|
switch(argc) {
|
2583
2456
|
case 1:
|
2584
2457
|
step = 1;
|
2458
|
+
rstep = LONG2NUM(step);
|
2585
2459
|
break;
|
2586
2460
|
case 2:
|
2587
|
-
|
2461
|
+
rstep = argv[1];
|
2462
|
+
step = NUM2LONG(rstep);
|
2588
2463
|
break;
|
2589
2464
|
default:
|
2590
2465
|
rb_raise(rb_eArgError, "wrong number of arguments: %i for 2", argc);
|
2591
2466
|
break;
|
2592
2467
|
}
|
2593
|
-
|
2594
2468
|
rlimit = argv[0];
|
2469
|
+
|
2470
|
+
#ifdef RUBY19
|
2471
|
+
if (!rb_block_given_p()) {
|
2472
|
+
return rb_funcall(self, rhrd_id_to_enum, 3, rhrd_sym_step, rlimit, rstep);
|
2473
|
+
}
|
2474
|
+
#else
|
2475
|
+
rb_need_block();
|
2476
|
+
#endif
|
2477
|
+
|
2595
2478
|
if (RTEST(rb_obj_is_kind_of(rlimit, rb_cNumeric))) {
|
2596
2479
|
limit = NUM2LONG(rlimit);
|
2597
2480
|
} else if (RTEST((rb_obj_is_kind_of(rlimit, rhrdt_class)))) {
|
@@ -2610,7 +2493,7 @@ static VALUE rhrd_step(int argc, VALUE *argv, VALUE self) {
|
|
2610
2493
|
if (limit > current) {
|
2611
2494
|
if (step > 0) {
|
2612
2495
|
while(limit >= current) {
|
2613
|
-
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
2496
|
+
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, newd);
|
2614
2497
|
newd->jd = current;
|
2615
2498
|
RHR_CHECK_JD(newd)
|
2616
2499
|
newd->flags = RHR_HAVE_JD;
|
@@ -2621,7 +2504,7 @@ static VALUE rhrd_step(int argc, VALUE *argv, VALUE self) {
|
|
2621
2504
|
} else if (limit < current) {
|
2622
2505
|
if (step < 0) {
|
2623
2506
|
while(limit <= current) {
|
2624
|
-
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
2507
|
+
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, newd);
|
2625
2508
|
newd->jd = current;
|
2626
2509
|
RHR_CHECK_JD(newd)
|
2627
2510
|
newd->flags = RHR_HAVE_JD;
|
@@ -3006,7 +2889,7 @@ VALUE rhrd__add_years(VALUE self, long n) {
|
|
3006
2889
|
VALUE new;
|
3007
2890
|
Data_Get_Struct(self, rhrd_t, d);
|
3008
2891
|
|
3009
|
-
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
2892
|
+
new = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, newd);
|
3010
2893
|
RHR_FILL_CIVIL(d)
|
3011
2894
|
newd->year = rhrd__safe_add_long(n, d->year);
|
3012
2895
|
newd->month = d->month;
|
@@ -3054,7 +2937,7 @@ static VALUE rhrd_s_httpdate(int argc, VALUE *argv, VALUE klass) {
|
|
3054
2937
|
|
3055
2938
|
switch(argc) {
|
3056
2939
|
case 0:
|
3057
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
2940
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
3058
2941
|
d->flags = RHR_HAVE_JD;
|
3059
2942
|
return rd;
|
3060
2943
|
case 1:
|
@@ -3088,7 +2971,7 @@ static VALUE rhrd_s_iso8601(int argc, VALUE *argv, VALUE klass) {
|
|
3088
2971
|
|
3089
2972
|
switch(argc) {
|
3090
2973
|
case 0:
|
3091
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
2974
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
3092
2975
|
d->flags = RHR_HAVE_JD;
|
3093
2976
|
return rd;
|
3094
2977
|
case 1:
|
@@ -3122,7 +3005,7 @@ static VALUE rhrd_s_jisx0301(int argc, VALUE *argv, VALUE klass) {
|
|
3122
3005
|
|
3123
3006
|
switch(argc) {
|
3124
3007
|
case 0:
|
3125
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
3008
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
3126
3009
|
d->flags = RHR_HAVE_JD;
|
3127
3010
|
return rd;
|
3128
3011
|
case 1:
|
@@ -3156,7 +3039,7 @@ static VALUE rhrd_s_rfc2822(int argc, VALUE *argv, VALUE klass) {
|
|
3156
3039
|
|
3157
3040
|
switch(argc) {
|
3158
3041
|
case 0:
|
3159
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
3042
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
3160
3043
|
d->flags = RHR_HAVE_JD;
|
3161
3044
|
return rd;
|
3162
3045
|
case 1:
|
@@ -3190,7 +3073,7 @@ static VALUE rhrd_s_rfc3339(int argc, VALUE *argv, VALUE klass) {
|
|
3190
3073
|
|
3191
3074
|
switch(argc) {
|
3192
3075
|
case 0:
|
3193
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
3076
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
3194
3077
|
d->flags = RHR_HAVE_JD;
|
3195
3078
|
return rd;
|
3196
3079
|
case 1:
|
@@ -3224,7 +3107,7 @@ static VALUE rhrd_s_xmlschema(int argc, VALUE *argv, VALUE klass) {
|
|
3224
3107
|
|
3225
3108
|
switch(argc) {
|
3226
3109
|
case 0:
|
3227
|
-
rd = Data_Make_Struct(klass, rhrd_t, NULL,
|
3110
|
+
rd = Data_Make_Struct(klass, rhrd_t, NULL, -1, d);
|
3228
3111
|
d->flags = RHR_HAVE_JD;
|
3229
3112
|
return rd;
|
3230
3113
|
case 1:
|
@@ -3560,7 +3443,7 @@ static VALUE rhrd_rfc3339(VALUE self) {
|
|
3560
3443
|
static VALUE rhrd_to_datetime(VALUE self) {
|
3561
3444
|
rhrd_t *d;
|
3562
3445
|
rhrdt_t *dt;
|
3563
|
-
VALUE rdt = Data_Make_Struct(rhrdt_class, rhrdt_t, NULL,
|
3446
|
+
VALUE rdt = Data_Make_Struct(rhrdt_class, rhrdt_t, NULL, -1, dt);
|
3564
3447
|
Data_Get_Struct(self, rhrd_t, d);
|
3565
3448
|
|
3566
3449
|
if (RHR_HAS_CIVIL(d)) {
|
@@ -3607,7 +3490,7 @@ static VALUE rhrd_to_time(VALUE self) {
|
|
3607
3490
|
static VALUE rhrd_time_to_date(VALUE self) {
|
3608
3491
|
rhrd_t *d;
|
3609
3492
|
VALUE rd;
|
3610
|
-
rd = Data_Make_Struct(rhrd_class, rhrd_t, NULL,
|
3493
|
+
rd = Data_Make_Struct(rhrd_class, rhrd_t, NULL, -1, d);
|
3611
3494
|
d->jd = rhrd__unix_to_jd(NUM2LONG(rb_funcall(self, rhrd_id_to_i, 0)) + NUM2LONG(rb_funcall(self, rhrd_id_utc_offset, 0)));
|
3612
3495
|
d->flags = RHR_HAVE_JD;
|
3613
3496
|
RHR_CHECK_JD(d)
|
@@ -4059,8 +3942,6 @@ static VALUE rhrd_s_valid_time_q(VALUE klass, VALUE rh, VALUE rm, VALUE rs) {
|
|
4059
3942
|
|
4060
3943
|
#endif
|
4061
3944
|
|
4062
|
-
#include "datetime.c"
|
4063
|
-
|
4064
3945
|
/* Ruby Library Initialization */
|
4065
3946
|
|
4066
3947
|
/* +Date+ is used to store a single date in the gregorian calendar.
|
@@ -4096,6 +3977,7 @@ void Init_date_ext(void) {
|
|
4096
3977
|
rhrd_id_slice = rb_intern("slice");
|
4097
3978
|
rhrd_id_split = rb_intern("split");
|
4098
3979
|
rhrd_id_sub_b = rb_intern("sub!");
|
3980
|
+
rhrd_id_to_enum = rb_intern("to_enum");
|
4099
3981
|
rhrd_id_to_i = rb_intern("to_i");
|
4100
3982
|
#ifdef RUBY19
|
4101
3983
|
rhrd_id_nsec = rb_intern("nsec");
|
@@ -4128,6 +4010,7 @@ void Init_date_ext(void) {
|
|
4128
4010
|
rhrd_sym_sec = ID2SYM(rb_intern("sec"));
|
4129
4011
|
rhrd_sym_sec_fraction = ID2SYM(rb_intern("sec_fraction"));
|
4130
4012
|
rhrd_sym_seconds = ID2SYM(rb_intern("seconds"));
|
4013
|
+
rhrd_sym_step = ID2SYM(rb_intern("step"));
|
4131
4014
|
rhrd_sym_wday = ID2SYM(rb_intern("wday"));
|
4132
4015
|
rhrd_sym_wnum0 = ID2SYM(rb_intern("wnum0"));
|
4133
4016
|
rhrd_sym_wnum1 = ID2SYM(rb_intern("wnum1"));
|
@@ -4135,6 +4018,10 @@ void Init_date_ext(void) {
|
|
4135
4018
|
rhrd_sym_year = ID2SYM(rb_intern("year"));
|
4136
4019
|
rhrd_sym_zone = ID2SYM(rb_intern("zone"));
|
4137
4020
|
|
4021
|
+
#ifdef RHR_ENCODING
|
4022
|
+
rhrd_encoding_index = rb_enc_to_index(rb_usascii_encoding());
|
4023
|
+
#endif
|
4024
|
+
|
4138
4025
|
/* Define classes*/
|
4139
4026
|
|
4140
4027
|
rhrd_class = rb_define_class("Date", rb_cObject);
|