summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/parsedate.rb11
-rw-r--r--parse.y8
3 files changed, 17 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index ce966b16f2..1f6c028f2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Jan 20 03:54:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): fixed serious syntax misbehavior. do's
+ preceding was too high. a block in `foo bar do .. end' should
+ be passed to `foo', not `bar'.
+
Thu Jan 18 04:28:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
* io.c (rb_io_s_read): new method to call IO#read from
diff --git a/lib/parsedate.rb b/lib/parsedate.rb
index eee114acb2..7fc75cf0c2 100644
--- a/lib/parsedate.rb
+++ b/lib/parsedate.rb
@@ -1,5 +1,5 @@
-# parsedate.rb: Written by Tadayoshi Funaba 2000
-# $Id: parsedate.rb,v 1.2 2000-04-01 12:16:56+09 tadf Exp $
+# parsedate3.rb: Written by Tadayoshi Funaba 2000, 2001
+# $Id: parsedate3.rb,v 1.3 2001-01-18 12:09:47+09 tadf Exp $
module ParseDate
@@ -46,7 +46,12 @@ module ParseDate
hour = $1.to_i
min = $2.to_i
sec = $3.to_i if $3
- hour += 12 if $4 and $4.downcase == 'p'
+ if $4
+ hour %= 12
+ if $4.downcase == 'p'
+ hour += 12
+ end
+ end
zone = $5
end
diff --git a/parse.y b/parse.y
index b6917d5975..4f519ba79c 100644
--- a/parse.y
+++ b/parse.y
@@ -67,7 +67,7 @@ static unsigned long cond_stack = 0;
cond_nest--;\
cond_stack >>= 1;\
} while (0)
-#define IN_COND (cond_nest > 0 && (cond_stack&1))
+#define COND_P() (cond_nest > 0 && (cond_stack&1))
static int class_nest = 0;
static int in_single = 0;
@@ -1489,7 +1489,7 @@ method_call : operation '(' opt_call_args close_paren
close_paren : ')'
{
- if (!IN_COND) lex_state = EXPR_PAREN;
+ if (!COND_P()) lex_state = EXPR_PAREN;
}
stmt_rhs : block_call
@@ -3617,9 +3617,7 @@ yylex()
if (state == EXPR_FNAME) {
yylval.id = rb_intern(kw->name);
}
- if (kw->id[0] == kDO &&
- (state == EXPR_PAREN ||
- (!IN_COND && state == EXPR_ARG))) {
+ if (kw->id[0] == kDO && !COND_P() && state == EXPR_PAREN) {
return kDO2;
}
return kw->id[state != EXPR_BEG];