source
(INT ルーチンの形式で) コンパイルするソース・コードを格納する配列。配列要素 source(0) にはソース・コードの行数を格納し、source(n) にはソース・コードの行番号 n を格納します。ソース行には 1 ~ n の連番を省略なしで付ける必要があります。実行可能な ObjectScript コードはインデントする必要があります。以下に例を示します。
SET mysrc(0)=6
SET mysrc(1)=" SET x=1"
SET mysrc(2)="Main" // a label
SET mysrc(3)=" WRITE ""x is:"",x,!"
SET mysrc(4)=" SET x=x+1"
SET mysrc(5)=" IF x=4 {WRITE ""x is:"",x,"" all done"" QUIT}"
SET mysrc(6)=" GOTO Main"
SET rtn=$COMPILE(mysrc,0,errs,,,,"myobj")
IF rtn=0 {WRITE "OBJ code successfully generated",!}
ELSE {WRITE "no OBJ code generated return code: ",rtn,! QUIT}
WRITE "Running the code",!!
DO ^myobj
source 引数には、添え字なしのローカル変数名か、場合によっては添え字付きのグローバル名を指定できます。
source(0) が未定義の場合、システムは、%SYSTEM.Process.Undefined()Opens in a new tab メソッドの設定にかかわらず、<UNDEFINED> エラーを生成します。
source(0) 値がソース・コードの行数より大きい場合や、連続するソース・コード行が見つからない場合、システムは <UNDEFINED> エラーを生成した後に、見つからないソース・コード行の名前を表示します。この動作は、%SYSTEM.Process.Undefined()Opens in a new tab メソッドを設定して変更できます。以下の例では、これらの種類のエラーを示します。
SET src(0)=4,src(1)="TestA ",src(2)=" WRITE 123",src(3)=" WRITE 456,!"
SET stat=$COMPILE(src,0,errs,TestA) /* generates <UNDEFINED> *src(4) */
SET src(0)=4,src(1)="TestA ",src(3)=" WRITE 123",src(4)=" WRITE 456,!"
SET stat=$COMPILE(src,0,errs,TestA) /* generates <UNDEFINED> *src(2) */
SET src(0)=3,src(1)="TestA ",src(3)=" WRITE 123",src(4)=" WRITE 456,!"
SET stat=$COMPILE(src,0,errs,TestA) /* generates <UNDEFINED> *src(2) */