Bug #4886

autoload in instance_eval doesn't work

Added by Yui NARUSE almost 3 years ago. Updated almost 3 years ago.

[ruby-dev:43816]
Status:Closed
Priority:Normal
Assignee:Yui NARUSE
Category:core
Target version:1.9.3
ruby -v:ruby 1.9.3dev (2011-06-15 trunk 32096) [x86_64-freebsd8.2] Backport:

Description

autoload を instance_eval の中で使うとうまく動きません。

% ./ruby -e'instanceeval{autoload :R,"a";p R}'
-e:1:in block in <main>': uninitialized constant R (NameError)
from -e:1:in
instance
eval'
from -e:1:in `'

Associated revisions

Revision 32489
Added by Kenta Murata almost 3 years ago

  • load.c (rbfautoload): prevent to autoload for singleton classes. fixes [Bug #4886]
  • bootstraptest/test_autoload.rb: add tests for the above change.

History

#1 Updated by Kouji Takao almost 3 years ago

=begin

1.8系ではどうなっていたかと思って確認してみました。
以下のようにRを参照したときに"a"をロードしようとして例外が発生するのですね。

$ ruby -v -e 'instanceeval { autoload :R, "a"; p R }'
ruby 1.8.7 (2009-11-09 patchlevel 202) [i686-darwin9.8.0]
-e:1: no such file to load -- a (LoadError)
from -e:1:in `instance
eval'
from -e:1
=end

#2 Updated by Yui NARUSE almost 3 years ago

Kouji Takao wrote:

1.8系ではどうなっていたかと思って確認してみました。
以下のようにRを参照したときに"a"をロードしようとして例外が発生するのですね。

$ ruby -v -e 'instanceeval { autoload :R, "a"; p R }'
ruby 1.8.7 (2009-11-09 patchlevel 202) [i686-darwin9.8.0]
-e:1: no such file to load -- a (LoadError)
from -e:1:in `instance
eval'
from -e:1

はい、正確には a.rb または a.so (環境依存) ですが。
で、例えば a.rb が読み込みパスのどこかにあり、そこに R=1 とか書かれていた場合 1 が p で表示されます。
1.9.2 でもこの動作です。

現在の 1.9 だとそもそも読もうとすらしてませんね。

#3 Updated by Yui NARUSE almost 3 years ago

  • Target version set to 1.9.3

#4 Updated by Motohiro KOSAKI almost 3 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to Yui NARUSE

1.9.3を狙うなら Assigned に変更されるべき。報告の雰囲気からしてなるせさんは自分で直すつもりだと勝手にみなしてなるせさんにアサインします

#5 Updated by Kenta Murata almost 3 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r32489.
Yui, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • load.c (rbfautoload): prevent to autoload for singleton classes. fixes [Bug #4886]
  • bootstraptest/test_autoload.rb: add tests for the above change.

Also available in: Atom PDF