- 2007-01-13 (Sat) 17:12
- プログラミング
Windows 環境で Fortress 動かそうとしたら二回目の実行でこけることが判明.何が悪いのかとエラーメッセージを見てみたら,ライブラリの AST (FortressLibrary.jst) の読み込みに失敗しているらしい.まだまだ開発途中らしくライブラリのソースをパースした AST を *.jst に吐き出しておいて,次回以降の実行で再利用する仕様らしい.この*.jst には元のソースのファイル名も出力されるのだが,このファイル名が少々問題となっていた.
具体的には, Windows のファイル名には \ が含まれるため,パースに失敗する.解決としては \ をちゃんとエスケープすればいい.ライブラリの読み込みの処理を追っていくと
com.sun.fortress.interpreter.driver com.sun.fortress.interpreter.nodes
あたりのクラスが関係していて
Libraries#link -> Driver#writeJavaAst -> Printer#dumpSpan -> Span#appendTo -> SourceLoc#getFileName
となっている.SourceLoc#getFileName の返すファイル名を Span#appendTo が出力しているので,この部分でエスケープをいれてやればいいはず.ということで,
w.append("\""); // Need to add escapes to the file name w.append(begin.getFileName()); w.append("\""); w.append(",");
を
w.append("\""); // Need to add escapes to the file name w.append(begin.getFileName().replaceAll("\\\\", "\\\\\\\\")); w.append("\""); w.append(",");
にしてやってとりあえずの問題解決を図った.
- Newer: ことはじめ