[#5524] Division weirdness in 1.9 — "Florian Frank" <flori@...>
Hi,
[#5536] bug in variable assignment — Mauricio Fern疣dez <mfp@...>
Hi,
On Mon, Aug 08, 2005 at 11:36:22AM +0900, nobuyoshi nakada wrote:
hi,
Hi,
[#5552] Exceptions in threads all get converted to a TypeError — Paul van Tilburg <paul@...>
Hey all,
[#5563] Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...>
Lately, I've been thinking about the future of ruby
On 8/19/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:
--- Austin Ziegler <halostatue@gmail.com> wrote:
Just wanted to add a few things.
On 8/19/05, TRANS <transfire@gmail.com> wrote:
Hi --
--- "David A. Black" <dblack@wobblini.net> wrote:
On 8/20/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:
On 8/20/05, TRANS <transfire@gmail.com> wrote:
On 8/19/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:
--- Austin Ziegler <halostatue@gmail.com> wrote:
On 20 Aug 2005, at 02:05, Eric Mahurin wrote:
Eric Hodel wrote:
Eric Mahurin wrote:
Hi,
--- SASADA Koichi <ko1@atdot.net> wrote:
Hi,
--- SASADA Koichi <ko1@atdot.net> wrote:
[#5609] Pathname#walk for traversing path nodes (patch) — ES <ruby-ml@...>
Here is a small addition to Pathname against 1.9, probably suited
Evan Webb wrote:
In article <43094510.6090406@magical-cat.org>,
[#5651] File.extname edge case bug? — Daniel Berger <Daniel.Berger@...>
Hi all,
[#5662] Postgrey — Shugo Maeda <shugo@...>
Hi,
[#5676] uri test failures. (Re: [ruby-cvs] ruby/lib, ruby/lib/uri: Lovely RDOC patches from mathew (metaATpoboxDOTcom) on URI/* and getoptlong.rb) — Tanaka Akira <akr@...17n.org>
In article <20050824050801.5B4E0C671F@lithium.ruby-lang.org>,
[#5680] Problem with mkmf and spaces in directory names? — noreply@...
Bugs item #2308, was opened at 2005-08-25 13:42
[#5685] Wilderness Project — "Charles E. Thornton" <ruby-core@...>
OK - I see where ELTS_SHARED is used to implement COPY-ON-WRITE
Re: [BUG] bug in variable assignment
On Wed, Aug 10, 2005 at 10:40:15AM +0900, Yukihiro Matsumoto wrote:
> In message "Re: [BUG] bug in variable assignment"
> on Wed, 10 Aug 2005 09:52:12 +0900, Yukihiro Matsumoto <matz@ruby-lang.org> writes:
>
> |You shouldn't _fix_ this. Formal arguments to the anonymous function
> |would not modify the external variables even when they are used outside.
>
> Instead we should fix optional arguments and rest arguments NOT to
> modify outside variables.
I see, I picked the wrong semantics.
The above should also apply to block arguments then.
$ ./ruby -ve "b=1; ->(&b){}.call; p b"
ruby 1.9.0 (2005-08-10) [i686-linux]
nil
Index: parse.y
===================================================================
RCS file: /src/ruby/parse.y,v
retrieving revision 1.402
diff -p -u -r1.402 parse.y
--- parse.y 10 Aug 2005 01:39:23 -0000 1.402
+++ parse.y 10 Aug 2005 09:18:04 -0000
@@ -4205,7 +4205,15 @@ f_block_arg : blkarg_mark tIDENTIFIER
yyerror("block argument must be local variable");
else if (!dyna_in_block() && local_id($2))
yyerror("duplicated block argument name");
- $$ = dyna_in_block() ? assignable($2, 0) : NEW_BLOCK_ARG($2);
+
+ if (dyna_in_block()) {
+ shadowing_lvar($2);
+ dyna_var($2);
+ $$ = assignable($2, 0);
+ }
+ else {
+ $$ = NEW_BLOCK_ARG($2);
+ }
/*%
$$ = $2;
%*/
Index: test/ruby/test_lambda.rb
===================================================================
RCS file: /src/ruby/test/ruby/test_lambda.rb,v
retrieving revision 1.1
diff -p -u -r1.1 test_lambda.rb
--- test/ruby/test_lambda.rb 8 Aug 2005 23:24:29 -0000 1.1
+++ test/ruby/test_lambda.rb 10 Aug 2005 09:18:04 -0000
@@ -36,9 +36,9 @@ class TestLambdaParameters < Test::Unit:
assert_equal(nil, ->(&b){ b }.call)
foo { puts "bogus block " }
assert_equal(1, ->(&b){ b.call }.call { 1 })
- b = nil
+ b = 2
assert_equal(1, ->(&b){ b.call }.call { 1 })
- assert_not_nil(b)
+ assert_equal(2, b)
end
def foo
@@ -50,4 +50,16 @@ class TestLambdaParameters < Test::Unit:
2.times ->(_){ a += 1 }
assert_equal(a, 2)
end
+
+ def test_var_shadowing
+ a = 0
+ _a, _b, _c, _d, _e, _f = lambda do
+ b = c = d = e = 0
+ f = ->(a, b, c=1, *d, &e){ }
+ [->(){a}, ->(){b}, ->(){c}, ->(){d}, ->(){e}, f]
+ end.call
+ assert_equal([0,0,0,0,0], [_a[], _b[], _c[], _d[], _e[]])
+ _f.call(1,2,3,4,5) { }
+ assert_equal([0,0,0,0,0], [_a[], _b[], _c[], _d[], _e[]])
+ end
end
$ ./ruby -we "b=1; ->(&b){}.call; p b"
-e:1: warning: shadowing outer local variable - b
1
$ ./ruby -w test/ruby/test_lambda.rb
test/ruby/test_lambda.rb:40: warning: shadowing outer local variable - b
test/ruby/test_lambda.rb:58: warning: shadowing outer local variable - a
test/ruby/test_lambda.rb:58: warning: shadowing outer local variable - b
test/ruby/test_lambda.rb:58: warning: shadowing outer local variable - c
test/ruby/test_lambda.rb:58: warning: shadowing outer local variable - d
test/ruby/test_lambda.rb:58: warning: shadowing outer local variable - e
Loaded suite test/ruby/test_lambda
Started
.......
Finished in 0.008198 seconds.
7 tests, 26 assertions, 0 failures, 0 errors
--
Mauricio Fernandez