abc プロジェクト
14.3.5. MakeFunctionCode メンバ関数説明

メンバ関数名 MakeFunctionCode
定義ファイル名pass5.cpp
定義行 570
所属名 TPass5
アクセス属性 private
宣言形式 void MakeFunctionCode ( )
概要 ABCLib_(元のソースファイル名).f を作成する。

Region(一番外側)を SetParam() call Sub() に置き換える。
また、NestしたRegion内は、コメントとして、 TokenEndPosまでSkipする。
NestRegion内の sct_Commandも、Nest先のRegionでの処理となる。

・sct_command の変換
・sct_install ... のブロックをコメントアウト(コメントを残す)
戻り値
パラメタ説明
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TPass5::Exec pass5.cpp 131

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::OutputSrcCode TuneRegion.cpp 3938
2 c_str

3 CompareText

4 Delete

5 fprintf

6 Length

7 Pos

8 SubString

9 Trim

10 UpperCase

参照外部変数一覧表
名称 定義ファイル名 定義行
1 MainF main.cpp 26

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TPass5::fpOut pass5.h 38
2 TPass5::TokenList pass5.h 34
3 TPass5::TuneRegionList pass5.h 36

参照先一覧表
名称 種別 定義ファイル名 定義行
1 TScript クラス pass3.h 151
2 TScValData クラス pass3.h 112
3 TToken クラス pass1.h 216
4 TTuneRegion クラス TuneRegion.h 88

関数論理チャート

        |  +----------------------------------+ 
   570  +--+ void TPass5::MakeFunctionCode()  | 
   571     | {                                | 
           +--+-------------------------------+ 
   572        +--- int i,i1;
   573        +--- TToken *Token;
   574        +--- TScript *Script;
   575        +--- AnsiString s;
   576        +--- TTuneRegion *TuneRegion;
   577        +--- bool IncludeReqF = true;
   578        |    
              |  +------------------------------------------+ 
   579        +--+ for(i = 0 ; i < TokenList->Count ; i++){ | 
              |  +--+---------------------------------------+ 
   580        |     +--- Token = (TToken *)TokenList->Items[i];
              |     |  +----------------------------+ 
   581        |     +--+ if(Token->Script != NULL){ | 
              |     |  +--+-------------------------+ 
   582        |     |     +--- Script = (TScript *)Token->Script;
              |     |     |  +------------------------------------+ 
   583        |     |     +--+ if(Script->ScRegion == scr_start){ | 
              |     |     |  +--+---------------------------------+ 
   584        |     |     |     +--- // Codeの置き換え
   585        |     |     |     +--- TuneRegion = (TTuneRegion *)Script->TuneRegion;
              |     |     |     |  +----------------------------------+ 
   586        |     |     |     +--+ if(TuneRegion->TokenEndPos > i){ | 
              |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |  +----------------------------------+ 
   587        |     |     |     |     +--+ if(!TuneRegion->UsedDynPefThis){ | 
              |     |     |     |     |  +--+-------------------------------+ 
   588        |     |     |     |     |     +--- TuneRegion->OutputSrcCode(fpOut,"",0); // 置き換えコードを出力
              |     |     |     |     |   +-+---+ 
   589        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------+ 
   589        |     |     |     |     |   |  else{  | 
              |     |     |     |     |   +-+-------+ 
   590        |     |     |     |     |     +--- TuneRegion->OutputSrcCode(fpOut,"",3); // 置き換えコードを出力
              |     |     |     |     |   +-+---+ 
   591        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   592        |     |     |     |     +--- i = TuneRegion->TokenEndPos;    // Top Regionの中をスキップする。
              |     |     |     |     |  +------------+ 
   593        |     |     |     |     +--+ continue;  | 
              |     |     |     |     |  +------------+ 
              |     |     |     |   +-+---+ 
   594        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   595        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------+ 
   595        |     |     |   |  else if(Script->ScType == sct_DynPefThis){ | 
              |     |     |   +-+-------------------------------------------+ 
   596        |     |     |     +--- //
   597        |     |     |     |    // Dynamicの実行 SetParam() を指定 
   598        |     |     |     |    //                                 
   599        |     |     |     +--- TScValData *ScValData = NULL;
   600        |     |     |     +--- int kk;
   601        |     |     |     |    
              |     |     |     |  +----------------------------------------+ 
   602        |     |     |     +--+ if(Script->ScValDataList->Count > 0){  | 
              |     |     |     |  +--+-------------------------------------+ 
   603        |     |     |     |     +--- ScValData = (TScValData *)Script->ScValDataList->Items[0];
   604        |     |     |     |     +--- s = ScValData->Str; // TR名 ""付き
              |     |     |     |     |  +--------------------------+ 
   605        |     |     |     |     +--+ while(s.Pos("\"") != 0){ | 
              |     |     |     |     |  +--+-----------------------+ 
   605        |     |     |     |     |     +--- s.Delete(s.Pos("\""),1);
              |     |     |     |     |   +-+---+ 
   605        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   605        |     |     |     |     +--- ;
              |     |     |     |     |  +--------------------------+ 
   606        |     |     |     |     +--+ while(s.Pos("\'") != 0){ | 
              |     |     |     |     |  +--+-----------------------+ 
   606        |     |     |     |     |     +--- s.Delete(s.Pos("\'"),1);
              |     |     |     |     |   +-+---+ 
   606        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   606        |     |     |     |     +--- ;
              |     |     |     |     |  +--------------------------------------------------+ 
   607        |     |     |     |     +--+ for(kk = 0 ; kk < TuneRegionList->Count ; kk++){ | 
              |     |     |     |     |  +--+-----------------------------------------------+ 
   608        |     |     |     |     |     +--- TuneRegion = (TTuneRegion *)TuneRegionList->Items[kk];
              |     |     |     |     |     |  +--------------------------------------------+ 
   609        |     |     |     |     |     +--+ if(CompareText(s,TuneRegion->Name) == 0){  | 
              |     |     |     |     |     |  +--+-----------------------------------------+ 
   610        |     |     |     |     |     |     +--- TuneRegion->UsedDynPefThis = true;
   611        |     |     |     |     |     |     +--- TuneRegion->OutputSrcCode(fpOut,"",2); // 置き換えコードを出力
              |     |     |     |     |     |   +-+---+ 
   612        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
   613        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
   614        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   615        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-----------------------------------------+ 
   615        |     |     |   |  else if(Script->ScType == sct_command){  | 
              |     |     |   +-+-----------------------------------------+ 
   616        |     |     |     +--- //
   617        |     |     |     |    // FORTRAN 90 の式(コマンド)そのまま出力される。     
   618        |     |     |     |    //                                                     
   619        |     |     |     |    // ここで、ABCLib_xxx = の値の所得も行う。             
   620        |     |     |     |    // 現状では、定数のみが使用可能。(変数や式はエラー)  
   621        |     |     |     |    //                                                     
   622        |     |     |     +--- s = Script->TokStrList->Strings[0];
              |     |     |     |  +--------------------------------------------+ 
   623        |     |     |     +--+ for(int j = 0 ; j < Token->Indent ; j++){  | 
              |     |     |     |  +--+-----------------------------------------+ 
   624        |     |     |     |     +--- s = "  "+s;
              |     |     |     |   +-+---+ 
   625        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   626        |     |     |     +--- fprintf(fpOut,"%s\n",s.c_str());
              |     |     |   +-+---+ 
   627        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
   627        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
   628        |     |     |     +--- fprintf(fpOut,"%s",Token->OrgStr.c_str());
              |     |     |   +-+---+ 
   629        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   630        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------------------------------------------------------+ 
   630        |     |   |  else if((Token->TokId == tid_CALL)&&(MainF->NoMPIF)){  | 
              |     |   +-+-------------------------------------------------------+ 
   631        |     |     +--- //
   632        |     |     |    //  MPI未使用の場合は、 Callの次が MPIxxx であれば 
   633        |     |     |    //  tid_LineEndまでコメントにする。 2009/03/10       
   634        |     |     |    //                                                   
   635        |     |     +--- int cc = 0;
   636        |     |     +--- bool NewLineF = true;
   637        |     |     +--- AnsiString FuncName,s,s1,s2;
   638        |     |     |    
              |     |     |  +------------------------------+ 
   639        |     |     +--+ if(i < TokenList->Count-1){  | 
              |     |     |  +--+---------------------------+ 
   640        |     |     |     +--- FuncName = Trim(((TToken *)TokenList->Items[i+1])->OrgStr.UpperCase());
   641        |     |     |     +--- cc = FuncName.Pos("MPI");
              |     |     |   +-+---+ 
   642        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------+ 
   643        |     |     +--+ if(cc == 1){ | 
              |     |     |  +--+-----------+ 
              |     |     |     |  +----------------------------------+ 
   644        |     |     |     +--+ for(;i < TokenList->Count;i++){  | 
              |     |     |     |  +--+-------------------------------+ 
   645        |     |     |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |     |     |  +----------------+ 
   646        |     |     |     |     +--+ if(NewLineF){  | 
              |     |     |     |     |  +--+-------------+ 
   647        |     |     |     |     |     +--- NewLineF = false;
   648        |     |     |     |     |     +--- s = "c"+Token->OrgStr;
              |     |     |     |     |   +-+---+ 
   649        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------+ 
   649        |     |     |     |     |   |  else{  | 
              |     |     |     |     |   +-+-------+ 
   650        |     |     |     |     |     +--- s = Token->OrgStr;
              |     |     |     |     |   +-+---+ 
   651        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   652        |     |     |     |     +--- cc = s.Pos("\n");
              |     |     |     |     |  +--------------+ 
   653        |     |     |     |     +--+ if(cc == 0){ | 
              |     |     |     |     |  +--+-----------+ 
   654        |     |     |     |     |     +--- fprintf(fpOut,"%s",s.c_str());
              |     |     |     |     |   +-+---+ 
   655        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------+ 
   655        |     |     |     |     |   |  else{  | 
              |     |     |     |     |   +-+-------+ 
   656        |     |     |     |     |     +--- s1 = s.SubString(1,cc);
   657        |     |     |     |     |     +--- fprintf(fpOut,"%s",s1.c_str());
   658        |     |     |     |     |     +--- s2 = s.SubString(cc+1,s.Length());
              |     |     |     |     |     |  +----------------+ 
   659        |     |     |     |     |     +--+ if(s2 != ""){  | 
              |     |     |     |     |     |  +--+-------------+ 
   660        |     |     |     |     |     |     +--- fprintf(fpOut,"c%s",s2.c_str());
              |     |     |     |     |     |   +-+---+ 
   661        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
   662        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |     |  +----------------------------------+ 
   663        |     |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |     |  +--------+ 
   664        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
   665        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
   666        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   667        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
   667        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
   668        |     |     |     +--- fprintf(fpOut,"%s",Token->OrgStr.c_str());
              |     |     |   +-+---+ 
   669        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   670        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
   670        |     |   |  else{  | 
              |     |   +-+-------+ 
   671        |     |     +--- fprintf(fpOut,"%s",Token->OrgStr.c_str());
              |     |   +-+---+ 
   672        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------------+ 
   673        |     +--+ if(Token->TokId == tid_END){ // 最初のEndの後でInclude (元と同じ)  | 
              |     |  +--+-------------------------------------------------------------------+ 
              |     |     |  +------------------+ 
   674        |     |     +--+ if(IncludeReqF){ | 
              |     |     |  +--+---------------+ 
   675        |     |     |     +--- IncludeReqF = false;
   676        |     |     |     +--- fprintf(fpOut,"\n");
   677        |     |     |     +--- fprintf(fpOut,"\n");
   678        |     |     |     +--- fprintf(fpOut,"      include 'ABCLib_ControlRoutines.f'\n");
   679        |     |     |     +--- fprintf(fpOut,"      include 'ABCLib_DynamicRoutines.f'\n");
   680        |     |     |     +--- fprintf(fpOut,"      include 'ABCLib_InstallRoutines.f'\n");
   681        |     |     |     +--- fprintf(fpOut,"      include 'ABCLib_StaticRoutines.f'\n");
              |     |     |   +-+---+ 
   682        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   683        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   684        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   685      |  }  | 
            +-----+