mozilla の JavaScript は実装上 lvalue-return できる
lvalue-return とは
$file = "hoge.pl"; substr($file, 5) = "js"; print "$file\n"; # hoge.js
左辺値に関数コールがくる形
JavaScript は lvalue-return できる。
SpiderMonkey の js コマンドでこういう感じ
$ js js> it.item(1) = 1; 1 js> it.item(1)++; 1 js> it.item(1); 2
しかし
lvalue-return できる関数はネイティブからしか作ることができない。
しかも、ブラウザに実装されてる関数で lvalue-return できるものはない。
ので、使うことはほとんどなさそう。
lvalue-return の実装方法
JSAPI にある JS_SetCallReturnValue2 関数を使う
// 例 js.c の it.item の実装 static JSBool its_item(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { *rval = OBJECT_TO_JSVAL(obj); if (argc != 0) JS_SetCallReturnValue2(cx, argv[0]); return JS_TRUE; }
使ってみたぃょぅ><
ちなみにまだ実装例はあまりない
http://www.google.com/codesearch?q=JS_SetCallReturnValue2&btnG=Search+Code