JS CompileScript

このテンプレートは廃止されています。使用しないで下さい。

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

構文

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コンテキストへのポインタPointer to a JS context from which to derive runtime information. リクエストが必要。 (JS_THREADSAFE ビルドでは、呼び出し側はこの JSContext 上のリクエストでなければなりません。)
obj JSObject * スクリプトと関連付けるオブジェクトObject with which the script is associated.
source const char * or const jschar * コンパイル対象のスクリプト文字列String containing the script to compile.
length size_t sourceの文字列長The length, in characters, of <code>source</code>.
filename const char * エラーメッセージ出力に利用されるスクリプトのファイル名またはそのURLを示す文字列Name of file or URL containing the function. Used to report filename or URL in error messages.
lineno uintN sourceの先頭行番号。エラーメッセージとして出力される行数に使われるもので、1以上の値を取ります。Line number of the first line of <code>source</code>. Must be greater than zero. Used to report the offending line in the file or URL if an error occurs.

解説

JS_CompileScript は、スクリプト文字列 source をコンパイルする関数です。JS_CompileUCScript はスクリプト文字列にUnicodeを引数に取る関数です。 <code>JS_CompileScript</code> compiles a script, <code>source</code>, for execution. <code>JS_CompileUCScript</code> is the Unicode version of the function.

スクリプトは JavaScript オブジェクトobjと関連付けられます。引数 bytes はスクリプト文字列、length は文字列長をそれぞれ取ります。 The script is associated with a JS object. <code>bytes</code> is the string containing the text of the script. <code>length</code> indicates the size of the text version of the script in bytes.

filename はスクリプトのファイル名あるいは URL を引数として取ります。ここで指定した情報は、コンパイルエラーが発生したときのエラーメッセージに利用されます。lineno も同様にエラーメッセージとして出力される行番号として利用されます。 スクリプトが巨大なファイルの一部でない場合は、lineno1 に設定すればよいでしょう(基本的にファイルの先頭行は 0 でなく1で示します)。 <code>filename</code> is the name of the file (or URL) containing the script. This information is included in error messages if an error occurs during compilation. Similarly, <code>lineno</code> is used to report the line number of the script or file where an error occurred during compilation. If the script is not part of a larger document, <code>lineno</code> should be <code>1</code> (as the first line of a file is universally considered to be line <code>1</code>, not line <code>0</code>).

コンパイルが成功したとき、JS_CompileScript および JS_CompileUCScript はコンパイルされたスクリプトへのポインタを返します。失敗したときはエラーメッセージを出力し、NULL を値として返します。 On success, <code>JS_CompileScript</code> and <code>JS_CompileUCScript</code> return a pointer to the newly compiled script. Otherwise, they report an error and return <code>NULL</code>.

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

スクリプト文字列を引数として与えるのではなく、外部ファイルから読み込ませる場合には JS_CompileFile を代わりに用いてください。 To compile a script from an external file source rather than passing the actual script as an argument, use <code>JS_CompileFile</code> instead of <code>JS_CompileScript</code>.

利用例

/* 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);

関連項目

Document Tags and Contributors

Contributors to this page: ethertank, fscholz, Norihiro
最終更新者: ethertank,