2014年11月3日

Nightly で "@@iterator" が Symbol.iterator に変わりました (更新あり)

Bug 918828 で、これまで文字列の "@@iterator" を使用していた @@iterator プロパティが Symbol.iterator に変更されました。
この変更は Bug 1066322 が FIXED になるまで (つまり Symbol が有効になるまで) Nightly 限定となります。
[11/13 更新] FIXED になりました。Firefox 36 から Symbol 使えるようです。

これまでは、以下のようなコードを書くと動いていましたが、
var a = {
  "@@iterator": function*() {
    yield 1;
    yield 2;
  }
};
[...a];

この変更の後は、以下のように書き換える事で同じ動作をします。

var a = {
  [Symbol.iterator]: function*() {
    yield 1;
    yield 2;
  }
};
[...a];

Computed property を使用しない場合は、以下のようになります。

var a = {
};
a[Symbol.iterator] = function*() {
  yield 1;
  yield 2;
};
[...a];


しばらくは、アドオンや Firefox 本体のコードでは両方をサポートする必要があります。 Bug 918828 のパッチの中では以下のようなコードが多用されていました。

const JS_HAS_SYMBOLS = typeof Symbol === "function";
const ITERATOR_SYMBOL = JS_HAS_SYMBOLS ? Symbol.iterator : "@@iterator";

まとめると以下のようになります。

const JS_HAS_SYMBOLS = typeof Symbol === "function";
const ITERATOR_SYMBOL = JS_HAS_SYMBOLS ? Symbol.iterator : "@@iterator";
var a = {
  [ITERATOR_SYMBOL]: function*() {
    yield 1;
    yield 2;
  }
};
[...a];

2014年11月2日

git でファイルを削除したコミットを調べる

openLocationLastURL.jsm が消えてました の記事で、どのコミットがファイルを削除したかを調べた時の備忘録。

git では削除したファイルのログは通常のコマンドでは見る事ができません。

$ git log browser/modules/openLocationLastURL.jsm
fatal: ambiguous argument 'browser/modules/openLocationLastURL.jsm': unknown revision or path not in the working tree.

この場合、以下のように --follow オプションを付ける事で、削除したコミットを先頭にして、当該ファイルのログを見る事ができます。

$ git log --follow -- browser/modules/openLocationLastURL.jsm

openLocationLastURL.jsm が消えてました

全然気付かなかったけど、Firefox 29 の Australis の変更 (bug 953124) で openLocationLastURL.jsm が消え、一緒に chrome ウィンドウの gOpenLocationLastURL プロパティも消えてました。