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コンテキストへのポインタ
リクエストが必要。 ( |
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も同様にエラーメッセージとして出力される行番号として利用されます。 スクリプトが巨大なファイルの一部でない場合は、linenoを1に設定すればよいでしょう(基本的にファイルの先頭行は0でなく1で示します)。
コンパイルが成功したとき、JS_CompileScriptおよびJS_CompileUCScriptはコンパイルされたスクリプトへのポインタを返します。失敗したときはエラーメッセージを出力し、NULLを値として返します。
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
