From: Tanaka Akira Date: 2010-08-07T09:40:44+09:00 Subject: [ruby-dev:41953] [bug:trunk] call File.lchmod via rb_funcall [BUG] vm_call0: unsupported method type (7) unimplemented method を rb_funcall で呼び出すと [BUG] になるようです。 pathname で Pathname#lchmod を実装するのに File.lchmod を呼び出そうとして rb_funcall(rb_cFile, rb_intern("lchmod"), 2, mode, get_strpath(self)) としたら、File.lchmod が unimplemented method な GNU/Linux では、以下のように [BUG] vm_call0: unsupported method type (7) となりました。 % ./ruby -rpathname -e 'Pathname("foo").lchmod(nil)' -e:1: [BUG] vm_call0: unsupported method type (7) ruby 1.9.3dev (2010-08-07 trunk 28891) [i686-linux] -- control frame ---------- c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC :lchmod c:0003 p:0018 s:0006 b:0006 l:000ff4 d:0021ec EVAL -e:1 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH c:0001 p:0000 s:0002 b:0002 l:000ff4 d:000ff4 TOP --------------------------- -- Ruby level backtrace information ---------------------------------------- -e:1:in `
' -e:1:in `lchmod' -- C level backtrace information ------------------------------------------- ./ruby [0x8155332] ./ruby [0x818a7cf] ./ruby(rb_bug+0x36) [0x818a82a] ./ruby [0x814d630] ./ruby [0x814e404] ./ruby [0x814e357] ./ruby(rb_funcall+0xa2) [0x814e4ae] /tmp/o0/lib/ruby/1.9.1/i686-linux/pathname.so [0xb77c68da] ./ruby [0x814a426] ./ruby [0x814a2c9] ./ruby [0x814989d] ./ruby [0x814548a] ./ruby [0x81526b6] ./ruby [0x8152e8f] ./ruby [0x805b262] ./ruby(ruby_exec_node+0x1c) [0x805b36b] ./ruby(ruby_run_node+0x3b) [0x805b33f] ./ruby [0x8059d88] /lib/i686/cmov/libc.so.6(__libc_start_main+0xe5) [0xb75f0455] ./ruby [0x8059c81] [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html zsh: abort ./ruby -rpathname -e 'Pathname("foo").lchmod(nil)' なお、File.lchmod を Ruby から呼び出すのは問題なく可能です。 % ./ruby -e 'File.lchmod(nil, "foo")' -e:1:in `lchmod': lchmod() function is unimplemented on this machine (NotImplementedError) from -e:1:in `
' -- [田中 哲][たなか あきら][Tanaka Akira]