| 14.8.24. OutputSrcCode メンバ関数説明 |
| メンバ関数名 | OutputSrcCode |
|---|---|
| 定義ファイル名 | TuneRegion.cpp |
| 定義行 | 3938 |
| 所属名 | TTuneRegion |
| アクセス属性 | public |
| 宣言形式 | void OutputSrcCode ( FILE * fp , AnsiString IndentStr , int OutMode ) |
| 概要 | 置き換えコードを出力 Call SetParam() Call xxxx() コメントに置き換える。 Modeの設定で、出力対象(範囲)を変える。 Add 2004/09/14 OutMode=0 : SetParam + Call Func() + Comment OutMode=1 : SetParam + Call Func() OutMode=2 : SetParam OutMode=3 : Call Func() + Comment |
| 戻り値 | |
| パラメタ説明 | fp 出力先ファイルポインタ IndentStr インデント文字列 OutMode 出力モード |
| 機能説明 | |
| 備考 |
| 名称 | 定義ファイル名 | 定義行 | |
|---|---|---|---|
| 1 | TPass5::MakeFunctionCode | pass5.cpp | 570 |
| 2 | TTuneRegion::OutputReplaceSrc | TuneRegion.cpp | 4123 |
| 名称 | 定義ファイル名 | 定義行 | |
|---|---|---|---|
| 1 | TTuneRegion::GetPrePostSubregionStr | TuneRegion.cpp | 4337 |
| 2 | TTuneRegion::SepLongStr | TuneRegion.cpp | 4274 |
| 3 | c_str | ||
| 4 | CompareText | ||
| 5 | fprintf | ||
| 6 | Insert | ||
| 7 | IntToStr | ||
| 8 | Pos | ||
| 9 | TrimRight |
| 名称 | 定義ファイル名 | 定義行 | |
|---|---|---|---|
| 1 | MainF | main.cpp | 26 |
| 名称 | 定義ファイル名 | 定義行 | |
|---|---|---|---|
| 1 | TTuneRegion::ArgValList | TuneRegion.h | 140 |
| 2 | TTuneRegion::BaseValList | TuneRegion.h | 148 |
| 3 | TTuneRegion::FuncName | TuneRegion.h | 126 |
| 4 | TTuneRegion::Name | TuneRegion.h | 125 |
| 5 | TTuneRegion::TokenEndPos | TuneRegion.h | 123 |
| 6 | TTuneRegion::TokenList | TuneRegion.h | 120 |
| 7 | TTuneRegion::TokenStartPos | TuneRegion.h | 122 |
| 8 | TTuneRegion::TuneGroup | TuneRegion.h | 128 |
| 9 | TTuneRegion::TuneGroupName | TuneRegion.h | 129 |
| 名称 | 種別 | 定義ファイル名 | 定義行 | |
|---|---|---|---|---|
| 1 | TScript | クラス | pass3.h | 151 |
| 2 | TScValData | クラス | pass3.h | 112 |
| 3 | TToken | クラス | pass1.h | 216 |
| 4 | TValData | クラス | pass2.h | 42 |
関数論理チャート
| +----------------------------------------------------------------------------+
3938 +--+ void TTuneRegion::OutputSrcCode(FILE *fp,AnsiString IndentStr,int OutMode) |
3939 | { |
+--+-------------------------------------------------------------------------+
3940 +--- int i,j,k;
3941 +--- TToken *Token;
3942 +--- TValData *ValData;
3943 +--- AnsiString s,s2;
3944 +--- TScript *Script;
3945 +--- AnsiString BaseValName;
3946 |
3947 +--- BaseValName = BaseValList->Strings[0];
3948 +--- // Param ABCLIB_INSTALL = 1 が ABCScript.h にあるが、
3949 | // モジュールが異なるため、参照できてないので、値自体をセットしている
3950 | // 2004/05/28
| +--------------------+
3951 +--+ if(OutMode != 3){ |
| +--+-----------------+
3952 | +--- s = IndentStr+" call ABCLib_SetParm("+ IntToStr(TuneGroup+1);
3953 | +--- // s = IndentStr+" call ABCLib_SetParm("+ "ABCLib_"+UpperCase(TuneGroupName);
3954 | +--- s += ",'"+ Name + "',";
3955 | +--- // s += PROB_VALN;
3956 | +--- s += BaseValName;
3957 | +--- s += ", iusw1_"+Name+")\n"; // 複数変数対応の unrollとなる。
3958 | +--- s = SepLongStr(s);
3959 | +--- fprintf(fp,"%s",s.c_str());
| +-+---+
3960 | | } |
| +-----+
| +--------------------+
3961 +--+ if(OutMode != 2){ |
| +--+-----------------+
3962 | +--- s = GetPrePostSubregionStr(0);
3963 | +--- fprintf(fp,"%s",s.c_str());
3964 | |
3965 | +--- s = IndentStr+" call " + FuncName + "(";
| | +--------------------------------------------+
3966 | +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| | +--+-----------------------------------------+
| | | +------------------------------------+
3967 | | +--+ if(ArgValList->Strings[i] == ""){ |
| | | +--+---------------------------------+
| | | | +------------+
3968 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
3969 | | | | } |
| | | +-----+
3970 | | +--- ValData = (TValData *)ArgValList->Objects[i];
3971 | | +--- s += ValData->Str + ",";
| | +-+---+
3972 | | | } |
| | +-----+
3973 | +--- s += "iusw1_"+Name+")\n"; // 当面は1変数だけの unrollとなる。
3974 | +--- s = SepLongStr(s);
3975 | +--- fprintf(fp,"%s",s.c_str());
3976 | |
3977 | +--- s = GetPrePostSubregionStr(1);
3978 | +--- fprintf(fp,"%s",s.c_str());
| +-+---+
3979 | | } |
| +-----+
3980 |
3981 +--- //
3982 | // 対象ブロックをコメントにして出力する。
3983 | // case()内の場合,SetParamだけの場合は、Skip
3984 | //
| +--------------------------------------+
3985 +--+ if((OutMode != 0)&&(OutMode != 3)){ |
| +--+-----------------------------------+
| | +----------+
3986 | +--+ return; |
| | +----------+
| +-+---+
3987 | | } |
| +-----+
3988 +--- s = "";
| +--------------------------------------------------+
3989 +--+ for(i = TokenStartPos ; i <= TokenEndPos ; i++){ |
| +--+-----------------------------------------------+
3990 | +--- Token = (TToken *)TokenList->Items[i];
| | +----------------------------+
3991 | +--+ if(Token->Script != NULL){ |
| | +--+-------------------------+
3992 | | +--- Script = (TScript *)Token->Script;
3993 | | +--- /*
3994 | | | if((Script->ScRegion == scr_start)&&(i != TokenStartPos)){
3995 | | | // NestしたTuneRegionあり
3996 | | | TTuneRegion *TuneRegion;
3997 | | |
3998 | | | TuneRegion = (TTuneRegion *)Script->TuneRegion;
3999 | | | TuneRegion->OutputSrcCode(fp,"",false);
4000 | | | i = TuneRegion->TokenEndPos;
4001 | | | }
4002 | | | */
4002 | | +--- s = Token->OrgStr;
4003 | | +--- // fprintf(fp,"%s",s.c_str());
4004 | | +--- s = TrimRight(s);
4005 | | +--- fprintf(fp,"%s\n",s.c_str());
4006 | | +--- #if 1
4007 | | +--- //
4008 | | | // !ABCLib$ debug() スクリプトの処理
4009 | | | //
| | | +------------------------------------------------+
4010 | | +--+ if(Script->ScType == sct_debug){ // number |
| | | +--+---------------------------------------------+
4011 | | | +--- AnsiString cs;
4012 | | | |
| | | | +--------------------+
4013 | | | +--+ if(MainF->DebugF){ |
| | | | +--+-----------------+
4014 | | | | +--- s = IndentStr+" ";
4015 | | | | +--- cs = "";
| | | | +-+---+
4016 | | | | | } |
| | | | +-+---+
| | | | +-+-------+
4016 | | | | | else{ |
| | | | +-+-------+
4017 | | | | +--- s = "c" + IndentStr+" ";
4018 | | | | +--- cs = "c";
| | | | +-+---+
4019 | | | | | } |
| | | | +-----+
4020 | | | +--- s2 = s+"if(ABCLib_DEBUG .ge. 1)then";
4021 | | | +--- fprintf(fp,"%s\n",s2.c_str());
4022 | | | +--- s2 = s+" print *, \"myid: \",myid";
4023 | | | +--- fprintf(fp,"%s\n",s2.c_str());
4024 | | | +--- s2 = s+" print *, \""+TuneGroupName+" Routine: \",\""+Name+"\"";
4025 | | | +--- fprintf(fp,"%s\n",s2.c_str());
4026 | | | |
| | | | +------------------------------------+
4027 | | | +--+ if(Script->ScValDataList != NULL){ |
| | | | +--+---------------------------------+
| | | | | +----------------------------------------------------------+
4028 | | | | +--+ for(int k = 0 ; k < Script->ScValDataList->Count ; k++){ |
| | | | | +--+-------------------------------------------------------+
4029 | | | | | +--- TScValData *ScValData;
4030 | | | | | +--- ScValData = (TScValData *)Script->ScValDataList->Items[k];
| | | | | | +--------------------------------------------+
4031 | | | | | +--+ if(CompareText(ScValData->Str,"bp") == 0){ |
| | | | | | +--+-----------------------------------------+
4032 | | | | | | +--- s2 = s+ " print *, \"ABCLib_STARTTUNESIZE: \",";
4033 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
4034 | | | | | | +--- s2 = cs + " & ABCLib_STARTTUNESIZE";
4035 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
4036 | | | | | | +--- s2 = s+" print *, \"ABCLib_ENDTUNESIZE: \",";
4037 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
4038 | | | | | | +--- s2 = cs + " & ABCLib_ENDTUNESIZE";
4039 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
4040 | | | | | | +--- s2 = s+" print *, \"ABCLib_SAMPDIST: \",";
4041 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
4042 | | | | | | +--- s2 = cs + " & ABCLib_SAMPDIST";
4043 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
| | | | | | +-+---+
4044 | | | | | | | } |
| | | | | | +-+---+
| | | | | | +-+-------------------------------------------------+
4044 | | | | | | | else if(CompareText(ScValData->Str,"pp") == 0){ |
| | | | | | +-+-------------------------------------------------+
4045 | | | | | | +--- //
4046 | | | | | | | // Change iusw1 to iusw1_+Name 2005/02/28
4047 | | | | | | | // s2 = s+" print *, \"iusw1: \",iusw1";
4048 | | | | | | |
4049 | | | | | | +--- s2 = s+" print *, \"iusw1: \",iusw1_"+Name;
4050 | | | | | | +--- fprintf(fp,"%s\n",s2.c_str());
| | | | | | +-+---+
4051 | | | | | | | } |
| | | | | | +-+---+
| | | | | | +-+-------+
4051 | | | | | | | else{ |
| | | | | | +-+-------+
| | | | | | | +----------------------------------------+
4052 | | | | | | +--+ if(ScValData->Str.Pos("ABCLib") != 0){ |
| | | | | | | +--+-------------------------------------+
4053 | | | | | | | +--- s2 = s+" print *, \""+ScValData->Str+": \",";
4054 | | | | | | | +--- fprintf(fp,"%s\n", s2.c_str());
4055 | | | | | | | +--- s2 = cs+" & "+ScValData->Str;
4056 | | | | | | | +--- fprintf(fp,"%s\n", s2.c_str());
| | | | | | | +-+---+
4057 | | | | | | | | } |
| | | | | | | +-+---+
| | | | | | | +-+-------+
4057 | | | | | | | | else{ |
| | | | | | | +-+-------+
4058 | | | | | | | +--- s2 = s+" print *, \"Error! : "+ScValData->Str + " \"";
4059 | | | | | | | +--- fprintf(fp,"%s\n", s2.c_str());
4060 | | | | | | | +--- s2 = s+" print *, \"You can only specify the system parameters\"";
4061 | | | | | | | +--- fprintf(fp,"%s\n", s2.c_str());
4062 | | | | | | | +--- s2 = s+" print *, \" in the co-operator of debug. \"";
4063 | | | | | | | +--- fprintf(fp,"%s\n", s2.c_str());
| | | | | | | +-+---+
4064 | | | | | | | | } |
| | | | | | | +-----+
| | | | | | +-+---+
4065 | | | | | | | } |
| | | | | | +-----+
| | | | | +-+---+
4066 | | | | | | } |
| | | | | +-----+
4067 | | | | +--- s2 = s+"endif";
4068 | | | | +--- fprintf(fp,"%s\n",s2.c_str());
| | | | +-+---+
4069 | | | | | } |
| | | | +-----+
| | | +-+---+
4070 | | | | } |
| | | +-----+
4071 | | +--- #endif
| | +-+---+
4072 | | | } |
| | +-+---+
| | +-+---------------------------------------+
4072 | | | else if(Token->TokId == tid_LineEnd){ |
| | +-+---------------------------------------+
4073 | | +--- s = Token->OrgStr;
4074 | | +--- fprintf(fp,"%s",s.c_str());
4075 | | +--- s = "\n";
| | +-+---+
4076 | | | } |
| | +-+---+
| | +-+-------+
4076 | | | else{ |
| | +-+-------+
| | | +------------------------+
4077 | | +--+ if(s.Pos("\n") != 0){ |
| | | +--+---------------------+
4078 | | | +--- s = Token->OrgStr;
4079 | | | +--- // if(s[1] == ' '){
| | | | +------------------------------------------------------+
4080 | | | +--+ if(s[1] <= ' '){ // 先頭が\nの場合に対応 2009/02/21 |
| | | | +--+---------------------------------------------------+
4081 | | | | +--- s[1] = 'c';
| | | | +-+---+
4082 | | | | | } |
| | | | +-----+
4083 | | | +--- fprintf(fp,"%s",s.c_str());
| | | +-+---+
4084 | | | | } |
| | | +-+---+
| | | +-+-------+
4084 | | | | else{ |
| | | +-+-------+
4085 | | | +--- s = Token->OrgStr;
4086 | | | +--- //
4087 | | | | // "\n & の継続行をコメントにする。
4088 | | | | //
| | | | +------------------------+
4089 | | | +--+ if(s.Pos("\n") != 0){ |
| | | | +--+---------------------+
4090 | | | | +--- // MainF->print("**");
4091 | | | | +--- s.Insert("c",s.Pos("\n")+1);
4092 | | | | +--- fprintf(fp,"%s",s.c_str());
4093 | | | | +--- s = "";
| | | | +-+---+
4094 | | | | | } |
| | | | +-+---+
| | | | +-+-------+
4094 | | | | | else{ |
| | | | +-+-------+
4095 | | | | +--- fprintf(fp,"%s",s.c_str());
| | | | +-+---+
4096 | | | | | } |
| | | | +-----+
| | | +-+---+
4097 | | | | } |
| | | +-----+
| | +-+---+
4098 | | | } |
| | +-----+
| +-+---+
4099 | | } |
| +-----+
+-+---+
4100 | } |
+-----+