(solved) jrunscript: WindowsでloadするとEvaluatorException: unterminated string literal

分類が面倒なので Rhino タグを付けたものの Rhino本体 じゃなくて jrunscript…でもなくて jrunscriptのJavaScript組み込み関数 というのが正しいんでしょうか。。

// foo.js (UTF-8)
load("bar.js");
// bar.js (UTF-8)
println("集");

で foo.js を実行すると -encoding オプションを指定していても次のエラーが出る。

C:\Users\hoge>jrunscript -encoding UTF-8 foo.js
script error in file foo.js : sun.org.mozilla.javascript.internal.WrappedException: Wrapped javax.script.ScriptException
: sun.org.mozilla.javascript.internal.EvaluatorException: unterminated string literal (bar.js#1) in bar.js at line numbe
r 1 (#312) in  at line number 312

load がエンコーディングを考慮してないようだったので、

C:\Users\hoge>jrunscript
js> load.toString();

function load(str) {
    var stream = inStream(str);
    var bstream = new BufferedInputStream(stream);
    var reader = new BufferedReader(new InputStreamReader(bstream));
    var oldFilename = engine.get(engine.FILENAME);
    engine.put(engine.FILENAME, str);
    try {
        engine.eval(reader);
    }
    finally {
        engine.put(engine.FILENAME, oldFilename);
        streamClose(stream);
    }
}

次のようにエンコーディングを指定するようにした。

function _load(str, encoding) {
    // ...
    var reader = new BufferedReader(new InputStreamReader(bstream, encoding));
    // ...
}

// example
_load("bar.js", "UTF-8");

バージョン:

C:\Users\hoge>jrunscript -q
Language ECMAScript 1.8 implemention "Mozilla Rhino" 1.7 release 3 PRERELEASE