abc プロジェクト
14.8.21. OutputReplaceSrc メンバ関数説明 |
メンバ関数名 | OutputReplaceSrc |
定義ファイル名 | TuneRegion.cpp |
定義行 | 4123 |
所属名 | TTuneRegion |
アクセス属性 | public |
宣言形式 | void OutputReplaceSrc ( FILE * fp , void * TargetSubRegion , int iusw1 ) |
概要 | ソースの指定範囲を出力(コメントにはしない、Scriptは出力しない) NestしたScriptの置換も行う UnRoll以外でのvarid指定も、変換対象となる。 また、TragetSubRegionと一致しないSubRegionは、Skipする。 |
戻り値 | |
パラメタ説明 | fp 出力先ファイルポインタ TargetSubRegion 対象サブリージョン iusw1 対象iusw1 |
機能説明 | |
備考 | |
呼出し元関数一覧表
呼出し先関数一覧表
参照メンバ変数一覧表
参照先一覧表
関数論理チャート
| +------------------------------------------------------------------------------+
4123 +--+ void TTuneRegion::OutputReplaceSrc(FILE *fp,void *TargetSubRegion,int iusw1) |
4124 | { |
+--+---------------------------------------------------------------------------+
4125 +--- int i,j,k;
4126 +--- TToken *Token;
4127 +--- AnsiString s,IndentStr;
4128 +--- TScript *Script;
4129 +--- int SubRegionIdx;
4130 +--- TSubRegion *SubRegion;
4131 |
4132 +--- //
4133 | // 対象ブロックを置換して出力する。
4134 | //
4135 +--- s = "";
4136 +--- IndentStr = " ";
4137 +--- SubRegionIdx = 0;
| +--------------------------------------------------+
4138 +--+ for(i = TokenStartPos ; i <= TokenEndPos ; i++){ |
| +--+-----------------------------------------------+
4139 | +--- Token = (TToken *)TokenList->Items[i];
| | +----------------------------+
4140 | +--+ if(Token->Script != NULL){ |
| | +--+-------------------------+
4141 | | +--- Script = (TScript *)Token->Script;
| | | +------------------------------------------------------------+
4142 | | +--+ if((Script->ScRegion == scr_start)&&(i != TokenStartPos)){ |
| | | +--+---------------------------------------------------------+
4143 | | | +--- // NestしたTuneRegionあり
4144 | | | +--- TTuneRegion *TuneRegion;
4145 | | | |
4146 | | | +--- TuneRegion = (TTuneRegion *)Script->TuneRegion;
4147 | | | +--- TuneRegion->OutputSrcCode(fp," ",1);
4148 | | | +--- i = TuneRegion->TokenEndPos;
4149 | | | +--- // }else if(Script->ScRegion == scr_substart){
| | | +-+---+
4150 | | | | } |
| | | +-+---+
| | | +-+-------------------------------------------------------------------+
4150 | | | | else if((Script->ScRegion == scr_substart) |
4151 | | | | &&(Script->ScType == sct_select)){ // Sub region Start |
| | | +-+-------------------------------------------------------------------+
4152 | | | +--- // SubRegion開始
4153 | | | | // もし、TargetSubRegionでなければ、sub region endまで
4154 | | | | // skipする。TargetSubRegionの場合は、そのまま次へ
4155 | | | | //
| | | | +------------------------------------------+
4156 | | | +--+ if(SubRegionIdx < SubRegionList->Count){ |
| | | | +--+---------------------------------------+
4157 | | | | +--- SubRegion = (TSubRegion *)SubRegionList->Items[SubRegionIdx++];
| | | | | +------------------------------------+
4158 | | | | +--+ if(SubRegion != TargetSubRegion){ |
| | | | | +--+---------------------------------+
4159 | | | | | +--- i = SubRegion->TokenEndPos; // Skip To End of SubRegion
| | | | | +-+---+
4160 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
4161 | | | | | } |
| | | | +-----+
| | | +-+---+
4162 | | | | } |
| | | +-+---+
| | | +-+-------------------------------------------+
4162 | | | | else if(Script->ScRegion == scr_substart){ |
| | | +-+-------------------------------------------+
4163 | | | +--- //
4164 | | | | // Pre,PostのサブリージョンのSkip
4165 | | | | // End_SubReguinまでSkipする。
4166 | | | | //
4167 | | | +--- int Nest = 0;
| | | | +--------------------------------+
4168 | | | +--+ for(; i <= TokenEndPos ; i++){ |
| | | | +--+-----------------------------+
4169 | | | | +--- Token = (TToken *)TokenList->Items[i];
| | | | | +----------------------------+
4170 | | | | +--+ if(Token->Script != NULL){ |
| | | | | +--+-------------------------+
4171 | | | | | +--- Script = (TScript *)Token->Script;
| | | | | | +----------------------------------------+
4172 | | | | | +--+ if(Script->ScRegion == scr_substart){ |
| | | | | | +--+-------------------------------------+
4173 | | | | | | +--- Nest++;
| | | | | | +-+---+
4174 | | | | | | | } |
| | | | | | +-+---+
| | | | | | +-+-----------------------------------------+
4174 | | | | | | | else if(Script->ScRegion == scr_subend){ |
| | | | | | +-+-----------------------------------------+
4175 | | | | | | +--- Nest--;
| | | | | | | +----------------+
4176 | | | | | | +--+ if(Nest == 0){ |
| | | | | | | +--+-------------+
| | | | | | | | +--------+
4177 | | | | | | | +--+ break; |
| | | | | | | | +--------+
| | | | | | | +-+---+
4178 | | | | | | | | } |
| | | | | | | +-----+
| | | | | | +-+---+
4179 | | | | | | | } |
| | | | | | +-----+
| | | | | +-+---+
4180 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
4181 | | | | | } |
| | | | +-----+
| | | +-+---+
4182 | | | | } |
| | | +-----+
| | +-+---+
4183 | | | } |
| | +-+---+
| | +-+-------------------------------------------------------------+
4183 | | | else if(Token->TokId == tid_LineEnd){ // 改行コードトークン |
| | +-+-------------------------------------------------------------+
4184 | | +--- s = Token->OrgStr;
4185 | | +--- fprintf(fp,"%s",s.c_str());
4186 | | +--- IndentStr = " ";
| | +-+---+
4187 | | | } |
| | +-+---+
| | +-+-----------------------------------------------------+
4187 | | | else if((TuneKind != tkUnroll)&& |
4188 | | | ((Token->TokId == tid_Val)||(Token->TokId == -1))){ |
| | +-+-----------------------------------------------------+
4189 | | +--- //
4190 | | | // variedによる変数の置換(Unrollのvariedは対象外)
4191 | | | //
4192 | | +--- s = Token->OrgStr;
4193 | | |
| | | +------------------------------+
4194 | | +--+ if(TargetSubRegion == NULL){ |
| | | +--+---------------------------+
| | | | +--------------------------------------+
4195 | | | +--+ for(j = 0 ; j < variedCount ; j++){ |
| | | | +--+-----------------------------------+
| | | | | +--------------------------------------------------------+
4196 | | | | +--+ if(AnsiCompareText(Token->Str,variedValName[j]) == 0){ |
| | | | | +--+-----------------------------------------------------+
4197 | | | | | +--- // 定数に置換する。
4198 | | | | | +--- int Idx,Value;
4199 | | | | | |
4200 | | | | | +--- Idx = iusw1;
| | | | | | +----------------------------------------+
4201 | | | | | +--+ for(k = j+1 ; k < variedCount ; k++){ |
| | | | | | +--+-------------------------------------+
4202 | | | | | | +--- Idx /= (variedToValue[k] - variedFromValue[k]+1);
| | | | | | +-+---+
4203 | | | | | | | } |
| | | | | | +-----+
4204 | | | | | +--- Idx = Idx % (variedToValue[j] - variedFromValue[j]+1); // 余り
4205 | | | | | +--- Value = variedFromValue[j] + Idx;
| | | | | | +----------------------+
4206 | | | | | +--+ if(s == Token->Str){ |
| | | | | | +--+-------------------+
4207 | | | | | | +--- s = IntToStr(Value);
| | | | | | +-+---+
4208 | | | | | | | } |
| | | | | | +-+---+
| | | | | | +-+-------+
4208 | | | | | | | else{ |
| | | | | | +-+-------+
4209 | | | | | | +--- s = " "+IntToStr(Value);
| | | | | | +-+---+
4210 | | | | | | | } |
| | | | | | +-----+
| | | | | | +--------+
4211 | | | | | +--+ break; |
| | | | | | +--------+
| | | | | +-+---+
4212 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
4213 | | | | | } |
| | | | +-----+
| | | +-+---+
4214 | | | | } |
| | | +-+---+
| | | +-+-------+
4214 | | | | else{ |
| | | +-+-------+
4215 | | | +--- //
4216 | | | | // SubRegionありの場合の varidの置換
4217 | | | | // SubRegionごとの varidCountを使用する。
4218 | | | | // iusw1も、SubRegion単位でのIdxで呼ばれている。(上位から)
4219 | | | | //
4220 | | | +--- SubRegion = (TSubRegion *)TargetSubRegion;
| | | | +------------------------------------------------+
4221 | | | +--+ for(j = 0 ; j < SubRegion->variedCount ; j++){ |
| | | | +--+---------------------------------------------+
| | | | | +--------------------------------------------------------------------+
4222 | | | | +--+ if(AnsiCompareText(Token->Str,SubRegion->variedValName[j]) == 0){ |
| | | | | +--+-----------------------------------------------------------------+
4223 | | | | | +--- // 定数に置換する。
4224 | | | | | +--- int Idx,Value;
4225 | | | | | |
4226 | | | | | +--- Idx = iusw1;
| | | | | | +--------------------------------------------------+
4227 | | | | | +--+ for(k = j+1 ; k < SubRegion->variedCount ; k++){ |
| | | | | | +--+-----------------------------------------------+
4228 | | | | | | +--- Idx /= (SubRegion->variedToValue[k]
4229 | | | | | | | - SubRegion->variedFromValue[k]+1);
| | | | | | +-+---+
4230 | | | | | | | } |
| | | | | | +-----+
4231 | | | | | +--- Idx = Idx % (SubRegion->variedToValue[j]
4232 | | | | | | - SubRegion->variedFromValue[j]+1); // 余り
4233 | | | | | +--- Value = SubRegion->variedFromValue[j] + Idx;
| | | | | | +----------------------+
4234 | | | | | +--+ if(s == Token->Str){ |
| | | | | | +--+-------------------+
4235 | | | | | | +--- s = IntToStr(Value);
| | | | | | +-+---+
4236 | | | | | | | } |
| | | | | | +-+---+
| | | | | | +-+-------+
4236 | | | | | | | else{ |
| | | | | | +-+-------+
4237 | | | | | | +--- s = " "+IntToStr(Value);
| | | | | | +-+---+
4238 | | | | | | | } |
| | | | | | +-----+
| | | | | | +--------+
4239 | | | | | +--+ break; |
| | | | | | +--------+
| | | | | +-+---+
4240 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
4241 | | | | | } |
| | | | +-----+
| | | +-+---+
4242 | | | | } |
| | | +-----+
4243 | | +--- fprintf(fp,"%s%s",IndentStr.c_str(),s.c_str());
4244 | | +--- IndentStr = "";
| | +-+---+
4245 | | | } |
| | +-+---+
| | +-+-------------------------------------------------------------------------+
4245 | | | else if((Token->TokId == tid_Comment1)||(Token->TokId == tid_Comment2)){ |
| | +-+-------------------------------------------------------------------------+
4246 | | +--- // コメントは、インデントなしで出力
4247 | | +--- fprintf(fp,"%s",Token->OrgStr.c_str());
4248 | | +--- IndentStr = "";
| | +-+---+
4249 | | | } |
| | +-+---+
| | +-+-------+
4249 | | | else{ |
| | +-+-------+
4250 | | +--- fprintf(fp,"%s%s",IndentStr.c_str(),Token->OrgStr.c_str());
4251 | | +--- IndentStr = "";
| | +-+---+
4252 | | | } |
| | +-----+
| +-+---+
4253 | | } |
| +-----+
+-+---+
4254 | } |
+-----+