Spidermonkey のバグ?


すみません。大嘘を書きました。このプログラムを通さないのは、Spidermonkey だけでした。Rhino と Firefox は大丈夫です。ということで、タイトルからRhino と Firefox を削除しました。ごめんなさい。
—–
以下の短い JavaScript のプログラムを見て下さい。

(function () {
var Array = [];
return function () { return Object; };
})();

何も面白いことをしないプログラムです。%%真面目に確認していないけれども、たぶん Safari, Chrome では問題ないけれども、Mozilla 系列だと全滅します。%%真面目に確認したところ、Spidermonkey のみでエラーが再現しました。((Rhino と Firefox も類似のエラーでこけるはずなので、再調査の上、報告します。))

たとえば、Spidermonkey でこれを実行すると以下のわけのわからないエラーを出力します。

TypeError: Array is not a constructor

で、以下のように変更するとこのエラーは消えます。

– Array という名前の変数を別な無難なもの、たとえば array に変更する。
– 3行目の関数の本体から組込みのオブジェクト名を除去する。たとえば、return Object のかわりに return Array とするのは大丈夫です。以下がエラーが消える例です。

(function () {
var Array = [];
})();

(function () { return Object; })();

ブロックのなかで組込みのオブジェクトと同名の変数を宣言し、そのブロックで別の組込みのオブジェクトを参照しているとエラーになるような気がします。

ちなみに ECMA では、組込みオブジェクトの名前は予約語ではないようです。

あまり詳しくないので自信を持って言えないのだけど、バグだよね?バグ?よく知られた話なんですか?

Spidermonkey のバグ?」への6件のフィードバック

  1. ひょっとして tracemonkey になって直ったのかも?spidermonkey も直ってくれるといいな。というか、tracemonkey の CUI 版があればいいのか。もしかしてある?

    • ありがとう!SpiderMonkey に皮をかぶせて拡張しやすくしたのかな。きっと Mac OS X でも動くんだろうね。ライブラリの動的ロードではまるかな?これは使えそう。

  2. ちょっとドキュメントが不明瞭なんだけど、最新版ではSpiderMonkeyではなく TraceMonkeyを使っているようです。

    • おぉ、そうなの!それはますます素晴しい。さて何を作ろう。

コメントは受け付けていません。