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