Visit Mozilla.org

JS CompileScript

出典: MDC

スクリプトを実行するためにコンパイルします。

目次

[編集] 構文

JSScript * JS_CompileScript(JSContext *cx, JSObject *obj,
    const char *bytes, size_t length, const char *filename,
    uintN lineno);

JSScript * JS_CompileUCScript(JSContext *cx, JSObject *obj,
    const jschar *chars, size_t length, const char *filename,
    uintN lineno);
Name Type Description
cx JSContext * ランタイムへのアクセスに用いるJavaScriptコンテキストへのポインタ

リクエストが必要。 (JS_THREADSAFE ビルドでは、呼び出し側はこの JSContext 上のリクエストでなければなりません。)

obj JSObject * スクリプトと関連付けるオブジェクト
source const char * or const jschar * コンパイル対象のスクリプト文字列
length size_t sourceの文字列長
filename const char * エラーメッセージ出力に利用されるスクリプトのファイル名またはそのURLを示す文字列
lineno uintN sourceの先頭行番号。エラーメッセージとして出力される行数に使われるもので、1以上の値を取ります。

[編集] 解説

JS_CompileScriptは、スクリプト文字列sourceをコンパイルする関数です。JS_CompileUCScriptはスクリプト文字列にUnicodeを引数に取る関数です。

スクリプトはJavaScriptオブジェクトobjと関連付けられます。引数bytesはスクリプト文字列、lengthは文字列長をそれぞれ取ります。

filenameはスクリプトのファイル名あるいはURLをを引数として取ります。ここで指定した情報は、コンパイルエラーが発生したときのエラーメッセージに利用されます。linenoも同様にエラーメッセージとして出力される行番号として利用されます。 スクリプトが巨大なファイルの一部でない場合は、lineno1に設定すればよいでしょう(基本的にファイルの先頭行は0でなく1で示します)。

コンパイルが成功したとき、JS_CompileScriptおよびJS_CompileUCScriptはコンパイルされたスクリプトへのポインタを返します。失敗したときはエラーメッセージを出力し、NULLを値として返します。

Warning sign
警告: コンパイルによってできたJSScriptの中には、コンパイル中に生成された文字列などのオブジェクトが含まれます。これらのオブジェクトは、即座にガベージコレクションされ消去される危険があります。ガベージコレクションからJSObjectを保護するために、呼び元はJS_NewScriptObjectを使う必要があります。この操作は、JS_Compile*を実行したら、他のJSAPIを呼ぶ前に即座に行わねばなりません。

スクリプト文字列を引数として与えるのではなく、外部ファイルから読み込ませる場合にはJS_CompileFileを代わりに用いてください。

[編集] 利用例

/* Sample program - execute a script repeatedly until an error occurs. */
JSScript *script;
JSObject *srcobj;

script = JS_CompileFile(cx, global, filename);
if (script == NULL)
    return JS_FALSE;

scrobj = JS_NewScriptObject(cx, script);
if (scrobj == NULL
    || !JS_AddNamedRoot(cx, &scrobj, "scrobj"))
    return JS_FALSE;

for (;;) {
    jsval result;

    if (!JS_ExecuteScript(cx, global, script, &result))
        break;
    JS_GC(cx);
}

JS_RemoveRoot(cx, &scrobj);

[編集] 関連項目

LXR で JS_CompileScript を ID 検索
LXR で JS_CompileUCScript を ID 検索

JS_CompileFile, JS_DecompileScript, JS_DestroyScript, JS_EvaluateScript, JS_ExecuteScript