2007年 12月 06日

Rhino memo

なんか、Rhino 上で setTimeout エミュレートしてテストしようとおもったら、そもそも言語的な部分の非互換を踏んでだめすぎる……

$ rhino
js> a = undefined || 1
true <= expect 1
js> a
true
js> a = undefined || 0
js> uneval(a) // (undefined は表示されないっぽいので uneval)
undefined <= expect 0
js> undefined instanceof Object
js: "<stdin>", line 1: The undefined value has no properties. <= expect false

あと Rhino のバージョンってどうやってみるんだろ。apt-cache show rhino すると

Version: 1.6.R1-0.0ubuntu3

だけど、これってめっちゃ古くて実は上の問題は新しいのだと解決していたりするのかな

setTimeout のエミュレートはよくわからんけど spawn と sync つかってかいた。けど、べつに使わなくていいよなと今読みなおしておもった……

http://coderepos.org/share/browser/lang/javascript/jsdeferred/trunk/test-rhino.js?rev=2673#L94

最新にしたらいけた……sudo apt-get remove rhino

$ wget ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_6R7.zip
$ unzip rhino1_6R7.zip
$ cp js.jar ~/bin
$ cd ~/bin
$ cat rhino
#!/bin/sh

if [ -z "$JAVA" ]; then
  if [ -n "$JAVA_HOME" ]; then
    JAVA="$JAVA_HOME/bin/java"
  else
    JAVA=/usr/bin/java
  fi
fi

"$JAVA" -jar ~/bin/js.jar "$@"