このテンプレートは廃止されています。使用しないで下さい。
スクリプトを実行するためにコンパイルします。
構文
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
も同様にエラーメッセージとして出力される行番号として利用されます。 スクリプトが巨大なファイルの一部でない場合は、lineno
を 1
に設定すればよいでしょう(基本的にファイルの先頭行は 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);