summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-30 18:49:00 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-30 18:49:00 +0000
commit7aaf7dac8d312b6b1a27ea8240d2818c5c77ee17 (patch)
tree12e2acf0563c5b6d05ae9c9f65adafa46be6fe3a
parent70f5d818f8f4956354221e7977bb1b8b40c00a5a (diff)
* parse.y (assignable_gen): ignore already erred names.
* parse.y (shadowing_lvar_gen): always make new block local variable when shadowing outer local variable. [ruby-dev:31507] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--bootstraptest/test_knownbug.rb11
-rw-r--r--bootstraptest/test_massign.rb6
-rw-r--r--parse.y6
-rw-r--r--version.h6
5 files changed, 21 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 2198d67ecd..6677ff784f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Aug 31 03:48:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (assignable_gen): ignore already erred names.
+
+ * parse.y (shadowing_lvar_gen): always make new block local variable
+ when shadowing outer local variable. [ruby-dev:31507]
+
Thu Aug 30 19:40:33 2007 NAKAMURA Usaku <usa@ruby-lang.org>
* regenc.h: check RUBY_EXTERN before including config.h and defines.h
diff --git a/bootstraptest/test_knownbug.rb b/bootstraptest/test_knownbug.rb
index ed9f6c1c41..382f027b34 100644
--- a/bootstraptest/test_knownbug.rb
+++ b/bootstraptest/test_knownbug.rb
@@ -3,16 +3,7 @@
# So all tests will cause failure.
#
-# massign
-assert_equal 'ok', %q{
- def m()
- yield :ng
- end
- r = :ok
- m {|(r)|}
- r
-}, '[ruby-dev:31507]'
-
+# catch/throw
assert_equal 'ok', %q{
begin
catch {|t| throw t, :ok }
diff --git a/bootstraptest/test_massign.rb b/bootstraptest/test_massign.rb
index c95c178721..0c73b71461 100644
--- a/bootstraptest/test_massign.rb
+++ b/bootstraptest/test_massign.rb
@@ -13,6 +13,12 @@ assert_equal '[1, 2]', %q{
ans
}
+assert_equal 'ok', %q{
+ r = :ok
+ :ng.tap {|(r)|}
+ r
+}, '[ruby-dev:31507]'
+
=begin
# generated by this script:
diff --git a/parse.y b/parse.y
index 08c4268e27..e1f74a1f9d 100644
--- a/parse.y
+++ b/parse.y
@@ -1023,7 +1023,7 @@ stmt : keyword_alias fitem {lex_state = EXPR_FNAME;} fitem
| primary_value '[' opt_call_args rbracket tOP_ASGN command_call
{
/*%%%*/
- NODE *args = $3;
+ NODE *args;
value_expr($6);
if (!$3) $3 = NEW_ZARRAY();
@@ -6677,7 +6677,7 @@ parser_yylex(struct parser_params *parser)
tokadd(c);
c = nextc();
if (parser_is_identchar()) {
- tokadd(c);
+ tokadd(c);
}
else {
pushback(c);
@@ -7253,6 +7253,7 @@ gettable_gen(struct parser_params *parser, ID id)
static NODE*
assignable_gen(struct parser_params *parser, ID id, NODE *val)
{
+ if (!id) return 0;
if (id == keyword_self) {
yyerror("Can't change the value of self");
}
@@ -7321,6 +7322,7 @@ shadowing_lvar_gen(struct parser_params *parser, ID name)
}
else if (dvar_defined(name) || local_id(name)) {
rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
+ vtable_add(lvtbl->vars, name);
}
}
else {
diff --git a/version.h b/version.h
index 76b06e56ae..4c0c84ea8b 100644
--- a/version.h
+++ b/version.h
@@ -1,7 +1,7 @@
#define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2007-08-30"
+#define RUBY_RELEASE_DATE "2007-08-31"
#define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20070830
+#define RUBY_RELEASE_CODE 20070831
#define RUBY_PATCHLEVEL 0
#define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 0
#define RUBY_RELEASE_YEAR 2007
#define RUBY_RELEASE_MONTH 8
-#define RUBY_RELEASE_DAY 30
+#define RUBY_RELEASE_DAY 31
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];