Spidermonkeyのユーザーガイドによると
https://developer.mozilla.org/En/SpiderMonkey/JSAPI_User_Guide
... jsval 自体は、ガベージ コレクタから参照先を保護しません...
このステートメントについての私の理解では、たとえば JS_NewStringCopyZ() によって JSString を作成すると、返される値はいつでも gc できるということです。例えば
JSString *str=JS_NewStringCopyZ(cx, "hello world");
JS_GC(cx);
//..now my "hello world" JSString is gone
では、上記のstrが gc されないようにするにはどうすればよいでしょうか? JSNative 関数の開始時に呼び出せる JS_EnterLocalRootScope () 関数があることに気付きました。残念ながら、現在は廃止されています。それでは、gcを防ぐ適切な方法は何ですか?