[#24648] [Bug #1852] Enumerable's #hash Raises ArgumentError When Recursive Values are Present — Run Paint Run Run <redmine@...>

Bug #1852: Enumerable's #hash Raises ArgumentError When Recursive Values are Present

20 messages 2009/08/01
[#24649] Re: [Bug #1852] Enumerable's #hash Raises ArgumentError When Recursive Values are Present — Tanaka Akira <akr@...> 2009/08/01

In article <4a73e51b5a4f9_138119f2a982704e@redmine.ruby-lang.org>,

[#24652] Re: [Bug #1852] Enumerable's #hash Raises ArgumentError When Recursive Values are Present — Run Paint Run Run <runrun@...> 2009/08/01

> Is it valuable to implement such function?

[#24682] Re: [Bug #1852] Enumerable's #hash Raises ArgumentError When Recursive Values are Present — Tanaka Akira <akr@...> 2009/08/02

In article <67e307490908010125r6fa76654pa8e2224f714588fc@mail.gmail.com>,

[#24673] [Feature #1857] install *.h and *.inc — Roger Pack <redmine@...>

Feature #1857: install *.h and *.inc

21 messages 2009/08/01

[#24732] [Bug #1873] MatchData#[]: Omits All But Last Captures Corresponding to the Same Named Group — Run Paint Run Run <redmine@...>

Bug #1873: MatchData#[]: Omits All But Last Captures Corresponding to the Same Named Group

12 messages 2009/08/03

[#24775] [Feature #1889] Teach Onigurma Unicode 5.0 Character Properties — Run Paint Run Run <redmine@...>

Feature #1889: Teach Onigurma Unicode 5.0 Character Properties

30 messages 2009/08/05

[#24786] [Bug #1893] Recursive Enumerable#join is surprising — Jeremy Kemper <redmine@...>

Bug #1893: Recursive Enumerable#join is surprising

24 messages 2009/08/06
[#28422] [Bug #1893] Recursive Enumerable#join is surprising — Yusuke Endoh <redmine@...> 2010/03/02

Issue #1893 has been updated by Yusuke Endoh.

[#28438] Re: [Bug #1893] Recursive Enumerable#join is surprising — Yukihiro Matsumoto <matz@...> 2010/03/03

Hi,

[#24854] embedding ruby 1.9 frustration — Rolando Abarca <funkaster@...>

Hello,

12 messages 2009/08/10

[#24982] [Feature #1961] Kernel#__dir__ — Yutaka HARA <redmine@...>

Feature #1961: Kernel#__dir__

26 messages 2009/08/19
[#28898] [Feature #1961] Kernel#__dir__ — Roger Pack <redmine@...> 2010/03/23

Issue #1961 has been updated by Roger Pack.

[#28900] Re: [Feature #1961] Kernel#__dir__ — Kornelius Kalnbach <murphy@...> 2010/03/23

On 23.03.10 19:10, Roger Pack wrote:

[#25025] [Backport #1975] Backport Dir.mktmpdir — Kirk Haines <redmine@...>

Backport #1975: Backport Dir.mktmpdir

12 messages 2009/08/21

[#25041] Proposal: Simpler block format — Yehuda Katz <wycats@...>

I'd like to propose that we add the following syntax for procs in Ruby:

45 messages 2009/08/23
[#25046] Re: Proposal: Simpler block format — Caleb Clausen <caleb@...> 2009/08/23

Yehuda Katz wrote:

[#25049] Re: Proposal: Simpler block format — Yehuda Katz <wycats@...> 2009/08/23

On Sat, Aug 22, 2009 at 7:38 PM, Caleb Clausen <caleb@inforadical.net>wrote:

[#25058] Re: Proposal: Simpler block format — Yukihiro Matsumoto <matz@...> 2009/08/23

Hi,

[#25059] Re: Proposal: Simpler block format — Yehuda Katz <wycats@...> 2009/08/23

On Sun, Aug 23, 2009 at 3:33 PM, Yukihiro Matsumoto <matz@ruby-lang.org>wrote:

[#25063] Re: Proposal: Simpler block format — "David A. Black" <dblack@...> 2009/08/23

Hi --

[#25068] Re: Proposal: Simpler block format — brian ford <brixen@...> 2009/08/24

Hi,

[#25086] [Bug #1991] ruby should use twolevel namespace on OS X — Michal Suchanek <redmine@...>

Bug #1991: ruby should use twolevel namespace on OS X

12 messages 2009/08/24

[#25208] Module#prepend and Array#prepend — Yehuda Katz <wycats@...>

Matz,

23 messages 2009/08/30

[#25210] [Feature #2022] Patch for ruby-1.8.6 and openssl-1.0 — Jeroen van Meeuwen <redmine@...>

Feature #2022: Patch for ruby-1.8.6 and openssl-1.0

15 messages 2009/08/30

[#25220] [Bug #2026] String encodings are not supported by most of IO on Linux — Vit Ondruch <redmine@...>

Bug #2026: String encodings are not supported by most of IO on Linux

18 messages 2009/08/31

[ruby-core:25149] Re: Is this an intentional change in 1.9?

From: Rick DeNatale <rick.denatale@...>
Date: 2009-08-27 00:31:11 UTC
List: ruby-core #25149
On Wed, Aug 26, 2009 at 7:25 PM, Yukihiro Matsumoto<matz@ruby-lang.org> wrote:
> Hi,
>
> In message "Re: [ruby-core:25143] Is this an intentional change in 1.9?"
> n Thu, 27 Aug 2009 02:30:51 +0900, Rick DeNatale <rick.denatale@gmail.com> writes:
>
> |This seems like a 1.9 bug. Is it?
>
> I vaguely remember ko1 explained me about the change due to a YARV
> internal issue. e have to wait ko1 to determine it's bug or not.

I think it's a code generation issue, and also that it's important not
to change the semantics of a.x ||= value

First here's what's being generated for an instruction sequence:

$ ruby1.9 -e'puts VM::InstructionSequence.compile("obj=Object.new;a =
obj.x ||= 2").disassemble'
== disasm: <ISeq:<compiled>@<compiled>>=================================
local table (size: 3, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 3] obj        [ 2] a
0000 getinlinecache   <ic>, 7                                         (   1)
0003 getconstant      :Object
0005 setinlinecache   0
0007 send             :new, 0, nil, 0, <ic>
0013 setlocal         obj
0015 getlocal         obj
0017 dup
0018 send             :x, 0, nil, 0, <ic>
0024 dup
0025 branchif         38
0027 pop
0028 putobject        2
0030 send             :x=, 1, nil, 0, <ic>
0036 jump             40
0038 swap
0039 pop
0040 dup
0041 setlocal         a
0043 leave

In the case where obj.x returns a truthy value this code is clearly
evaluating to the return value of the setter and not the rhs.

I think that something like this would work  (I made the branch target
symbolic so I wouldn't need to count bytes.

     getinlinecache   <ic>, 7                                         (   1)
     getconstant      :Object
     setinlinecache   0
     send             :new, 0, nil, 0, <ic>
     setlocal         obj
     getlocal         obj
     dup
     send             :x, 0, nil, 0, <ic>
     dup
     branchif         skip
     pop
     putobject        2
# inserted instruction
     dupn             2           #duplicate receiver of x= and rhs
value stack now has obj 2 obj 2
# end inserted instruction
     send             :x=, 1, nil, 0, <ic>
# inserted instructions
     pop                           # discard result of send, stack now has obj 2
     swap                         # swap stack how has 2 obj
     pop                           # discard receiver of x= stack now
has rhs (2)
# end of inserted instructions
     jump             set
skip swap
set  pop
     dup
     setlocal         a
     leave

I'm assuming here that dup n 2 changes the top of the stack (stack
grows to the right so the rightmost item is the top

value 1 value 2

to

value 1 value 2 value 1 value 2

-- 
Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

In This Thread