MikoScript 言語仕様

 モジュール

 本言語処理系では、1つのスクリプトのソースコードがコンパイルされると、1つの
「モジュール」として形成されます。この中には、中間コードがあって、スクリプトは、
このコードに従って、実行されます。中間コードというのは、ソースコードとマシン語
(CPUが実行する命令コード)の中間にあたる実行指令コードという意味です。なお、
ソースコードは、翻訳時に1度参照されるだけで、実行時には参照されません。

 本処理系では、複数のモジュールを管理できるようになっています。これによって、
大きなプログラムの場合でも、複数のソースファイルに分割して開発できます。また、
複数のモジュールを、1つのライブラリーファイル内に保管しておくこともできます。

 本処理系は、モジュールの実行を、次のようにして行ないます。

まず最初に、初期処理を行ないます:
 (1) このモジュールをロード(そのバイナリーコードをメインメモリー上に展開)
 (2) このモジュールに「初期設定関数」が定義されていれば、それをコール:
     この初期設定関数は、必要に応じて定義しておきます。(無くても可)
     この関数は、名前が ^ModuleInit に決まっていて、引数はありません。
     この関数の返値は、-1 か否かで、エラーか否かが判定されます。
     この関数が値を返さなければ、その返値は null に扱われますが、
     これは -1 ではないので、エラーとは判断されません。
     この関数が -1(エラー)を返すと、その初期設定に失敗したことになる
     ので、そのモジュールの実行は、中止されます。

この初期設定が正常に終わると、次に主処理を行ないます:
 (3) (暗黙の)メイン関数をコール:
     ソースプログラム内の関数定義以外の部分を「暗黙のメイン関数」を呼んで
     います。これは「構文構成」の章で説明しています。

この主処理が終わると、以下の終了処理を行ないます:
 (4) このモジュールのローカルスコープ内にある全オブジェクトを破棄
    (そのデストラクタが定義されていれば、それがコールされます。)
 (5) このモジュールに「終了設定関数」が定義されていれば、それをコール:
     この終了設定関数は、必要に応じて定義しておきます。(無くても可)
     この関数は、名前が ^ModuleTerm に決まっていて、引数はありません。
     この関数の返値は、-1 か否かで、エラーか否かが判定されます。
     但し、現状、返値によって、以降の処理が変わるわけではありません。
     なお、この関数を出る時は、サブスレッドや、デストラクタのある
     オブジェクトが、残存していてはいけません。
 (6) このモジュールが使用していた全モジュールを破棄
 (7) このモジュールを抹消

例えば、次のようなスクリプトがあるとします。
    print "主処理中 ...";
    function ^ModuleInit()  {  print "初期設定中 ...";  }
    function ^ModuleTerm()  {  print "終了設定中 ...";  }
これを実行すると、次のようにプリントされます。
  初期設定中 ...
  主処理中 ...
  終了設定中 ...

 各モジュールは、それぞれ固有の名前で識別されます。このモジュール名の英字の
大文字と小文字は区別されません。

 モジュール関連の関数の一覧を以下に示します。これらは、::Module という名前の
箱に入っています。これらの関数について、以降で詳しく説明します。

 ユーザーレベル操作:
  .Exec     ソースファイルをコンパイルして実行
  .Run      モジュールファイル内のモジュールを実行
  .Eval     スクリプト文字列をコンパイルして実行
  .Include    モジュールをロードして初期設定関数をコール
  .Exclude    現在ロード中のモジュールから指定ものを除去
  .FilePath   モジュールのファイルパスの取得
  .FileName   モジュールのファイル名の取得

 システムレベル操作:
  .Compile    ソースからモジュールを生成
  .Parse     文字列からモジュールを生成
  .Save     モジュールのセーブ
  .Load     モジュールのロード(初期設定なし)
  .Unload    モジュールの削除(終了設定なし)
  .Main     モジュールのメイン関数コール
  .Initialize  モジュールの初期設定関数コール
  .Terminate   モジュールの終了設定関数コール
  .Destruct   モジュールのデストラクタの登録
  .List     モジュール名の一覧の取得
  .Link     モジュール間の相互リンク設定
  .Unlink    モジュール間の相互リンク解除
  .IsLinked   モジュール間にリンクはあるか?
  .GetLinkTo   リンク先モジュール名リストの取得
  .GetLinkFrom  リンク元モジュール名リストの取得
  .ThisName   現実行中のモジュール名の取得
  .LastName   最新ロードモジュール名の取得
  .CallerName  コール元のモジュール名の取得


■ユーザーレベル操作
 本節では、モジュール関連の関数のうち、通常のユーザーレベルでの操作時に使用する
関数について、説明します。なお、これらの関数の多くは、後述のシステムレベルの関数
の組み合わせによって実現されています。

Module.Exec 関数
書式: ::Module.Exec( <ファイル名>, argc, argv )
機能: 指定のソースファイルをコンパイルして実行します。
引数: <ファイル名> は、コンパイル対象のソースファイル名を指定します。
    argc は、(暗黙の)メイン関数のコール時に渡す引数の数を指定します。
    argv は、その引数の各値が格納されている配列を指定します。
      各引数値は、この配列の要素 [0],[1],[2], ... に順に代入しておきます。
      argc, argv が省略/不正の場合、argc = 0, argv なし、となります。
返値: 正常に(暗黙の)メイン関数をコールできた場合は、その返値になります。
    一方、エラー等があって、正常に実行できなかった時は、null になります。
    なお、(暗黙の)メイン関数が、null を返すか、何も値を返さなかった時にも、
    本関数の返値は、null になるので、単に返値が null か否かだけでは、正常に
    実行できたか否かは、判別できません。
用例: 例えば、カレントパス内に、Test1.mc というファイルがあって、その中に
    次のスクリプトが入っているとします。
            for( i = 0 ; i < argc ; i++ )
                print argv[i];
            return argc;
    また、Test2.mc というファイルがあって、その中に、次のスクリプトが     入っているとします。
            pv = { "AAA", "BBB", "CCC" };
            print ::Module.Exec( "Test1.mc", 3, pv );
    この Test2.mc を実行すると、次のようにプリントされます。       AAA       BBB       CCC       3 Module.Run 関数 書式: ::Module.Run( <ファイル名>, argc, argv ) 機能: 指定のモジュールファイル内の最初のモジュールを実行します。 引数: <ファイル名> は、実行対象のモジュールファイル名を指定します。     argc は、最初のモジュールの(暗黙の)メイン関数のコール時に渡す       引数の数を指定します。     argv は、その引数の各値が格納されている配列を指定します。       各引数値は、この配列の要素 [0],[1],[2], ... に順に代入しておきます。       argc, argv が省略/不正の場合、argc = 0, argv なし、となります。 返値: 正常に(暗黙の)メイン関数をコールできた場合は、その返値になります。     一方、エラー等があって、正常に実行できなかった時は、null になります。     なお、(暗黙の)メイン関数が、null を返すか、何も値を返さなかった時にも、     本関数の返値は、null になるので、単に返値が null か否かだけでは、正常に     実行できたか否かは、判別できません。 用例: 例えば、カレントパス内に、Test1.mcx というファイルがあって、その中に、     次のスクリプトをコンパイルした(中間コードの)モジュールが入っていると     します。
            for( i = 0 ; i < argc ; i++ )
                print argv[i];
            return argc;
    また、Test3.mc というファイルがあって、その中に、次のスクリプトが     入っているとします。
            pv = { "AAA", "BBB", "CCC" };
            print ::Module.Run( "Test1.mcx", 3, pv );
    この Test3.mc を実行すると、次のようにプリントされます。       AAA       BBB       CCC       3 Module.Eval 関数 書式: ::Module.Eval( <文字列>, argc, argv ) 機能: 指定のスクリプト文字列をコンパイルして実行します。 引数: <文字列> は、実行するスクリプトを指定します。     argc は、(暗黙の)メイン関数のコール時に渡す引数の数を指定します。     argv は、その引数の各値が格納されている配列を指定します。       各引数値は、この配列の要素 [0],[1],[2], ... に順に代入しておきます。       argc, argv が省略/不正の場合、argc = 0, argv なし、となります。 返値: 正常に(暗黙の)メイン関数をコールできた場合は、その返値になります。     一方、エラー等があって、正常に実行できなかった時は、null になります。     なお、(暗黙の)メイン関数が、null を返すか、何も値を返さなかった時にも、     本関数の返値は、null になるので、単に返値が null か否かだけでは、正常に     実行できたか否かは、判別できません。 用例: 次のスクリプトを実行すると、7 がプリントされます。
            print ::Module.Eval( "return 1 + 2 * 3 ;" );
    また、次のようなスクリプトがあるとします。
            script = ##
                for( i = 0 ; i < argc ; i++ )
                    print argv[i];
                return argc;
            ##;
            pv = { "AAA", "BBB", "CCC" };
            print ::Module.Eval( script, 3, pv );
    これを実行すると、次のようにプリントされます。       AAA       BBB       CCC       3 Module.Include 関数 書式: ::Module.Include( <ファイル名>, <モジュール名> ... ) 機能: 指定のモジュールをロードして、初期設定関数をコールします。     もし、初期設定関数がエラーを返すと、そのモジュールは除去されます。 引数: <ファイル名> は、ライブラリファイルを指定します。このファイル内にある       モジュールがロード対象になります。       このファイル名に拡張子が無い場合、.mcx が付加されます。       ライブラリファイルは、以下の順に検索されます。        (1)カレントパス        (2)特定ライブラリーパス( ::SetLibraryPath() による設定 )        (3)共通ライブラリーパス     <モジュール名> ... は、ロードするモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       ロード対象のモジュールのうち、この指定に一致した名前のモジュールが、       ロードされます。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       この引数が省略された場合、当ライブラリファイル内の最初の       モジュールが、ロードされます。 注意: 同一名称のモジュールが既にロード済みなら、それはロードされません。 返値: ロードされたモジュール数 用例: 
        if( ::Module.Include( "GkLibrary" ) > 0 )
            ・・・・・
Module.Exclude 関数 書式: ::Module.Exclude( ... ) 機能: 現在ロード中のモジュールのうち、指定されたモジュールを除去します。     モジュールを除去する時には、まず、そのモジュールのスコープ内にある     各オブジェクトのデストラクタを呼び出します。次に、そのモジュールの     終了設定関数を呼び出します。最後に、そのモジュールを抹消します。     なお、除去対象のモジュールが、他のモジュール(つまり、本関数をコール     したモジュール自身以外のモジュール)で使われている時には、上記の     デストラクタと終了設定関数の呼び出しは行なわれません。 引数: ... は、除去するモジュールの名前を指定します。     この指定には、ワイルドカードが複数使用できます。     この各引数は、文字列だけでなく、連想配列でも指定できます。その場合、     その要素[i]( i = 0,1,2,... )に入っている文字列が、対象になります。 返値: 除去されたモジュール数 用例: 
        ::Module.Exclude( "*" );
Module.FilePath 関数 書式: ::Module.FilePath( <モジュール名> ) 機能: 指定モジュールのファイルが格納されているフルパス名を返します。 引数: <モジュール名> は、対象のモジュールの名前を指定します。       現ロード中のモジュールのうち、この名前のモジュールが、対象に       なります。なお、この指定には、ワイルドカードは使えません。       この引数が省略/不正時、現実行中のモジュールが対象になります。 返値: 対象のモジュールがファイルからロードされている場合、そのフルパス名     を返します。なお、そのフルパス名の最後に、\ は付きません。     対象のモジュールが無いか、ファイルからロードされたモジュールでない     場合には、null を返します。 Module.FileName 関数 書式: ::Module.FileName( <モジュール名> ) 機能: 指定モジュールのファイル名を返します。 引数: <モジュール名> は、対象のモジュールの名前を指定します。       現ロード中のモジュールのうち、この名前のモジュールが、対象に       なります。なお、この指定には、ワイルドカードは使えません。       この引数が省略/不正時、現実行中のモジュールが対象になります。 返値: 対象のモジュールがファイルからロードされている場合、そのファイル名     を返します。なお、これには、パス名は含まれません。     対象のモジュールが無いか、ファイルからロードされたモジュールでない     場合には、null を返します。 ■システムレベル操作  本言語処理系は、モジュール関連のシステムレベルの操作を行なえる各種の関数が提供 されています。本節では、これらの関数について説明します。ただし、これらの関数は、 通常の用途では、特に必要ありません。前述のユーザーレベルの関数で充分です。 Module.Compile 関数 書式: ::Module.Compile( <ファイル名>, <モジュール名>, <説明文>, <関数無登録> ) 機能: ソースファイルをコンパイルして中間コードのモジュールを生成します。 引数: <ファイル名> は、コンパイル対象のソースファイル名を指定します。     <モジュール名> は、その生成モジュールを特定する名称を指定します。       この省略時には、ソースファイル名の拡張子を除いた部分が、その       モジュール名になります。     <説明文> は、その生成モジュールを簡単に説明する文を指定します。       この省略時には、この文は登録されません。     <関数無登録> は、生成されたモジュール内の関数の登録を行なわない場合に、       真値(1) を指定します。その登録を行なう場合は、この引数を省略、       または、真値(0) を指定します。       ちなみに、この登録を行なわないと、その関数は呼び出せませんが、       生成したモジュールを実行しない場合には、この登録は無用です。 返値: 正常にモジュールが生成された時は、そのモジュール名になります。     さもなければ(エラー時は)、null になります。 注意: 本関数は、モジュールの生成だけで、その実行は行ないません。 補説: モジュールの実行は、.Initialize(), .Main(), .Destruct(), .Terminate()     の各関数で行ないます。また、モジュールのライブラリファイルへの保存は、     .Save() 関数で行ないます。 Module.Parse 関数 書式: ::Module.Parse( <スクリプト文字列> ) 機能: <スクリプト文字列> をコンパイルして中間コードのモジュールを生成します。 返値: 正常終了時、モジュール名(適当に決められたもの)になります。     エラー時は、null になります。 注意: 本関数は、モジュールの生成だけで、その実行は行ないません。 補説: .Main() 関数の「補説」参照。 Module.Initialize 関数 書式: ::Module.Initialize( <モジュール名>, <結果> ) 機能: モジュールの初期設定関数( ^ModuleInit() 関数 )をコールします。 引数: <モジュール名> は、現在ロード中のモジュールのうち、本コールの対象と       なるモジュールの名前を指定します。この引数が省略された場合は、       最後にロードされたモジュールが対象になります。     <結果> は、本処理の結果を示す以下の値を代入する箱を指定します。       = -1: モジュール名不正       = 0: 指定モジュールがロードされていない       = 1: 指定モジュールが使用中(対象関数の呼び出し不可)       = 2: 対象関数が無登録(当処理不要)       = 3: 対象関数を呼び出した      この結果が特に必要でない時は、<結果> の引数は省略できます。 返値: 初期設定関数をコールした場合は、その関数の返値になります。     初期設定関数をコールしなかった場合は、null なります。 注意: 本関数は、Module.Main() 関数よりも前に、コールする必要があります。     初期設定に失敗した時(つまり、本関数の返値が -1 の時)、この      モジュールは、基本的に、使用不可として扱う必要があります。 用例: 
        // "ABC" というモジュールの初期設定関数をコールする
        if( ::Module.Initialize( "ABC" ) == -1 )   // 初期設定失敗?
            goto REMOVE_MODULE;
Module.Main 関数 書式: ::Module.Main( <モジュール名>, argc, argv ) 機能: モジュールの(暗黙の)メイン関数を、指定の引数でコールします。 引数: <モジュール名> は、現在ロード中のモジュールのうち、本コールの対象と       なるモジュールの名前を指定します。この引数が省略された場合は、       最後にロードされたモジュールが対象になります。     argc は、メイン関数のコール時に渡す引数の数を指定します。     argv は、メイン関数のコール時に渡す引数の配列を指定します。       argc, argv が省略/不正の場合、argc = 0, argv なし、とします。 返値: 正常にコールできた場合は、そのメイン関数の返値になります。     正常にコールできなかった場合は、null なります。 注意: メイン関数の返値が null の時、それだけでは、正常にコールできたか     否かは、区別できません。 用例: 
        // "ABC" というモジュールのメイン関数を3個の引数でコールする
        argv[0] = "AAA";  argv[1] = "BBB";  argv[2] = "CCC";
        ::Module.Main( "ABC", 3, argv );
Module.Destruct 関数 書式: ::Module.Destruct( <モジュール名> ) 機能: モジュールのローカルスコープ内にある各オブジェクトのデストラクタを     コールします。 引数: <モジュール名> は、現在ロード中のモジュールのうち、本処理の対象と       なるモジュールの名前を指定します。この引数が省略された場合は、       最後にロードされたモジュールが対象になります。 返値: 本処理の結果を示す次の値を返します。      = -1: モジュール名不正      = 0: 指定モジュールがロードされていない      = 1: 指定モジュールが使用中(デストラクタの呼び出し不可)      = 2: デストラクタを呼び出した(対象オブジェクトがある場合のみ) 補説: 対象のモジュールローカルスコープ内に、デストラクタが定義された     オブジェクトが無い場合、本関数は特に何もしません。 注意: 本関数は、Module.Terminate() 関数よりも前に、コールする必要があります。 用例: 
        // "ABC" というモジュール内の各オブジェクトのデストラクタをコール
        ::Module.Destruct( "ABC" );
Module.Terminate 関数 書式: ::Module.Terminate( <モジュール名>, <結果> ) 機能: モジュールの終了設定関数( ^ModuleTerm() 関数 )をコールします。 引数: <モジュール名> は、現在ロード中のモジュールのうち、本コールの対象と       なるモジュールの名前を指定します。この引数が省略された場合は、       最後にロードされたモジュールが対象になります。     <結果> は、Module.Initialize() の場合と同様です。 返値: 終了設定関数をコールした場合は、その関数の返値になります。     終了設定関数をコールしなかった場合は、null なります。 注意: 本関数の実行後は、そのモジュール内のどの関数もコールしてはいけません。     そのため、本関数よりも前に、Module.Destruct() 関数をコールする必要が     あります。 用例: 
        // "ABC" というモジュールの終了設定関数をコールする
        ::Module.Terminate( "ABC" );
Module.List 関数 書式: ::Module.List( <格納箱>, <ファイル名>, <モジュール名> ... ) 機能: モジュール名を列挙します。 引数: <格納箱> は、列挙されたモジュール名を格納する箱を指定します。       その各名前は、この箱の [0],[1],[2]... の要素に順に代入されます。     <ファイル名> は、ライブラリファイルを指定します。このファイル内にある       モジュールが調査対象になります。このファイル名に拡張子が無い場合、       .mcx が付加されます。       調査対象が、ファイルではなく、現在ロード中のモジュールの場合は、       この引数を省略します。     <モジュール名> ... は、列挙するモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       調査対象のモジュールのうち、この指定に一致したモジュール名が、       <格納箱> に格納されます。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       この引数が省略された場合、ライブラリファイルの最初のモジュール、       または、ロード中の現モジュールの名前のみが列挙されます。 返値: >= 0: 列挙されたモジュール名の数     = -1: エラー 用例: 
        // 現在ロード中の全モジュールの名前を列挙
        n = ::Module.List( ModList'new!, , "*" );
Module.Save 関数 書式: ::Module.Save( <ファイル名>, <説明文>, <モジュール名> ... ) 機能: ライブラリファイルへロード中のモジュールを保存します。 引数: <ファイル名> は、モジュールを保存する「ライブラリファイル」の名前を       指定します。このファイル名に拡張子が無い場合、.mcx を付加します。       同名のライブラリファイルが既存の場合、それは上書されます。     <説明文> は、そのライブラリの簡単な説明文を指定します。ライブラリ       ファイルには、これも登録されます。この引数が省略された場合は、       その説明文は、空文で登録されます。     <モジュール名> ... は、保存するモジュールの名前を指定します。       これは、複数あっても構いません。それぞれ、文字列、または、       文字列を要素とする連想配列で指定します。       モジュール名の指定には、ワイルドカードが使用できます。       モジュール名の指定が無ければ、最後にロードされたモジュールが       対象になります。       各モジュールは、引数で指定された順に保存されます。       不正な指定は、単に無視されるだけで、エラーにはなりません。       連想配列の場合、その要素[i] が文字列で、i = 0,1,2,... つまり、       そのインデックスが 0 からの連続整数のものだけが対象になります。 返値: 正常に保存したモジュール数 用例: 
        // "abc.mcx" というファイルに、"ABC" というモジュールを保存
        ::Module.Save( "abc", , "ABC" );
Module.Load 関数 書式: ::Module.Load( <格納箱>, <ファイル名>, <モジュール名> ... ) 機能: ライブラリファイルから指定のモジュールをロードします。 引数: <格納箱> は、ロードされたモジュールの名前を格納する箱を指定します。       その各名前は、この箱の [0],[1],[2]... の要素に順に代入されます。       このような格納が不要の場合、この引数を省略します。     <ファイル名> は、ライブラリファイルを指定します。このファイル内にある       モジュールがロード対象になります。このファイル名に拡張子が無い       場合、.mcx が付加されます。       ライブラリファイルは、以下の順に検索されます。        (1)カレントパス        (2)特定ライブラリーパス( ::SetLibraryPath() による設定 )        (3)共通ライブラリーパス     <モジュール名> ... は、ロードするモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       ロード対象のモジュールのうち、この指定に一致した名前のモジュールが、       ロードされます。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       この引数が省略された場合、当ライブラリファイル内の最初の       モジュールが、ロードされます。 注意: 本関数は、モジュールをロードするだけで、その初期設定関数や、メイン関数     等は、コールしません。     同一名称のモジュールが既にロード済みなら、それはロードしません。 返値: ロードされたモジュール数 用例: 
        // "GuiLib" というライブラリファイル内の最初のモジュールをロード
        n = ::Module.Load( , "GuiLib" );
Module.Unload 関数 書式: ::Module.Unload( <モジュール名> ... ) 機能: 現ロード中のモジュールのうち指定のモジュールを除去します。 引数: <モジュール名> ... は、除去するモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       現ロード中のモジュールのうち、この指定に一致した名前の       モジュールが、除去されます。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       この引数の省略/不正時は、どのモジュールも除去されません。 返値: 除去されたモジュール数 注意: スレッドが使用中のモジュールや、他のモジュールにリンクされている     モジュールは、除去できません。 注意: 本関数は、モジュールを除去するだけで、デストラクタや終了設定関数     等は、コールしません。 Module.Link 関数 書式: ::Module.Link( <リンク元>, <リンク先> ... ) 機能: リンク元モジュールからリンク先モジュールへのリンクを設定します。 引数: <リンク元> は、リンク元のモジュールの名前を指定します。       この指定には、ワイルドカードは使えません。       この引数省略時、現実行中のモジュールが対象になります。     <リンク先> ... は、リンク先のモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       現ロード中のモジュールのうち、この指定に一致した名前の       モジュールが、リンク先になります。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       このリンク先の指定は、省略できません。 返値: リンクを設定したモジュール数 Module.Unlink 関数 書式: ::Module.Unlink( <リンク元>, <リンク先> ... ) 機能: リンク元モジュールからリンク先モジュールへのリンクを解除します。 引数: <リンク元> は、リンク元のモジュールの名前を指定します。       この指定には、ワイルドカードは使えません。       この引数省略時、現実行中のモジュールが対象になります。     <リンク先> ... は、リンク先のモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       現ロード中のモジュールのうち、この指定に一致した名前の       モジュールが、リンク先になります。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       このリンク先の指定は、省略できません。 返値: リンクを解除したモジュール数 Module.IsLinked 関数 書式: ::Module.IsLinked( <リンク元>, <リンク先> ... ) 機能: リンク元モジュールからリンク先モジュールへのリンクの有無を調べます。 引数: <リンク元> は、リンク元のモジュールの名前を指定します。       この指定には、ワイルドカードは使えません。       この引数省略時、現実行中のモジュールが対象になります。     <リンク先> ... は、リンク先のモジュールの名前を指定します。       この指定には、ワイルドカードが複数使用できます。       現ロード中のモジュールのうち、この指定に一致した名前の       モジュールが、リンク先になります。       この各引数は、文字列だけでなく、連想配列でも指定できます。       連想配列の場合、その要素[i]( i = 0,1,2,... )に入っている       文字列が対象になります。       このリンク先の指定は、省略できません。 返値: =1: リンクあり, =0: リンクなし Module.GetLinkTo 関数 書式: ::Module.GetLinkTo( <リンク元>, <格納箱> ) 機能: 指定モジュールがリンクしているモジュールをリストアップします。 引数: <リンク元> は、リンク元のモジュールの名前を指定します。       現ロード中のモジュールのうち、この名前のモジュールが、       対象になります。なお、この指定には、ワイルドカードは使えません。       この引数省略時、現実行中のモジュールが対象になります。     <格納箱> は、リストアップされたモジュール名を格納する箱を指定します。       各モジュール名は、この箱の要素 [0],[1],[2]... に順に代入されます。 返値: リストアップされたモジュール数 Module.GetLinkFrom 関数 書式: ::Module.GetLinkFrom( <リンク先>, <格納箱> ) 機能: 指定モジュールにリンクしているモジュールをリストアップします。 引数: <リンク先> は、リンク先のモジュールの名前を指定します。       現ロード中のモジュールのうち、この名前のモジュールが、対象に       なります。なお、この指定には、ワイルドカードは使えません。       この引数省略時、現実行中のモジュールが対象になります。     <格納箱> は、リストアップされたモジュール名を格納する箱を指定します。       各モジュール名は、この箱の要素 [0],[1],[2]... に順に代入されます。 返値: リストアップされたモジュール数 Module.ThisName 関数 書式: ::Module.ThisName() 機能: 現実行中のモジュールの名前を返します。 Module.LastName 関数 書式: ::Module.LastName() 機能: 最後にロードしたモジュールの名前を返します。 Module.CallerName 関数 書式: ::Module.CallerName() 機能: 現実行中の関数をコールした関数があるモジュールの名前を返します。