現実逃避2

 face_for_charの戻り値が12になる事がわかった。しかし、face_for_charは半分Lispの世界に足を突っ込んでるので、片っ端からprintf、というこれまで使ってきた手段で調べることが出来ない。safe_debug_print関数を使って適当に出力してみると。rfont_defが

 [nil 0 [[nil nil nil nil nil "jisx0208*"] 54 54] [x jis fixed "" jisx0208\.1983-0 100 100 100 16 75-75-c-160(以下略)

 という感じになっていることがわかった。NILP (AREF (rfont_def, 0))が真になるので、face_id = face_for_font (f, font, face);が実行され、そこでface idが変わるようだ。(AREFはたぶんArray Refだろうなーと思うけど、確証はない。)
 ここから考えられる可能性としては、rfont_defの値がそもそもおかしいという場合(=fontset_fontの実行結果がおかしい場合)と、face_for_fontの結果がおかしい場合が考えられる。どの関数がどのように動作すべきであるのかといった点を考えるにはそろそろ頭が回らなくなってきたので、今日はこれでおしまい。