Visit Mozilla.org

JS NewContext

出典: MDC

新たなJavaScriptコンテキストを生成します。

目次

[編集] 構文

JSContext * JS_NewContext(JSRuntime *rt, size_t stackchunksize);
Name Type Description
rt JSRuntime * コンテキストの親となるランタイムを指定します。JavaScriptのオブジェクト、関数、文字列、数値はJSRuntime内のコンテキスト内で共有されますが、JSRuntimeをまたぐことはありません。
stackchunksize size_t

各スタック領域のサイズをバイトで指定します。標準的には8192が適切な値であり、大抵の場合において調節すべきでないパラメータです。

[編集] 説明

スクリプトの実行および値の保持に利用するコンテキストを新規に生成する関数です。各スクリプトは独自のコンテキスト上で実行され、各コンテキストは特定のJSRuntimeオブジェクトrtと関連づけられています。

JS_NewContextは、成功したとき新たなコンテキストへのポインタを返します。失敗したときはNULLを返します。

この関数の呼び元は、コンテキストを使い終わったらJS_DestroyContextを実行しなければなりません。JSRuntimeを解放する前に、そのJSContextをすべて解放する必要があります。

JS_THREADSAFEを有効にしたビルドでは、あるJSContextを同時にアクセスできるスレッドは一つだけです。新規のJSContextは、初期状態で呼び元のスレッドと関連付けられます。コンテキストがあるスレッドと関連付けられている間は、他のスレッドからそれを利用したり解放することはできません。JSContextを別のスレッドに移動する場合は、JS_ClearContextThreadJS_SetContextThreadを利用してください。

新たに生成したJSContextは、初期状態においてグローバルオブジェクトを持ちません。

[編集] 注記

一度生成されたコンテキストは異なるスクリプトやJSAPI呼び出しのために複数回利用される可能性があります。具体的には、Webブラウザが各HTMLに対応する独立したコンテキストを生成したときに、ページ内のすべてのスクリプトは同じコンテキストを用いて実行されるといったシナリオが考えられます。

新規コンテキストは、ObjectDateArrayといった標準的なグローバルオブジェクトを一切保持していません。それらを利用するには、JS_InitStandardClassesを呼び出す必要があります。JSAPIを利用するアプリケーションで独自の関数やクラスを提供したい場合には、JS_GetGlobalObjectを使ってそのコンテキストのグローバルオブジェクトを取得し、JS_DefineFunctionsおよびJS_InitClassをそれに適用することで独自のグローバル関数やクラスをコンテキストに追加できます。

stackchunksizeは、JavaScriptのスタックサイズを調節するものではありません(JSAPIでは、スタック長を調節するインタフェースを提供していません)。stackchunksizeに大きい値を設定するのは誤った方法です。DEBUGビルドにおいて、stackchunksizeを大きくすると性能が著しく劣化します。一般的には8192が推奨されます。

[編集] 関連項目

Groups Functions
Documents LXR ID Search
Entries JS_ContextIterator,

JS_DestroyContext, JS_SetContextCallback