abc プロジェクト
14.8.16. MakeArgValList メンバ関数説明

メンバ関数名 MakeArgValList
定義ファイル名TuneRegion.cpp
定義行 457
所属名 TTuneRegion
アクセス属性 private
宣言形式 void MakeArgValList ( )
概要 チューニングリージョンのサブルーチンに渡す引数リストを生成する。
チューニングリージョン外との連携が必要な変数の一覧を作成する。
チューニングリージョン内で最初に参照、チューニングリージョン外で後で参照(S
UBROTIONの引数を含む)をチェックする。

TokenEndPosの後までチェック(tid_end)して、参照があるかチェックする。
戻り値
パラメタ説明
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::MakeSelectData TuneRegion.cpp 187
2 TTuneRegion::MakeUnrollData TuneRegion.cpp 577

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 AddObject

2 IndexOfObject

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::ArgValList TuneRegion.h 140
2 TTuneRegion::TokenEndPos TuneRegion.h 123
3 TTuneRegion::TokenList TuneRegion.h 120
4 TTuneRegion::TokenStartPos TuneRegion.h 122

参照先一覧表
名称 種別 定義ファイル名 定義行
1 TToken クラス pass1.h 216
2 TValData クラス pass2.h 42

関数論理チャート

        |  +------------------------------------+ 
   457  +--+ void TTuneRegion::MakeArgValList() | 
   458     | {                                  | 
           +--+---------------------------------+ 
   459        +--- int i,Idx,j;
   460        +--- TToken *Token;
   461        +--- TValData *ValData,*ValData2;
   462        |    
              |  +--------------------------------------------------+ 
   463        +--+ for(i = TokenStartPos ; i <= TokenEndPos ; i++){ | 
              |  +--+-----------------------------------------------+ 
   464        |     +--- Token = (TToken *)TokenList->Items[i];
              |     |  +------------------------------+ 
   465        |     +--+ if(Token->ValData != NULL){  | 
              |     |  +--+---------------------------+ 
   466        |     |     +--- //          MainF->print(Token->Str);
   467        |     |     +--- ValData = (TValData *)Token->ValData;
              |     |     |  +----------------------------------------------------------+ 
   468        |     |     +--+ if(ValData->ArrayOrFuncF && (ValData->ArrayLevel == 0)){ | 
              |     |     |  +--+-------------------------------------------------------+ 
              |     |     |     |  +------------------------------------------------+ 
   469        |     |     |     +--+ continue;                   // 関数は、対象外  | 
              |     |     |     |  +------------------------------------------------+ 
              |     |     |   +-+---+ 
   470        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +----------------------------------------------------------+ 
   471        |     |     +--+ if(ArgValList->IndexOfObject((TObject *)ValData) != -1){ | 
              |     |     |  +--+-------------------------------------------------------+ 
              |     |     |     |  +------------------------+ 
   472        |     |     |     +--+ continue; // 処理済み  | 
              |     |     |     |  +------------------------+ 
              |     |     |   +-+---+ 
   473        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +----------------------------------------------------------------+ 
   474        |     |     +--+ if(ValData->ArgF){  // サブルーチンの引数は、常に対象とする。  | 
              |     |     |  +--+-------------------------------------------------------------+ 
   475        |     |     |     +--- ArgValList->AddObject(ValData->Str,(TObject *)ValData);
              |     |     |   +-+---+ 
   476        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-----------------------------------------------------------------------+ 
   476        |     |     |   |  else if((Token->RefType == vrf_ref)||(Token->RefType == vrf_refset)){  | 
              |     |     |   +-+-----------------------------------------------------------------------+ 
   477        |     |     |     +--- // 最初に参照で使用されている変数
   478        |     |     |     +--- ArgValList->AddObject(ValData->Str,(TObject *)ValData);
              |     |     |   +-+---+ 
   479        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------+ 
   479        |     |     |   |  else if(Token->RefType == vrf_set){  | 
              |     |     |   +-+-------------------------------------+ 
   480        |     |     |     +--- // 最初に代入で使用されている変数(TR外での参照がなければ不要)
   481        |     |     |     +--- ArgValList->AddObject("*",(TObject *)ValData);
              |     |     |   +-+---+ 
   482        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   483        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   484        |   |  }  | 
              |   +-----+ 
   485        +--- //
   486        |    // ENDまで検索して、参照があるかを調べる。 
   487        |    //                                         
              |  +----------------------------------------------------+ 
   488        +--+ for(i = TokenEndPos ; i < TokenList->Count ; i++){ | 
              |  +--+-------------------------------------------------+ 
   489        |     +--- Token = (TToken *)TokenList->Items[i];
              |     |  +------------------------------+ 
   490        |     +--+ if(Token->TokId == tid_END){ | 
              |     |  +--+---------------------------+ 
              |     |     |  +--------+ 
   491        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |   +-+---+ 
   492        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +------------------------------+ 
   493        |     +--+ if(Token->ValData != NULL){  | 
              |     |  +--+---------------------------+ 
   494        |     |     +--- ValData = (TValData *)Token->ValData;
   495        |     |     |    
   496        |     |     +--- Idx = ArgValList->IndexOfObject((TObject *)ValData);
              |     |     |  +----------------+ 
   497        |     |     +--+ if(Idx == -1){ | 
              |     |     |  +--+-------------+ 
              |     |     |     |  +----------------------------+ 
   498        |     |     |     +--+ continue; // 対象外の変数  | 
              |     |     |     |  +----------------------------+ 
              |     |     |   +-+---+ 
   499        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------------------------------+ 
   500        |     |     +--+ if(ArgValList->Strings[Idx] == "*"){ | 
              |     |     |  +--+-----------------------------------+ 
              |     |     |     |  +------------------------------------------------------------------+ 
   501        |     |     |     +--+ if((Token->RefType == vrf_ref)||(Token->RefType == vrf_refset)){ | 
              |     |     |     |  +--+---------------------------------------------------------------+ 
   502        |     |     |     |     +--- ArgValList->Strings[Idx] = ValData->Str; // 使用にセット
              |     |     |     |   +-+---+ 
   503        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+---------------------------------------------------------+ 
   503        |     |     |     |   |  else if(Token->RefType == vrf_set){ // 最初に代入で使用  | 
              |     |     |     |   +-+---------------------------------------------------------+ 
   504        |     |     |     |     +--- ArgValList->Strings[Idx] = ""; // 未使用にセット
              |     |     |     |   +-+---+ 
   505        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   506        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   507        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   508        |   |  }  | 
              |   +-----+ 
   509        +--- //
   510        |    // ArgValListの "*"[TR内で最初に代入で使用されて、その後参照されていない変数]  
   511        |    // を "" としてクリアする。                                                    
   512        |    //                                                                             
              |  +--------------------------------------------+ 
   513        +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |  +--+-----------------------------------------+ 
              |     |  +------------------------------------+ 
   514        |     +--+ if(ArgValList->Strings[i] == "*"){ | 
              |     |  +--+---------------------------------+ 
   515        |     |     +--- ArgValList->Strings[i] = "";
              |     |   +-+---+ 
   516        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   517        |   |  }  | 
              |   +-----+ 
   518        +--- //
   519        |    //  引数リストの変数が配列で、その定義に変数を参照(Exp: Real D(1:nx))の場合  
   520        |    //  その変数も、引数リストに追加する。 Add 2007/1/20                         
   521        |    //                                                                           
              |  +--------------------------------------------+ 
   522        +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |  +--+-----------------------------------------+ 
              |     |  +------------------------------------+ 
   523        |     +--+ if(ArgValList->Strings[i] == ""){  | 
              |     |  +--+---------------------------------+ 
              |     |     |  +------------+ 
   524        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
   525        |     |   |  }  | 
              |     |   +-----+ 
   526        |     +--- ValData = (TValData *)ArgValList->Objects[i];
              |     |  +------------------------------------------------------------+ 
   527        |     +--+ if(!ValData->ArrayOrFuncF || (ValData->ArrayLevel == 0)){  | 
              |     |  +--+---------------------------------------------------------+ 
              |     |     |  +----------------------------------+ 
   528        |     |     +--+ continue; // 配列以外は、対象外  | 
              |     |     |  +----------------------------------+ 
              |     |   +-+---+ 
   529        |     |   |  }  | 
              |     |   +-----+ 
   530        |     +--- //
   531        |     |    // 
   532        |     |    // 
              |     |  +----------------------------------------------------------+ 
   533        |     +--+ for(j = ValData->DefPosS ; j < ValData->DefPosE ; j++){  | 
              |     |  +--+-------------------------------------------------------+ 
   534        |     |     +--- Token = (TToken *)TokenList->Items[j];
   535        |     |     +--- ValData2 = (TValData *)Token->ValData;
              |     |     |  +------------------------+ 
   536        |     |     +--+ if(ValData2 == NULL){  | 
              |     |     |  +--+---------------------+ 
              |     |     |     |  +------------------------------------+ 
   537        |     |     |     +--+ continue;   // 変数以外のトークン  | 
              |     |     |     |  +------------------------------------+ 
              |     |     |   +-+---+ 
   538        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------------------------------------------------------+ 
   539        |     |     +--+ if(ArgValList->IndexOfObject((TObject *)ValData2) != -1){  | 
              |     |     |  +--+---------------------------------------------------------+ 
              |     |     |     |  +------------------------+ 
   540        |     |     |     +--+ continue; // 処理済み  | 
              |     |     |     |  +------------------------+ 
              |     |     |   +-+---+ 
   541        |     |     |   |  }  | 
              |     |     |   +-----+ 
   542        |     |     +--- ArgValList->AddObject(ValData2->Str,(TObject *)ValData2);
              |     |   +-+---+ 
   543        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +--------------------------------------------------------------------+ 
   544        |     +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){  | 
              |     |  +--+-----------------------------------------------------------------+ 
   545        |     |     +--- Token = (TToken *)TokenList->Items[j];
   546        |     |     +--- ValData2 = (TValData *)Token->ValData;
              |     |     |  +------------------------+ 
   547        |     |     +--+ if(ValData2 == NULL){  | 
              |     |     |  +--+---------------------+ 
              |     |     |     |  +------------------------------------+ 
   548        |     |     |     +--+ continue;   // 変数以外のトークン  | 
              |     |     |     |  +------------------------------------+ 
              |     |     |   +-+---+ 
   549        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------------------------------------------------------+ 
   550        |     |     +--+ if(ArgValList->IndexOfObject((TObject *)ValData2) != -1){  | 
              |     |     |  +--+---------------------------------------------------------+ 
              |     |     |     |  +------------------------+ 
   551        |     |     |     +--+ continue; // 処理済み  | 
              |     |     |     |  +------------------------+ 
              |     |     |   +-+---+ 
   552        |     |     |   |  }  | 
              |     |     |   +-----+ 
   553        |     |     +--- ArgValList->AddObject(ValData2->Str,(TObject *)ValData2);
              |     |   +-+---+ 
   554        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   555        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   556      |  }  | 
            +-----+