## Tcl9.0.3/Tk9.0.3 Documentation > Tcl C API > Eval

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx, Tcl_GlobalEval, Tcl_GlobalEvalObj, Tcl_VarEval — Tcl 記述譜を実行する execute Tcl scripts
  SYNOPSIS
    #include <tcl.h>
    int
    Tcl_EvalObjEx(interp, objPtr, flags)
    int
    Tcl_EvalFile(interp, fileName)
    int
    Tcl_EvalObjv(interp, objc, objv, flags)
    int
    Tcl_Eval(interp, script)
    int
    Tcl_EvalEx(interp, script, numBytes, flags)
    int
    Tcl_GlobalEval(interp, script)
    int
    Tcl_GlobalEvalObj(interp, objPtr)
    int
    Tcl_VarEval(interp, part, part, ... (char *)NULL)
  引数 ARGUMENTS
    Tcl_Interp *interp (入力in)
    Tcl_Obj *objPtr (入力in)
    int flags (入力in)
    const char *fileName (入力in)
    Tcl_Size objc (入力in)
    Tcl_Obj **objv (入力in)
    int numBytes (入力in)
    const char *script (入力in)
    const char *part (入力in)
  説明 DESCRIPTION
  FLAG BITS
    TCL_EVAL_DIRECT
    TCL_EVAL_GLOBAL
  その他の詳細 MISCELLANEOUS DETAILS
  参照回数管理 REFERENCE COUNT MANAGEMENT
  KEYWORDS

### NAME

Tcl_EvalObjEx, Tcl_EvalFile, Tcl_EvalObjv, Tcl_Eval, Tcl_EvalEx, Tcl_GlobalEval, Tcl_GlobalEvalObj, Tcl_VarEval — Tcl 記述譜を実行する execute Tcl scripts

### SYNOPSIS

#include <tcl.h>
int
Tcl_EvalObjEx(interp, objPtr, flags)
int
Tcl_EvalFile(interp, fileName)
int
Tcl_EvalObjv(interp, objc, objv, flags)
int
Tcl_Eval(interp, script)
int
Tcl_EvalEx(interp, script, numBytes, flags)
int
Tcl_GlobalEval(interp, script)
int
Tcl_GlobalEvalObj(interp, objPtr)
int
Tcl_VarEval(interp, part, part, ... (char *)NULL)

### 引数 ARGUMENTS

Tcl_Interp *interp (入力in)
  その中の記述譜を実行すべき解釈実行機能｡解釈実行機能の結果は､結果又は記述譜からの不都合伝言文を保有する為に修正される｡　 Interpreter in which to execute the script. The interpreter's result is modified to hold the result or error message from the script.

Tcl_Obj *objPtr (入力in)
  実行すべき記述譜を含む Tcl 値｡　　 A Tcl value containing the script to execute.

int flags (入力in)
  追加指定項目を指し示す旗印ビットの論理和組合わせ｡現在 TCL_EVAL_GLOBAL と TCL_EVAL_DIRECT が運営されている｡　 OR'ed combination of flag bits that specify additional options. TCL_EVAL_GLOBAL and TCL_EVAL_DIRECT are currently supported.

const char *fileName (入力in)
  Tcl 記述譜を含むファイルの名前｡　 Name of a file containing a Tcl script.

Tcl_Size objc (入力in)
  objv によって指される配列内の値の個数､これは命令内の単語の個数でもある｡　 The number of values in the array pointed to by objv; this is also the number of words in the command.

Tcl_Obj **objv (入力in)
  値を指す配列を指す; それぞれの値は実行すべき命令内の一つの単語の値を保有する｡　 Points to an array of pointers to values; each value holds the value of a single word in the command to execute.

int numBytes (入力in)
  記述譜 script 内のバイトの個数､どれもヌル終端文字は含まない｡もし -1 の場合､最初にヌル･バイトが使用された所迄の全ての文字｡　 The number of bytes in script, not including any null terminating character. If -1, then all characters up to the first null byte are used.

const char *script (入力in)
  実行すべき記述譜(末尾にヌル添付､且つUTF-8)の第一バイト｡ Points to first byte of script to execute (null-terminated and UTF-8).

const char *part (入力in)
  Tcl 記述譜の文字列形成部分｡　 String forming part of a Tcl script.

### 説明 DESCRIPTION

ここで述べられた手続函数は種々の形式で Tcl 記述譜を実行する為に起動される｡Tcl_EvalObjEx は核の手続函数であり多くの他のものから使われる｡それは objPtr 内に保存された記述譜内の命令を不都合が生じるか記述譜の末尾に到達する迄実行する｡初めに objPtr が実行される時､その命令はバイト符号命令に言語翻訳され､実行される｡バイト符号命令は objPtr に保存されるので将来再度評価される時は言語翻訳の段階が飛越しされる｡ 　　　 The procedures described here are invoked to execute Tcl scripts in various forms. Tcl_EvalObjEx is the core procedure and is used by many of the others. It executes the commands in the script stored in objPtr until either an error occurs or the end of the script is reached. If this is the first time objPtr has been executed, its commands are compiled into bytecode instructions which are then executed. The bytecodes are saved in objPtr so that the compilation step can be skipped if the value is evaluated again in the future.

Tcl_EvalObjEx (及び､ここで記述された全ての他の手続函数)の返り値は Tcl の完了符号であって､ TCL_OK か TCL_ERROR か TCL_RETURN か TCL_BREAK か TCL_CONTINUE かの内の一つか､或は､拡張に由来する何か他の整数値も可能である｡更に､結果値か不都合伝言文が interp 内の結果に残される; それは Tcl_GetObjResult を使って取出し得る｡ 　　　 The return value from Tcl_EvalObjEx (and all the other procedures described here) is a Tcl completion code with one of the values TCL_OK, TCL_ERROR, TCL_RETURN, TCL_BREAK, or TCL_CONTINUE, or possibly some other integer value originating in an extension. In addition, a result value or error message is left in interp's result; it can be retrieved using Tcl_GetObjResult.

Tcl_EvalFile は fileName によって与えられたファイルを読み､その内容を Tcl 記述譜として評価する｡それは Tcl_EvalObjEx と同じ情報を返す｡もしファイルが読めない場合何故ファイルが読めないかを記述する為に､ Tcl 不都合が返される｡ 全てのOSに関してフィル末尾記号は “\x1A” (^Z) である｡もし文字列比較のための符号命令内に “^Z” を要求する場合､ “\x1A” を使うことができる､それは安全に Tcl 解釈実行機能により “^Z” に置換されることになる｡ Tcl_EvalFile reads the file given by fileName and evaluates its contents as a Tcl script. It returns the same information as Tcl_EvalObjEx. If the file could not be read then a Tcl error is returned to describe why the file could not be read. The eofchar for files is “\x1A” (^Z) for all platforms. If you require a “^Z” in code for string comparison, you can use “\x1A”, which will be safely substituted by the Tcl interpreter into “^Z”.

Tcl_EvalObjv は記述譜の代りに一つの予備解析された命令を実行する｡ objc と objv 引数は Tcl 命令の為の語の値を含む､ objv 内にそれぞれの値の一つの語｡ Tcl_EvalObjv は命令を評価し､完了符号と Tcl_EvalObjEx の様な結果とを返す｡Tcl_EvalObjv の呼出し側は objv の要素の参照回数を管理する必要があり､Tcl_EvalObjv が帰る迄その値が適正であることを保証している｡ Tcl_EvalObjv executes a single preparsed command instead of a script. The objc and objv arguments contain the values of the words for the Tcl command, one word in each value in objv. Tcl_EvalObjv evaluates the command and returns a completion code and result just like Tcl_EvalObjEx. The caller of Tcl_EvalObjv has to manage the reference count of the elements of objv, insuring that the values are valid until Tcl_EvalObjv returns.

Tcl_Eval は Tcl_EvalObjEx に似ているが実行されるべき記述譜は対象としてではなく文字列として供給され､言語翻訳も生じない｡組合せが UTF-8 特殊符号かもしれない上位 ASCII 文字を含む可能性が判る時は､文字列は Tcl_ExternalToUtfDString か Tcl_ExternalToUtf によって変換された適切な UTF-8 文字列であるべきである｡文字列は､言語翻訳してバイト符号命令を実行する代りに､直接解析され実行される( Tcl_EvalObjv を使って )｡記述譜が再度実行されることはないことが判っている状況では Tcl_Eval の方が Tcl_EvalObjEx より速いかもしれない｡Tcl_Eval は完了符号と Tcl_EvalObjEx の様な結果を返す｡ Tcl_Eval is similar to Tcl_EvalObjEx except that the script to be executed is supplied as a string instead of a value and no compilation occurs. The string should be a proper UTF-8 string as converted by Tcl_ExternalToUtfDString or Tcl_ExternalToUtf when it is known to possibly contain upper ASCII characters whose possible combinations might be a UTF-8 special code. The string is parsed and executed directly (using Tcl_EvalObjv) instead of compiling it and executing the bytecodes. In situations where it is known that the script will never be executed again, Tcl_Eval may be faster than Tcl_EvalObjEx. Tcl_Eval returns a completion code and result just like Tcl_EvalObjEx.

Tcl_EvalEx は Tcl_Eval の拡張版であり､追加的に numBytes と flags 引数を取る｡上に述べた効率の理由で一般には Tcl_Eval よりも Tcl_EvalEx が好まれる｡ Tcl_EvalEx is an extended version of Tcl_Eval that takes additional arguments numBytes and flags.

Tcl_GlobalEval と Tcl_GlobalEvalObj は古い手続函数で今は非推奨になっている｡ Tcl_EvalEx と Tcl_EvalObjEx に似ているが､記述譜は大域名前空間内で評価され､その変数文脈は大域変数のみである(どの活性な Tcl 手続函数も無視する)｡これ等の函数は TCL_EVAL_GLOBAL 旗印の使用と等価である(下を参照されたい)｡ Tcl_GlobalEval and Tcl_GlobalEvalObj are older procedures that are now deprecated. They are similar to Tcl_EvalEx and Tcl_EvalObjEx except that the script is evaluated in the global namespace and its variable context consists of global variables only (it ignores any Tcl procedures that are active). These functions are equivalent to using the TCL_EVAL_GLOBAL flag (see below).

Tcl_VarEvalは､どの様な長さの､どの様な個数の文字列引数も採り､それらを一つの文字列に連結し､次に､Tcl命令としてその文字列を実行する為に､Tcl_VarEvalを呼出す｡それは命令の結果を返し､亦､Tcl_VarEvalと同じ方法で解釈実行機能の結果を修正する｡Tcl_VarEvalへの最後の引数は､引数の末尾を指し示す為に(char *)NULLでなければならない｡ Tcl_VarEval takes any number of string arguments of any length, concatenates them into a single string, then calls Tcl_Eval to execute that string as a Tcl command. It returns the result of the command and also modifies the interpreter result in the same way as Tcl_Eval. The last argument to Tcl_VarEval must be (char *)NULL to indicate the end of arguments.

### FLAG BITS

次の値のどのような論理和の組み合わせも Tcl_EvalObjEx の様な手続函数への flags 引数として使用され得る: 　 Any OR'ed combination of the following values may be used for the flags argument to procedures such as Tcl_EvalObjEx:

TCL_EVAL_DIRECT
  この旗印は Tcl_EvalObjEx のみで使われ､他の手続函数では無視される｡このビットが設定されると記述譜はバイト符号には言語翻訳されない; 代りに､ Tcl_EvalEx が行っている如く直接実行される｡この TCL_EVAL_DIRECT 旗印は対象の内容が直ぐに変更されようとしバイト符号命令は後には再実行では使用されない状況で便利である｡この場合､記述譜の直接実行の方が速い｡ 　　　 This flag is only used by Tcl_EvalObjEx; it is ignored by other procedures. If this flag bit is set, the script is not compiled to bytecodes; instead it is executed directly as is done by Tcl_EvalEx. The TCL_EVAL_DIRECT flag is useful in situations where the contents of a value are going to change immediately, so the bytecodes will not be reused in a future execution. In this case, it is faster to execute the script directly.

TCL_EVAL_GLOBAL
  この旗印が設定されている場合その記述譜は現在の名前空間ではなく大域水準で実行され､その変数文脈は大域変数のみから構成される(活動状態のどの Tcl 手続函数も無視する)｡　　　 If this flag is set, the script is evaluated in the global namespace instead of the current namespace and its variable context consists of global variables only (it ignores any Tcl procedures that are active).

### その他の詳細 MISCELLANEOUS DETAILS

Tcl 命令を処理する間､他の命令を評価する為の入れ子の呼び出しは合法である(このようにして手続函数及び幾つかの制御構造が実行される)｡入れ子になって起動された Tcl_EvalObjEx から TCL_OK 以外の符号が返された場合､通常､呼出し側はすぐさま同じ符号をその呼出し側に渡して返すべきである､それで頂上水準の応用譜に届く様に｡幾つかの for の様な命令は､ TCL_BREAK や TCL_CONTINUE のような特定の返り符号の為に検査をし､それを返すことなく処理をする｡ 　　 During the processing of a Tcl command it is legal to make nested calls to evaluate other commands (this is how procedures and some control structures are implemented). If a code other than TCL_OK is returned from a nested Tcl_EvalObjEx invocation, then the caller should normally return immediately, passing that same return code back to its caller, and so on until the top-level application is reached. A few commands, like for, will check for certain return codes, like TCL_BREAK and TCL_CONTINUE, and process them specially without returning.

Tcl_EvalObjEx は interp の為にどれだけの入れ子の Tcl_EvalObjEx 起動が進行しているかの追跡を保存する｡もし TCL_RETURN か TCL_BREAK か TCL_CONTINUE の符号が interp に頂上の Tcl_EvalObjEx の起動から返されようとしている場合､それは返り符号を TCL_ERROR に変換し interp の結果を､ return か break か continue 命令が不適切な場所で起動されたことを指し示す不都合伝言文に設定する｡これは､頂上水準の応用譜は TCL_OK と TCL_ERROR 以外の Tcl_EvalObjEx からの返り値を見ることはないことを意味する｡ Tcl_EvalObjEx keeps track of how many nested Tcl_EvalObjEx invocations are in progress for interp. If a code of TCL_RETURN, TCL_BREAK, or TCL_CONTINUE is about to be returned from the topmost Tcl_EvalObjEx invocation for interp, it converts the return code to TCL_ERROR and sets interp's result to an error message indicating that the return, break, or continue command was invoked in an inappropriate place. This means that top-level applications should never see a return code from Tcl_EvalObjEx other than TCL_OK or TCL_ERROR.

### 参照回数管理 REFERENCE COUNT MANAGEMENT

Tcl_EvalObjExとTcl_GlobalEvalObjの両方は､そのobjPtr引数の参照回数を増加し､減少する; 参照回数零を伴うどの様な値も､それに渡してはならない｡それらは､亦､解釈実行機能の結果を操作する; これらの呼出しに関するどの様な値の参照回数を保持する為にも､解釈実行機能の結果を頼ってはならない｡ Tcl_EvalObjEx and Tcl_GlobalEvalObj both increment and decrement the reference count of their objPtr argument; you must not pass them any value with a reference count of zero. They also manipulate the interpreter result; you must not count on the interpreter result to hold the reference count of any value over these calls.

Tcl_EvalObjvは､その objv引数を経由して渡されたどの様な値の参照回数も増加し､又､減少する; 参照回数零を伴うどの様な値も渡してはならない｡この函数は解釈実行機能の結果を操作する; これらの呼出しに関するどの様な値の参照回数を保持する為にも､解釈実行機能の結果を頼ってはならない｡ Tcl_EvalObjv may increment and decrement the reference count of any value passed via its objv argument; you must not pass any value with a reference count of zero. This function also manipulates the interpreter result; you must not count on the interpreter result to hold the reference count of any value over this call.

### KEYWORDS

execute, file, global, result, script, value
Copyright © 1989-1993 The Regents of the University of California.
Copyright © 1994-1997 Sun Microsystems, Inc.
Copyright © 2000 Scriptics Corporation.