summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclDate.c202
-rw-r--r--generic/tclGetDate.y8
-rw-r--r--library/clock.tcl21
-rw-r--r--tests/clock.test26
-rw-r--r--unix/Makefile.in3
-rw-r--r--win/Makefile.in3
6 files changed, 149 insertions, 114 deletions
diff --git a/generic/tclDate.c b/generic/tclDate.c
index a3b2109..ee07443 100644
--- a/generic/tclDate.c
+++ b/generic/tclDate.c
@@ -1,7 +1,7 @@
-/* A Bison parser, made by GNU Bison 1.875. */
+/* A Bison parser, made by GNU Bison 1.875b. */
/* Skeleton parser for Yacc-like parsing with Bison,
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -105,7 +105,7 @@
/* Copy the first part of user declarations. */
-#line 17 "../unix/../generic/tclGetDate.y"
+
/*
* tclDate.c --
@@ -169,6 +169,8 @@ typedef struct DateInfo {
char *dateInput;
time_t *dateRelPointer;
+ int dateDigitCount;
+
} DateInfo;
#define YYPARSE_PARAM info
@@ -197,6 +199,7 @@ typedef struct DateInfo {
#define yyRelSeconds (((DateInfo*)info)->dateRelSeconds)
#define yyRelPointer (((DateInfo*)info)->dateRelPointer)
#define yyInput (((DateInfo*)info)->dateInput)
+#define yyDigitCount (((DateInfo*)info)->dateDigitCount)
#define EPOCH 1970
#define START_OF_TIME 1902
@@ -263,13 +266,13 @@ static int TclDatelex _ANSI_ARGS_((void* info));
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 160 "../unix/../generic/tclGetDate.y"
+
typedef union YYSTYPE {
time_t Number;
enum _MERIDIAN Meridian;
} YYSTYPE;
/* Line 191 of yacc.c. */
-#line 272 "../unix/../generic/tclDate.c"
+
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -281,7 +284,7 @@ typedef union YYSTYPE {
/* Line 214 of yacc.c. */
-#line 284 "../unix/../generic/tclDate.c"
+
#if ! defined (yyoverflow) || YYERROR_VERBOSE
@@ -470,12 +473,12 @@ static const yysigned_char yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short yyrline[] =
{
- 0, 176, 176, 177, 180, 183, 186, 189, 192, 195,
- 198, 202, 207, 210, 216, 222, 230, 236, 247, 251,
- 255, 261, 265, 269, 273, 277, 283, 287, 292, 297,
- 302, 307, 311, 316, 320, 325, 332, 336, 342, 351,
- 360, 370, 383, 388, 390, 391, 392, 393, 394, 396,
- 397, 399, 400, 401, 404, 423, 426
+ 0, 179, 179, 180, 183, 186, 189, 192, 195, 198,
+ 201, 205, 210, 213, 219, 225, 233, 239, 250, 254,
+ 258, 264, 268, 272, 276, 280, 286, 290, 295, 300,
+ 305, 310, 314, 319, 323, 328, 335, 339, 345, 354,
+ 363, 373, 386, 391, 393, 394, 395, 396, 397, 399,
+ 400, 402, 403, 404, 407, 426, 429
};
#endif
@@ -642,6 +645,7 @@ static const unsigned char yystos[] =
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1
+
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
Once GCC version 2 has supplanted version 1, this can go. */
@@ -762,9 +766,9 @@ yy_reduce_print (yyrule)
#endif
{
int yyi;
- unsigned int yylineno = yyrline[yyrule];
+ unsigned int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
- yyrule - 1, yylineno);
+ yyrule - 1, yylno);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
@@ -1224,49 +1228,49 @@ yyreduce:
switch (yyn)
{
case 4:
-#line 180 "../unix/../generic/tclGetDate.y"
+
{
yyHaveTime++;
;}
break;
case 5:
-#line 183 "../unix/../generic/tclGetDate.y"
+
{
yyHaveZone++;
;}
break;
case 6:
-#line 186 "../unix/../generic/tclGetDate.y"
+
{
yyHaveDate++;
;}
break;
case 7:
-#line 189 "../unix/../generic/tclGetDate.y"
+
{
yyHaveOrdinalMonth++;
;}
break;
case 8:
-#line 192 "../unix/../generic/tclGetDate.y"
+
{
yyHaveDay++;
;}
break;
case 9:
-#line 195 "../unix/../generic/tclGetDate.y"
+
{
yyHaveRel++;
;}
break;
case 10:
-#line 198 "../unix/../generic/tclGetDate.y"
+
{
yyHaveTime++;
yyHaveDate++;
@@ -1274,7 +1278,7 @@ yyreduce:
break;
case 11:
-#line 202 "../unix/../generic/tclGetDate.y"
+
{
yyHaveTime++;
yyHaveDate++;
@@ -1283,7 +1287,7 @@ yyreduce:
break;
case 13:
-#line 210 "../unix/../generic/tclGetDate.y"
+
{
yyHour = yyvsp[-1].Number;
yyMinutes = 0;
@@ -1293,7 +1297,7 @@ yyreduce:
break;
case 14:
-#line 216 "../unix/../generic/tclGetDate.y"
+
{
yyHour = yyvsp[-3].Number;
yyMinutes = yyvsp[-1].Number;
@@ -1303,7 +1307,7 @@ yyreduce:
break;
case 15:
-#line 222 "../unix/../generic/tclGetDate.y"
+
{
yyHour = yyvsp[-4].Number;
yyMinutes = yyvsp[-2].Number;
@@ -1315,7 +1319,7 @@ yyreduce:
break;
case 16:
-#line 230 "../unix/../generic/tclGetDate.y"
+
{
yyHour = yyvsp[-5].Number;
yyMinutes = yyvsp[-3].Number;
@@ -1325,7 +1329,7 @@ yyreduce:
break;
case 17:
-#line 236 "../unix/../generic/tclGetDate.y"
+
{
yyHour = yyvsp[-6].Number;
yyMinutes = yyvsp[-4].Number;
@@ -1338,7 +1342,7 @@ yyreduce:
break;
case 18:
-#line 247 "../unix/../generic/tclGetDate.y"
+
{
yyTimezone = yyvsp[-1].Number;
yyDSTmode = DSTon;
@@ -1346,7 +1350,7 @@ yyreduce:
break;
case 19:
-#line 251 "../unix/../generic/tclGetDate.y"
+
{
yyTimezone = yyvsp[0].Number;
yyDSTmode = DSToff;
@@ -1354,7 +1358,7 @@ yyreduce:
break;
case 20:
-#line 255 "../unix/../generic/tclGetDate.y"
+
{
yyTimezone = yyvsp[0].Number;
yyDSTmode = DSTon;
@@ -1362,7 +1366,7 @@ yyreduce:
break;
case 21:
-#line 261 "../unix/../generic/tclGetDate.y"
+
{
yyDayOrdinal = 1;
yyDayNumber = yyvsp[0].Number;
@@ -1370,7 +1374,7 @@ yyreduce:
break;
case 22:
-#line 265 "../unix/../generic/tclGetDate.y"
+
{
yyDayOrdinal = 1;
yyDayNumber = yyvsp[-1].Number;
@@ -1378,7 +1382,7 @@ yyreduce:
break;
case 23:
-#line 269 "../unix/../generic/tclGetDate.y"
+
{
yyDayOrdinal = yyvsp[-1].Number;
yyDayNumber = yyvsp[0].Number;
@@ -1386,7 +1390,7 @@ yyreduce:
break;
case 24:
-#line 273 "../unix/../generic/tclGetDate.y"
+
{
yyDayOrdinal = yyvsp[-2].Number * yyvsp[-1].Number;
yyDayNumber = yyvsp[0].Number;
@@ -1394,7 +1398,7 @@ yyreduce:
break;
case 25:
-#line 277 "../unix/../generic/tclGetDate.y"
+
{
yyDayOrdinal = 2;
yyDayNumber = yyvsp[0].Number;
@@ -1402,7 +1406,7 @@ yyreduce:
break;
case 26:
-#line 283 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[-2].Number;
yyDay = yyvsp[0].Number;
@@ -1410,7 +1414,7 @@ yyreduce:
break;
case 27:
-#line 287 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[-4].Number;
yyDay = yyvsp[-2].Number;
@@ -1419,7 +1423,7 @@ yyreduce:
break;
case 28:
-#line 292 "../unix/../generic/tclGetDate.y"
+
{
yyYear = yyvsp[0].Number / 10000;
yyMonth = (yyvsp[0].Number % 10000)/100;
@@ -1428,7 +1432,7 @@ yyreduce:
break;
case 29:
-#line 297 "../unix/../generic/tclGetDate.y"
+
{
yyDay = yyvsp[-4].Number;
yyMonth = yyvsp[-2].Number;
@@ -1437,7 +1441,7 @@ yyreduce:
break;
case 30:
-#line 302 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[-2].Number;
yyDay = yyvsp[0].Number;
@@ -1446,7 +1450,7 @@ yyreduce:
break;
case 31:
-#line 307 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[-1].Number;
yyDay = yyvsp[0].Number;
@@ -1454,7 +1458,7 @@ yyreduce:
break;
case 32:
-#line 311 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[-3].Number;
yyDay = yyvsp[-2].Number;
@@ -1463,7 +1467,7 @@ yyreduce:
break;
case 33:
-#line 316 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[0].Number;
yyDay = yyvsp[-1].Number;
@@ -1471,7 +1475,7 @@ yyreduce:
break;
case 34:
-#line 320 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = 1;
yyDay = 1;
@@ -1480,7 +1484,7 @@ yyreduce:
break;
case 35:
-#line 325 "../unix/../generic/tclGetDate.y"
+
{
yyMonth = yyvsp[-1].Number;
yyDay = yyvsp[-2].Number;
@@ -1489,7 +1493,7 @@ yyreduce:
break;
case 36:
-#line 332 "../unix/../generic/tclGetDate.y"
+
{
yyMonthOrdinal = 1;
yyMonth = yyvsp[0].Number;
@@ -1497,7 +1501,7 @@ yyreduce:
break;
case 37:
-#line 336 "../unix/../generic/tclGetDate.y"
+
{
yyMonthOrdinal = yyvsp[-1].Number;
yyMonth = yyvsp[0].Number;
@@ -1505,7 +1509,7 @@ yyreduce:
break;
case 38:
-#line 342 "../unix/../generic/tclGetDate.y"
+
{
if (yyvsp[-1].Number != HOUR(- 7)) YYABORT;
yyYear = yyvsp[-2].Number / 10000;
@@ -1518,7 +1522,7 @@ yyreduce:
break;
case 39:
-#line 351 "../unix/../generic/tclGetDate.y"
+
{
if (yyvsp[-5].Number != HOUR(- 7)) YYABORT;
yyYear = yyvsp[-6].Number / 10000;
@@ -1531,7 +1535,7 @@ yyreduce:
break;
case 40:
-#line 360 "../unix/../generic/tclGetDate.y"
+
{
yyYear = yyvsp[-1].Number / 10000;
yyMonth = (yyvsp[-1].Number % 10000)/100;
@@ -1543,7 +1547,7 @@ yyreduce:
break;
case 41:
-#line 370 "../unix/../generic/tclGetDate.y"
+
{
/*
* Offset computed year by -377 so that the returned years will
@@ -1558,7 +1562,7 @@ yyreduce:
break;
case 42:
-#line 383 "../unix/../generic/tclGetDate.y"
+
{
yyRelSeconds *= -1;
yyRelMonth *= -1;
@@ -1567,63 +1571,63 @@ yyreduce:
break;
case 44:
-#line 390 "../unix/../generic/tclGetDate.y"
+
{ *yyRelPointer += yyvsp[-2].Number * yyvsp[-1].Number * yyvsp[0].Number; ;}
break;
case 45:
-#line 391 "../unix/../generic/tclGetDate.y"
+
{ *yyRelPointer += yyvsp[-1].Number * yyvsp[0].Number; ;}
break;
case 46:
-#line 392 "../unix/../generic/tclGetDate.y"
+
{ *yyRelPointer += yyvsp[0].Number; ;}
break;
case 47:
-#line 393 "../unix/../generic/tclGetDate.y"
+
{ *yyRelPointer += yyvsp[-1].Number * yyvsp[0].Number; ;}
break;
case 48:
-#line 394 "../unix/../generic/tclGetDate.y"
+
{ *yyRelPointer += yyvsp[0].Number; ;}
break;
case 49:
-#line 396 "../unix/../generic/tclGetDate.y"
+
{ yyval.Number = -1; ;}
break;
case 50:
-#line 397 "../unix/../generic/tclGetDate.y"
+
{ yyval.Number = 1; ;}
break;
case 51:
-#line 399 "../unix/../generic/tclGetDate.y"
+
{ yyval.Number = yyvsp[0].Number; yyRelPointer = &yyRelSeconds; ;}
break;
case 52:
-#line 400 "../unix/../generic/tclGetDate.y"
+
{ yyval.Number = yyvsp[0].Number; yyRelPointer = &yyRelDay; ;}
break;
case 53:
-#line 401 "../unix/../generic/tclGetDate.y"
+
{ yyval.Number = yyvsp[0].Number; yyRelPointer = &yyRelMonth; ;}
break;
case 54:
-#line 405 "../unix/../generic/tclGetDate.y"
+
{
if (yyHaveTime && yyHaveDate && !yyHaveRel) {
yyYear = yyvsp[0].Number;
} else {
yyHaveTime++;
- if (yyvsp[0].Number < 100) {
+ if (yyDigitCount <= 2) {
yyHour = yyvsp[0].Number;
yyMinutes = 0;
} else {
@@ -1637,14 +1641,14 @@ yyreduce:
break;
case 55:
-#line 423 "../unix/../generic/tclGetDate.y"
+
{
yyval.Meridian = MER24;
;}
break;
case 56:
-#line 426 "../unix/../generic/tclGetDate.y"
+
{
yyval.Meridian = yyvsp[0].Meridian;
;}
@@ -1653,8 +1657,8 @@ yyreduce:
}
-/* Line 991 of yacc.c. */
-#line 1657 "../unix/../generic/tclDate.c"
+/* Line 999 of yacc.c. */
+
yyvsp -= yylen;
yyssp -= yylen;
@@ -1695,18 +1699,33 @@ yyerrlab:
{
YYSIZE_T yysize = 0;
int yytype = YYTRANSLATE (yychar);
+ const char* yyprefix;
char *yymsg;
- int yyx, yycount;
+ int yyx;
- yycount = 0;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
- for (yyx = yyn < 0 ? -yyn : 0;
- yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 0;
+
+ yyprefix = ", expecting ";
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- yysize += yystrlen (yytname[yyx]) + 15, yycount++;
- yysize += yystrlen ("syntax error, unexpected ") + 1;
- yysize += yystrlen (yytname[yytype]);
+ {
+ yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+ yycount += 1;
+ if (yycount == 5)
+ {
+ yysize = 0;
+ break;
+ }
+ }
+ yysize += (sizeof ("syntax error, unexpected ")
+ + yystrlen (yytname[yytype]));
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
@@ -1715,16 +1734,13 @@ yyerrlab:
if (yycount < 5)
{
- yycount = 0;
- for (yyx = yyn < 0 ? -yyn : 0;
- yyx < (int) (sizeof (yytname) / sizeof (char *));
- yyx++)
+ yyprefix = ", expecting ";
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
- const char *yyq = ! yycount ? ", expecting " : " or ";
- yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yyprefix);
yyp = yystpcpy (yyp, yytname[yyx]);
- yycount++;
+ yyprefix = " or ";
}
}
yyerror (yymsg);
@@ -1768,30 +1784,13 @@ yyerrlab:
/* Else will try to reuse lookahead token after shifting the error
token. */
- goto yyerrlab2;
+ goto yyerrlab1;
/*----------------------------------------------------.
| yyerrlab1 -- error raised explicitly by an action. |
`----------------------------------------------------*/
yyerrlab1:
-
- /* Suppress GCC warning that yyerrlab1 is unused when no action
- invokes YYERROR. Doesn't work in C++ */
-#ifndef __cplusplus
-#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__)
- __attribute__ ((__unused__))
-#endif
-#endif
-
-
- goto yyerrlab2;
-
-
-/*---------------------------------------------------------------.
-| yyerrlab2 -- pop states until the error token can be shifted. |
-`---------------------------------------------------------------*/
-yyerrlab2:
yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
@@ -1865,7 +1864,7 @@ yyreturn:
}
-#line 431 "../unix/../generic/tclGetDate.y"
+
/*
@@ -2239,6 +2238,7 @@ TclDatelex( void* info )
Count++;
}
yyInput--;
+ yyDigitCount = Count;
/* A number with 6 or more digits is considered an ISO 8601 base */
if (Count >= 6) {
return tISOBASE;
diff --git a/generic/tclGetDate.y b/generic/tclGetDate.y
index 3d04714..0be34be 100644
--- a/generic/tclGetDate.y
+++ b/generic/tclGetDate.y
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclGetDate.y,v 1.25 2004/09/27 14:31:17 kennykb Exp $
+ * RCS: @(#) $Id: tclGetDate.y,v 1.26 2004/12/29 20:57:27 kennykb Exp $
*/
%{
@@ -77,6 +77,8 @@ typedef struct DateInfo {
char *dateInput;
time_t *dateRelPointer;
+ int dateDigitCount;
+
} DateInfo;
#define YYPARSE_PARAM info
@@ -105,6 +107,7 @@ typedef struct DateInfo {
#define yyRelSeconds (((DateInfo*)info)->dateRelSeconds)
#define yyRelPointer (((DateInfo*)info)->dateRelPointer)
#define yyInput (((DateInfo*)info)->dateInput)
+#define yyDigitCount (((DateInfo*)info)->dateDigitCount)
#define EPOCH 1970
#define START_OF_TIME 1902
@@ -407,7 +410,7 @@ number : tUNUMBER
yyYear = $1;
} else {
yyHaveTime++;
- if ($1 < 100) {
+ if (yyDigitCount <= 2) {
yyHour = $1;
yyMinutes = 0;
} else {
@@ -801,6 +804,7 @@ TclDatelex( void* info )
Count++;
}
yyInput--;
+ yyDigitCount = Count;
/* A number with 6 or more digits is considered an ISO 8601 base */
if (Count >= 6) {
return tISOBASE;
diff --git a/library/clock.tcl b/library/clock.tcl
index 0a872ba..d47429c 100644
--- a/library/clock.tcl
+++ b/library/clock.tcl
@@ -13,7 +13,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: clock.tcl,v 1.12 2004/11/30 15:45:04 kennykb Exp $
+# RCS: @(#) $Id: clock.tcl,v 1.13 2004/12/29 20:57:28 kennykb Exp $
#
#----------------------------------------------------------------------
@@ -4419,6 +4419,14 @@ proc ::tcl::clock::GetJulianDayFromEraYearMonthDay { date } {
set year [dict get $date year]
}
}
+
+ # If month is out of range, reduce modulo 12 and adjust year accordingly.
+
+ set month [expr { [dict get $date month] - 1 }]
+ incr year [expr { $month / 12 }]
+ set month [expr { ( $month % 12 ) + 1 }]
+ dict set date era CE; dict set date year $year; dict set date month $month
+
set ym1 [expr { $year - 1 }]
# Try the Gregorian calendar first.
@@ -4428,9 +4436,9 @@ proc ::tcl::clock::GetJulianDayFromEraYearMonthDay { date } {
+ [dict get $date dayOfMonth]
+ ( [IsGregorianLeapYear $date] ?
[lindex $DaysInPriorMonthsInLeapYear \
- [expr { [dict get $date month] - 1}]]
+ [expr { $month - 1}]]
: [lindex $DaysInPriorMonthsInCommonYear \
- [expr { [dict get $date month] - 1}]] )
+ [expr { $month - 1}]] )
+ ( 365 * $ym1 )
+ ( $ym1 / 4 )
- ( $ym1 / 100 )
@@ -4445,9 +4453,9 @@ proc ::tcl::clock::GetJulianDayFromEraYearMonthDay { date } {
+ [dict get $date dayOfMonth]
+ ( ( $year % 4 == 0 ) ?
[lindex $DaysInPriorMonthsInLeapYear \
- [expr { [dict get $date month] - 1}]]
+ [expr { $month - 1}]]
: [lindex $DaysInPriorMonthsInCommonYear \
- [expr { [dict get $date month] - 1}]] )
+ [expr { $month - 1}]] )
+ ( 365 * $ym1 )
+ ( $ym1 / 4 ) }]
}
@@ -4483,9 +4491,6 @@ proc ::tcl::clock::GetJulianDayFromEraYearMonthDay { date } {
proc ::tcl::clock::GetJulianDayFromEraYearDay { date } {
- variable DaysInPriorMonthsInCommonYear
- variable DaysInPriorMonthsInLeapYear
-
# Get absolute year number from the civil year
switch -exact [dict get $date era] {
diff --git a/tests/clock.test b/tests/clock.test
index b5c19fb..7cd4509 100644
--- a/tests/clock.test
+++ b/tests/clock.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# RCS: @(#) $Id: clock.test,v 1.52 2004/11/30 15:45:04 kennykb Exp $
+# RCS: @(#) $Id: clock.test,v 1.53 2004/12/29 20:57:28 kennykb Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
package require tcltest 2
@@ -35375,6 +35375,30 @@ test clock-45.1 {regression test - time zone containing only two digits} \
} \
-result 482134530
+test clock-46.1 {regression test - month zero} \
+ -body {
+ clock scan 2004-00-00 -format %Y-%m-%d
+ } -result [clock scan 2003-11-30 -format %Y-%m-%d]
+test clock-46.2 {regression test - month zero} \
+ -body {
+ clock scan 20040000
+ } -result [clock scan 2003-11-30 -format %Y-%m-%d]
+test clock-46.3 {regression test - month thirteen} \
+ -body {
+ clock scan 2004-13-01 -format %Y-%m-%d
+ } -result [clock scan 2005-01-01 -format %Y-%m-%d]
+test clock-46.4 {regression test - month thirteen} \
+ -body {
+ clock scan 20041301
+ } -result [clock scan 2005-01-01 -format %Y-%m-%d]
+
+test clock-47.1 {regression test - four-digit time} {
+ clock scan 0012
+} [clock scan 0012 -format %H%M]
+test clock-47.2 {regression test - four digit time} {
+ clock scan 0039
+} [clock scan 0039 -format %H%M]
+
# cleanup
namespace delete ::testClock
diff --git a/unix/Makefile.in b/unix/Makefile.in
index b538716..d5cecd5 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -5,7 +5,7 @@
# "autoconf" program (constructs like "@foo@" will get replaced in the
# actual Makefile.
#
-# RCS: @(#) $Id: Makefile.in,v 1.158 2004/12/07 23:15:19 hobbs Exp $
+# RCS: @(#) $Id: Makefile.in,v 1.159 2004/12/29 20:57:30 kennykb Exp $
VERSION = @TCL_VERSION@
MAJOR_VERSION = @TCL_MAJOR_VERSION@
@@ -562,6 +562,7 @@ topDirName:
gendate:
bison --output-file=$(GENERIC_DIR)/tclDate.c \
+ --no-lines \
--name-prefix=TclDate \
$(GENERIC_DIR)/tclGetDate.y
diff --git a/win/Makefile.in b/win/Makefile.in
index dbc6894..a4187de 100644
--- a/win/Makefile.in
+++ b/win/Makefile.in
@@ -5,7 +5,7 @@
# "autoconf" program (constructs like "@foo@" will get replaced in the
# actual Makefile.
#
-# RCS: @(#) $Id: Makefile.in,v 1.85 2004/12/02 18:40:17 kennykb Exp $
+# RCS: @(#) $Id: Makefile.in,v 1.86 2004/12/29 20:57:30 kennykb Exp $
VERSION = @TCL_VERSION@
@@ -468,6 +468,7 @@ tclStubLib.${OBJEXT}: tclStubLib.c
gendate:
bison --output-file=$(GENERIC_DIR)/tclDate.c \
--name-prefix=TclDate \
+ --no-lines \
$(GENERIC_DIR)/tclGetDate.y
install: all install-binaries install-libraries install-doc