Bug #5449
closed
nested constant opasign not working
Added by rkh (Konstantin Haase) about 13 years ago.
Updated almost 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
Like0
Like0Like0Like0Like0