abc プロジェクト
14.8.20. OutputExecCode メンバ関数説明 |
メンバ関数名 | OutputExecCode |
定義ファイル名 | TuneRegion.cpp |
定義行 | 2253 |
所属名 | TTuneRegion |
アクセス属性 | public |
宣言形式 | void OutputExecCode ( FILE * fp ) |
概要 | ABCLib_GGGFFF(...) のswich()付きの実行コードを生成する。 |
戻り値 | |
パラメタ説明 | fp 出力先ファイルポインタ |
機能説明 | |
備考 | |
呼出し元関数一覧表
呼出し先関数一覧表
参照外部変数一覧表
参照メンバ変数一覧表
参照先一覧表
関数論理チャート
| +--------------------------------------------+
2253 +--+ void TTuneRegion::OutputExecCode(FILE *fp) |
2254 | { |
+--+-----------------------------------------+
2255 +--- AnsiString s,s2;
2256 +--- int i,j;
2257 +--- TValData *ValData;
2258 +--- TToken *Token;
2259 +--- int DefPosS;
2260 |
2261 +--- RestoreValBits(TokenStartPos,TokenEndPos);
2262 +--- s = " subroutine "+FuncName + "(";
| +--------------------------------------------+
2263 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
2264 | +--+ if(ArgValList->Strings[i] == ""){ |
| | +--+---------------------------------+
| | | +------------+
2265 | | +--+ continue; |
| | | +------------+
| | +-+---+
2266 | | | } |
| | +-----+
2267 | +--- ValData = (TValData *)ArgValList->Objects[i];
2268 | +--- s += ValData->Str + ", ";
| +-+---+
2269 | | } |
| +-----+
2270 +--- s += "iusw1)";
2271 +--- fprintf(fp,"%s",SepLongStr(s).c_str());
2272 +--- fprintf(fp,"\n");
2273 +--- //
2274 | // 使用される引数の定義を出力する。
2275 | // DefPosS,E,ArrayDefPosS,Eを使用する。
2276 | // DefPosSが同じ変数は、1つにまとめること。
2277 | //
2278 +--- DefPosS = -1;
2279 +--- s = "";
| +--------------------------------------------+
2280 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
2281 | +--+ if(ArgValList->Strings[i] == ""){ |
| | +--+---------------------------------+
| | | +------------+
2282 | | +--+ continue; |
| | | +------------+
| | +-+---+
2283 | | | } |
| | +-----+
2284 | +--- ValData = (TValData *)ArgValList->Objects[i];
| | +--------------------------------------------------------------------+
2285 | +--+ if((DefPosS == -1)||(ValData->DefPosS != DefPosS)){ // 違う定義行 |
| | +--+-----------------------------------------------------------------+
| | | +--------------+
2286 | | +--+ if(s != ""){ |
| | | +--+-----------+
2287 | | | +--- fprintf(fp,"%s\n",s.c_str());
2288 | | | +--- s = "";
| | | +-+---+
2289 | | | | } |
| | | +-----+
2290 | | +--- s = GetDefStr(ValData);
| | | +--------------+
2291 | | +--+ if(s == ""){ |
| | | +--+-----------+
| | | | +------------+
2292 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
2293 | | | | } |
| | | +-----+
2294 | | +--- DefPosS = ValData->DefPosS;
| | +-+---+
2295 | | | } |
| | +-+---+
| | +-+-------+
2295 | | | else{ |
| | +-+-------+
2296 | | +--- s += ",";
| | +-+---+
2297 | | | } |
| | +-----+
2298 | +--- s += " " + ValData->Str;
| | +--------------------------------------------------------------------+
2299 | +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){ |
| | +--+-----------------------------------------------------------------+
2300 | | +--- Token = (TToken *)TokenList->Items[j];
2301 | | +--- s += Token->OrgStr;
| | +-+---+
2302 | | | } |
| | +-----+
| +-+---+
2303 | | } |
| +-----+
| +--------------+
2304 +--+ if(s != ""){ |
| +--+-----------+
2305 | +--- fprintf(fp,"%s\n",s.c_str());
2306 | +--- s = "";
| +-+---+
2307 | | } |
| +-----+
2308 +--- fprintf(fp," integer iusw1\n");
2309 +--- fprintf(fp,"\n");
2310 +--- fprintf(fp," select case(iusw1)\n");
2311 |
| +------------------------------------+
2312 +--+ for(i = 1 ; i <= CaseCount ; i++){ |
| +--+---------------------------------+
| | +--------------------+
2313 | +--+ if((i % 10) == 0){ |
| | +--+-----------------+
2314 | | +--- MainF->printNoLog("Output Code "+IntToStr(i)+" / "+IntToStr(CaseCount));
| | | +------------------------+
2315 | | +--+ if(MainF->CloseReqF){ |
| | | +--+---------------------+
| | | | +----------+
2316 | | | +--+ return; |
| | | | +----------+
| | | +-+---+
2317 | | | | } |
| | | +-----+
| | +-+---+
2318 | | | } |
| | +-----+
2319 | +--- fprintf(fp," case(%d)\n",i);
2320 | +--- s = "";
| | +--------------------------------------------+
2321 | +--+ for(j = 0 ; j < ArgValList->Count ; j++){ |
| | +--+-----------------------------------------+
| | | +------------------------------------+
2322 | | +--+ if(ArgValList->Strings[j] == ""){ |
| | | +--+---------------------------------+
| | | | +------------+
2323 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
2324 | | | | } |
| | | +-----+
2325 | | +--- ValData = (TValData *)ArgValList->Objects[j];
| | | +--------------+
2326 | | +--+ if(s != ""){ |
| | | +--+-----------+
2327 | | | +--- s += ", ";
| | | +-+---+
2328 | | | | } |
| | | +-----+
2329 | | +--- s += ValData->Str;
| | +-+---+
2330 | | | } |
| | +-----+
| | +----------------------------------------------------------------+
2331 | +--+ if(TuneKind == tkUnroll){ // UnRoll時は、サブルーチン集となる |
| | +--+-------------------------------------------------------------+
2332 | | +--- s2.printf(" call %s_%d(",FuncName,i);
2333 | | +--- s = s2 + s + ")";
2334 | | +--- s = SepLongStr(s);
2335 | | +--- fprintf(fp,"%s\n",s.c_str());
| | +-+---+
2336 | | | } |
| | +-+---+
| | +-+-------+
2336 | | | else{ |
| | +-+-------+
2337 | | +--- // if(TuneKind == tkSelect){ // 当面 Unroll以外は、Selectで処理
2338 | | | // Select時は、ソースコード(NestしたRegionがあれば置換する)
2339 | | | // さらに、先に別のネストがある可能性もあるので注意
2340 | | +--- OutputSelectCaseExecCode(fp,i);
| | +-+---+
2341 | | | } |
| | +-----+
| +-+---+
2342 | | } |
| +-----+
2343 +--- fprintf(fp," end select\n");
2344 +--- fprintf(fp,"\n");
2345 +--- fprintf(fp," return\n");
2346 +--- fprintf(fp," end\n");
2347 +--- fprintf(fp,"\n");
2348 +--- fprintf(fp,"\n");
2349 |
| +----------------------------------------------------------------+
2350 +--+ if(TuneKind == tkUnroll){ // UnRoll時は、サブルーチン集となる |
| +--+-------------------------------------------------------------+
2351 | +--- OutputUnrollExecCode(fp);
| +-+---+
2352 | | } |
| +-----+
+-+---+
2353 | } |
+-----+