フォーチュンサモナーズ
«前の日記(2008-01-05) 最新 次の日記(2008-01-09)» 編集

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|08|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2008-01-06

_ [ruby] 影舞の 1.9.0 対応 このエントリーを含むブックマーク

ふと思い立って影舞の CVS HEAD を 1.9.0 で動作するようにコード修正しています。

現在の進捗は testall.rb が 167 tests, 251 assertions, 17 failures, 17 errors

$stdout.binmode すると erb のコードを eval したときに transcoding not supported (from EUC-JP to ASCII-8BIT) と言われる罠に長らくはまってました。他にも影舞はメール周りで日本語処理しているので、m17n の影響が大きいですね。

2008/01/07 追記

167 tests, 313 assertions, 30 failures, 0 errors

まで進みました。残りは fold とメール周りですね。

_ [ruby] binmode で文句を言われる件 このエントリーを含むブックマーク

以下で再現しました。この挙動が正しいのかそうでないのかは不明。。。

$ ruby19 -v -e 'p "".force_encoding("euc-jp")'
ruby 1.9.0 (2007-12-25 revision 0) [i686-linux]
""
 
$ ruby19 -v -e 'STDOUT.binmode; p "".force_encoding("euc-jp")'
ruby 1.9.0 (2007-12-25 revision 0) [i686-linux]
-e:1:in `encode': transcoding not supported (from EUC-JP to ASCII-8BIT) (ArgumentError)
        from -e:1:in `write'
        from -e:1:in `p'
        from -e:1:in `
'

_ [ruby] inspect を private にすると BUG で落ちる件 このエントリーを含むブックマーク

影舞の XMLMessageScanner が parse 後になぜか落ちるので辿っていったところ、XMLMessageScanner が継承している XMLScanner の PrivateArray が inspect メソッドを private にしていたからと判明。これは処理系の問題ですね。

$ ruby18 -v -e 'class A; private :inspect; end; A.new.inspect'
ruby 1.8.6 (2007-12-03 patchlevel 113) [i686-linux]
-e:1: private method `inspect' called for #<A:0xb7c92cc0> (NoMethodError)
 
$ ruby19 -v -e 'class A; private :inspect; end; A.new.inspect' 
ruby 1.9.0 (2007-12-25 revision 0) [i686-linux]
-e:1:in `<main>'<dummy toplevel>:17: [BUG] unsupported: vm_call0(NODE_ZSUPER)
ruby 1.9.0 (2007-12-25 revision 0) [i686-linux]
 
-- control frame ----------
c:0004 p:---- s:0008 b:0008 l:000007 d:000007 CFUNC  :to_str
c:0003 p:---- s:0006 b:0006 l:000005 d:000005 CFUNC  :to_s
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 CFUNC  :message
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP    <dummy toplevel>:17
---------------------------
DBG> : ":0:in `to_s'"
DBG> : ":0:in `message'"
-- backtrace of native function call (Use addr2line) --
0xb7f6163d
-------------------------------------------------------
アボートしました

_ [ruby] 継承と private と alias と再定義の合わせ技でメソッドが見えなくなる件 このエントリーを含むブックマーク

これも xmlscan で発症。説明が難しいのですが、親クラスから継承したメソッドを private にし、さらに alias をして、かつ再定義をすると alias した新しい名前で呼べなくなります。コードだと以下の通り。

class Parent
  def foo
    puts 'parent foo'
  end
end
 
class Child < Parent
  private :foo
  alias orig_foo foo
  def bar
    orig_foo
  end
  def foo
    puts 'child foo'
  end
end
 
Child.new.bar

実行結果。

$ ruby18 -v 1.rb
ruby 1.8.6 (2007-12-03 patchlevel 113) [i686-linux]
parent foo
 
$ ruby19 -v 1.rb
ruby 1.9.0 (2007-12-25 revision 0) [i686-linux]
1.rb:11:in `bar': undefined local variable or method `orig_foo' for #<Child:0xb7ae0800> (NameError)
        from 1.rb:18:in `<main>'

あんまり private とか public とかを気にしないので、自分のコードだったら発見できなかったですねえ。

[]

最近のコメント:

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).