Bug #5449 closed
nested constant opasign not working
Added by rkh (Konstantin Haase) over 13 years ago.
Updated over 12 years ago.
Description
=begin
This code works on 1.9:
Foo ||= 42
However, (({ ::Foo ||= 42 })) and
Foo ||= Module.new
Foo::Bar ||= 42
both raise a SyntaxError: constant re-assignment.
(Note: I had to use the (({...})) syntax so Redmine wouldn't turn ::Foo into a link)
=end
Files
I checked this just for my curiosity.
Foo ||= 42
does not work on ruby1.8,
::Foo = 42 # constant re-assignment
Foo = Foo || 42 # uninitialized constant
and these two statements raise exceptions on ruby1.9. IMHO, "Foo ||= 42" should raise an error on 1.9. I attached my poor patch for the purpose of reference.
Status changed from Open to Assigned
Assignee set to matz (Yukihiro Matsumoto)
Target version set to 2.0.0
Assignee changed from matz (Yukihiro Matsumoto) to nobu (Nobuyoshi Nakada)
matz said that it should not raise an error.
Status changed from Assigned to Closed
% Done changed from 0 to 100
This issue was solved with changeset r38585.
Konstantin, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
scoped constant op-assignment
node.h (NODE_OP_CDECL), compile.c (iseq_compile_each),
parse.y (stmt, arg): allow scoped constant op-assignment.
[ruby-core:40154] [Bug #5449 ]
Also available in: Atom
PDF
Like 0
Like 0 Like 0 Like 0 Like 0