abc プロジェクト
14.8.28. OutputUnrollExecCode メンバ関数説明

メンバ関数名 OutputUnrollExecCode
定義ファイル名TuneRegion.cpp
定義行 2411
所属名 TTuneRegion
アクセス属性 private
宣言形式 void OutputUnrollExecCode ( FILE * fp )
概要 Unrollのサブルーチンを出力する
戻り値
パラメタ説明 fp 出力先ファイルポインタ
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::OutputExecCode TuneRegion.cpp 2253

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::GetDefStr TuneRegion.cpp 2198
2 TTuneRegion::GetNewValName TuneRegion.cpp 3563
3 TTuneRegion::GetNewValName TuneRegion.cpp 3617
4 TTuneRegion::GetValCountOfBit TuneRegion.cpp 3691
5 TTuneRegion::OutputUnroll_DoBlock TuneRegion.cpp 2845
6 TTuneRegion::OutputUnroll_IfBlock TuneRegion.cpp 3417
7 TTuneRegion::OutputUnroll_Line TuneRegion.cpp 2718
8 TMainF::printNoLog main.cpp 244
9 TTuneRegion::SepLongStr TuneRegion.cpp 4274
10 c_str

11 fprintf

12 IndexOf

13 IntToStr

14 Pos

15 printf

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

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::ArgValList TuneRegion.h 140
2 TTuneRegion::CaseCount TuneRegion.h 141
3 TTuneRegion::CaseIdx TuneRegion.h 93
4 TTuneRegion::DoToken TuneRegion.h 182
5 TTuneRegion::DoTokPos TuneRegion.h 97
6 TTuneRegion::DoVal_i TuneRegion.h 100
7 TTuneRegion::DoVal_l TuneRegion.h 101
8 TTuneRegion::DoVal_m TuneRegion.h 99
9 TTuneRegion::DoValCount TuneRegion.h 104
10 TTuneRegion::DoValIdx TuneRegion.h 103
11 TTuneRegion::DoValName TuneRegion.h 102
12 TTuneRegion::DoValStr TuneRegion.h 98
13 TTuneRegion::DoValToken TuneRegion.h 183
14 TTuneRegion::FuncName TuneRegion.h 126
15 TTuneRegion::TokenEndPos TuneRegion.h 123
16 TTuneRegion::TokenList TuneRegion.h 120
17 TTuneRegion::TokenStartPos TuneRegion.h 122
18 TTuneRegion::UnrollCount TuneRegion.h 96
19 TTuneRegion::UnRollDoRefValBits TuneRegion.h 94
20 TTuneRegion::variedCount TuneRegion.h 157
21 TTuneRegion::variedFromValue TuneRegion.h 159
22 TTuneRegion::variedToValue TuneRegion.h 160

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

関数論理チャート

        |  +--------------------------------------------------+ 
  2411  +--+ void TTuneRegion::OutputUnrollExecCode(FILE *fp) | 
  2412     | {                                                | 
           +--+-----------------------------------------------+ 
  2413        +--- int TokPos;
  2414        +--- int i,j,DefPosS;
  2415        +--- TValData *ValData;
  2416        +--- AnsiString s,s2,ValDefStr;
  2417        +--- TToken *Token,*Token2;
  2418        +--- int iusw;
  2419        +--- int Len;
  2420        +--- int RollCount;
  2421        +--- int EndTokPos;
  2422        |    
  2423        +--- DoValCount = variedCount;
  2424        +--- //
  2425        |    // Doで使用する変数名を作成する。  
  2426        |    //                                 
              |  +----------------------------------------------------------+ 
  2427        +--+ for(DoValIdx = 0 ; DoValIdx < DoValCount ; DoValIdx++){  | 
              |  +--+-------------------------------------------------------+ 
  2428        |     +--- TValData *DoValData = (TValData *)DoValToken[DoValIdx]->ValData;
  2429        |     |    
  2430        |     +--- DoTokPos[DoValIdx] = TokenList->IndexOf(DoToken[DoValIdx]);
  2431        |     +--- DoValName[DoValIdx] = DoValData->Str;
  2432        |     +--- DoValStr[DoValIdx] = DoValData->Str;
  2433        |     +--- DoVal_m[DoValIdx] = GetNewValName(DoValData->Str,"m",ArgValList);
  2434        |     +--- DoVal_i[DoValIdx] = GetNewValName(DoValData->Str,"i",ArgValList);
  2435        |     +--- DoVal_l[DoValIdx] = GetNewValName(DoValData->Str,"l",ArgValList);
              |   +-+---+ 
  2436        |   |  }  | 
              |   +-----+ 
  2437        +--- //
  2438        |    // 指定種類だけのアンロールを行ったサブルーチンを作成する。      
  2439        |    // Sub名 . 引数 , 使用変数 , [コード] がセットされる。           
  2440        |    // コードによって、一時変数が必要となるので、それも追加される。  
  2441        |    //                                                               
              |  +------------------------------------------------------+ 
  2442        +--+ for(CaseIdx = 1 ; CaseIdx <= CaseCount ; CaseIdx++){ | 
              |  +--+---------------------------------------------------+ 
  2443        |     +--- //  for(CaseIdx = 2 ; CaseIdx <= 2 ; CaseIdx++){ // Test
  2444        |     +--- //
  2445        |     |    // DoValCountに合わせた、UnRoll数を求める。                          
  2446        |     |    // 現状では、 2段にLoopは対応していない。(RefBitsのクリアが必要)  
  2447        |     |    // また、DoValになる変数のUnrollDoRefValBitsを求める。               
  2448        |     |    //                                                                   
  2449        |     +--- int idx2,c;
  2450        |     |    
              |     |  +--------------------------+ 
  2451        |     +--+ if((CaseIdx % 10) == 0){ | 
              |     |  +--+-----------------------+ 
  2452        |     |     +--- MainF->printNoLog("Output Code "+IntToStr(CaseIdx)+" / "+IntToStr(CaseCount));
              |     |     |  +------------------------+ 
  2453        |     |     +--+ if(MainF->CloseReqF){  | 
              |     |     |  +--+---------------------+ 
              |     |     |     |  +----------+ 
  2454        |     |     |     +--+ return;  | 
              |     |     |     |  +----------+ 
              |     |     |   +-+---+ 
  2455        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2456        |     |   |  }  | 
              |     |   +-----+ 
  2457        |     +--- UnRollDoRefValBits = 0;
  2458        |     +--- idx2 = CaseIdx-1;
              |     |  +----------------------------------------------+ 
  2459        |     +--+ for(int kk = DoValCount-1 ; kk >= 0 ; kk--){ | 
              |     |  +--+-------------------------------------------+ 
  2460        |     |     +--- c = (variedToValue[kk] - variedFromValue[kk] + 1);
  2461        |     |     +--- UnrollCount[kk] = (idx2 % c)+1;
              |     |     |  +--------------------------+ 
  2462        |     |     +--+ if(UnrollCount[kk] > 1){ | 
              |     |     |  +--+-----------------------+ 
  2463        |     |     |     +--- UnRollDoRefValBits |= (1 << kk); // UnRollされるDoのBits
              |     |     |   +-+---+ 
  2464        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2465        |     |     +--- idx2 /= c;
              |     |   +-+---+ 
  2466        |     |   |  }  | 
              |     |   +-----+ 
  2467        |     +--- //
  2468        |     |    // 宣言部分  
  2469        |     |    //           
  2470        |     +--- s = "";
              |     |  +--------------------------------------------+ 
  2471        |     +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |     |  +--+-----------------------------------------+ 
              |     |     |  +------------------------------------+ 
  2472        |     |     +--+ if(ArgValList->Strings[i] == ""){  | 
              |     |     |  +--+---------------------------------+ 
              |     |     |     |  +------------+ 
  2473        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2474        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------+ 
  2475        |     |     +--+ if(s != ""){ | 
              |     |     |  +--+-----------+ 
  2476        |     |     |     +--- s += ", ";
              |     |     |   +-+---+ 
  2477        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2478        |     |     +--- ValData = (TValData *)ArgValList->Objects[i];
  2479        |     |     +--- s += ValData->Str;
              |     |   +-+---+ 
  2480        |     |   |  }  | 
              |     |   +-----+ 
  2481        |     +--- s2.printf("      subroutine %s_%d(%s)",FuncName,CaseIdx,s.c_str());
  2482        |     +--- fprintf(fp,"%s\n",SepLongStr(s2).c_str());
  2483        |     |    
  2484        |     +--- //
  2485        |     |    // 使用される引数の定義を出力する。          
  2486        |     |    // DefPosS,E,ArrayDefPosS,Eを使用する。      
  2487        |     |    // DefPosSが同じ変数は、1つにまとめること。 
  2488        |     |    //                                           
  2489        |     +--- DefPosS = -1;
  2490        |     +--- s = "";
              |     |  +--------------------------------------------+ 
  2491        |     +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |     |  +--+-----------------------------------------+ 
              |     |     |  +------------------------------------+ 
  2492        |     |     +--+ if(ArgValList->Strings[i] == ""){  | 
              |     |     |  +--+---------------------------------+ 
              |     |     |     |  +------------+ 
  2493        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2494        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2495        |     |     +--- ValData = (TValData *)ArgValList->Objects[i];
              |     |     |  +--------------------------------------------------------------------+ 
  2496        |     |     +--+ if((DefPosS == -1)||(ValData->DefPosS != DefPosS)){ // 違う定義行  | 
              |     |     |  +--+-----------------------------------------------------------------+ 
              |     |     |     |  +--------------+ 
  2497        |     |     |     +--+ if(s != ""){ | 
              |     |     |     |  +--+-----------+ 
  2498        |     |     |     |     +--- //                  fprintf(fp,"%s\n",s.c_str());
  2499        |     |     |     |     +--- fprintf(fp,"%s\n",SepLongStr(s).c_str());
  2500        |     |     |     |     +--- s = "";
              |     |     |     |   +-+---+ 
  2501        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2502        |     |     |     +--- s = GetDefStr(ValData);
              |     |     |     |  +--------------+ 
  2503        |     |     |     +--+ if(s == ""){ | 
              |     |     |     |  +--+-----------+ 
              |     |     |     |     |  +------------+ 
  2504        |     |     |     |     +--+ continue;  | 
              |     |     |     |     |  +------------+ 
              |     |     |     |   +-+---+ 
  2505        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2506        |     |     |     +--- DefPosS = ValData->DefPosS;
              |     |     |   +-+---+ 
  2507        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2507        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  2508        |     |     |     +--- s += ",";
              |     |     |   +-+---+ 
  2509        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2510        |     |     +--- s += " " + ValData->Str;
              |     |     |  +--------------------------------------------------------------------+ 
  2511        |     |     +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){  | 
              |     |     |  +--+-----------------------------------------------------------------+ 
  2512        |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  2513        |     |     |     +--- s += Token->OrgStr;
              |     |     |   +-+---+ 
  2514        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2515        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +--------------+ 
  2516        |     +--+ if(s != ""){ | 
              |     |  +--+-----------+ 
  2517        |     |     +--- //          fprintf(fp,"%s\n",s.c_str());
  2518        |     |     +--- fprintf(fp,"%s\n",SepLongStr(s).c_str());
  2519        |     |     +--- s = "";
              |     |   +-+---+ 
  2520        |     |   |  }  | 
              |     |   +-----+ 
  2521        |     +--- //
  2522        |     |    // 引数以外の変数の変数宣言を追加する。                    
  2523        |     |    // DO変数は対象外。DO依存変数は、名前を変えて複数にする。  
  2524        |     |    //                                                         
  2525        |     +--- DefPosS = -1;
  2526        |     +--- s = "";
  2527        |     +--- ValDefStr = "";
              |     |  +--------------------------------------------+ 
  2528        |     +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |     |  +--+-----------------------------------------+ 
              |     |     |  +----------------------------------------------------------+ 
  2529        |     |     +--+ if(ArgValList->Strings[i] != ""){ // 引数の変数は対象外  | 
              |     |     |  +--+-------------------------------------------------------+ 
              |     |     |     |  +------------+ 
  2530        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2531        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2532        |     |     +--- ValData = (TValData *)ArgValList->Objects[i];
              |     |     |  +------------------------------------------+ 
  2533        |     |     +--+ if(ValData->DefPosS == -1){ // 定義なし  | 
              |     |     |  +--+---------------------------------------+ 
              |     |     |     |  +------------+ 
  2534        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2535        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +----------------------------------------------------+ 
  2536        |     |     +--+ if(ValData->DefPosS != DefPosS){    // 違う定義行  | 
              |     |     |  +--+-------------------------------------------------+ 
              |     |     |     |  +--------------+ 
  2537        |     |     |     +--+ if(s != ""){ | 
              |     |     |     |  +--+-----------+ 
  2538        |     |     |     |     +--- //                  fprintf(fp,"%s\n",s.c_str());
  2539        |     |     |     |     +--- fprintf(fp,"%s\n",SepLongStr(s).c_str());
  2540        |     |     |     |     +--- s = "";
              |     |     |     |   +-+---+ 
  2541        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +----------------------------------------------------------+ 
  2542        |     |     |     +--+ for(j = ValData->DefPosS ; j < ValData->DefPosE ; j++){  | 
              |     |     |     |  +--+-------------------------------------------------------+ 
  2543        |     |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  2544        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |   +-+---+ 
  2545        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2546        |     |     |     +--- DefPosS = ValData->DefPosS;
  2547        |     |     |     +--- ValDefStr = s;
              |     |     |   +-+---+ 
  2548        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2548        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
              |     |     |     |  +--------------+ 
  2549        |     |     |     +--+ if(s == ""){ | 
              |     |     |     |  +--+-----------+ 
  2550        |     |     |     |     +--- s = ValDefStr;
              |     |     |     |   +-+---+ 
  2551        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  2551        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  2552        |     |     |     |     +--- s += ",";
              |     |     |     |   +-+---+ 
  2553        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2554        |     |     |     +--- //      s += ",";
              |     |     |   +-+---+ 
  2555        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------------------------------------------------+ 
  2556        |     |     +--+ if((ValData->RefDoValBits & UnRollDoRefValBits) == 0){ | 
              |     |     |  +--+-----------------------------------------------------+ 
  2557        |     |     |     +--- // UnrollするDo変数の束縛を受けない変数。
              |     |     |     |  +--------------+ 
  2558        |     |     |     +--+ if(s == ""){ | 
              |     |     |     |  +--+-----------+ 
  2559        |     |     |     |     +--- s = ValDefStr;
              |     |     |     |   +-+---+ 
  2560        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2561        |     |     |     +--- s += " " + ValData->Str;
              |     |     |     |  +--------------------------------------------------------------------+ 
  2562        |     |     |     +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){  | 
              |     |     |     |  +--+-----------------------------------------------------------------+ 
  2563        |     |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  2564        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |   +-+---+ 
  2565        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  2566        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2566        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  2567        |     |     |     +--- //
  2568        |     |     |     |    // Do依存変数は、N個に多重化する。                      
  2569        |     |     |     |    // これは、どのDo変数に依存しているかによってUnroll数が  
  2570        |     |     |     |    // 変化するので、それに合わせての形となる。              
  2571        |     |     |     |    // 束縛されているDo変数における、もっとも大きい数?      
  2572        |     |     |     |    //                                                       
  2573        |     |     |     +--- RollCount = GetValCountOfBit(ValData->RefDoValBits & UnRollDoRefValBits,UnrollCount);
              |     |     |     |  +--------------------------------------------+ 
  2574        |     |     |     +--+ for(iusw = 1; iusw <= RollCount ; iusw++){ | 
              |     |     |     |  +--+-----------------------------------------+ 
              |     |     |     |     |  +----------------------+ 
  2575        |     |     |     |     +--+ if((iusw % 4) == 1){ | 
              |     |     |     |     |  +--+-------------------+ 
              |     |     |     |     |     |  +------------------------------------------+ 
  2576        |     |     |     |     |     +--+ if(iusw == 1){ // 4変数ごとに改行する。 | 
              |     |     |     |     |     |  +--+---------------------------------------+ 
  2577        |     |     |     |     |     |     +--- s = ValDefStr + " " + ValData->Str;
              |     |     |     |     |     |   +-+---+ 
  2578        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-+---+ 
              |     |     |     |     |     |   +-+-------+ 
  2578        |     |     |     |     |     |   |  else{  | 
              |     |     |     |     |     |   +-+-------+ 
  2579        |     |     |     |     |     |     +--- //                          if(ValDefStr[1] == '\n'){ // 改行コードの処理変更 2009/02/24
              |     |     |     |     |     |     |  +--------------------------------+ 
  2580        |     |     |     |     |     |     +--+ if(ValDefStr.Pos("\n") != 0){  | 
              |     |     |     |     |     |     |  +--+-----------------------------+ 
  2581        |     |     |     |     |     |     |     +--- //                              fprintf(fp,"%s",s.c_str());
  2582        |     |     |     |     |     |     |     +--- fprintf(fp,"%s",SepLongStr(s).c_str());
              |     |     |     |     |     |     |   +-+---+ 
  2583        |     |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |     |   +-+---+ 
              |     |     |     |     |     |     |   +-+-------+ 
  2583        |     |     |     |     |     |     |   |  else{  | 
              |     |     |     |     |     |     |   +-+-------+ 
  2584        |     |     |     |     |     |     |     +--- //                              fprintf(fp,"%s\n",s.c_str());
  2585        |     |     |     |     |     |     |     +--- fprintf(fp,"%s\n",SepLongStr(s).c_str());
              |     |     |     |     |     |     |   +-+---+ 
  2586        |     |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |     |   +-----+ 
  2587        |     |     |     |     |     |     +--- s = ValDefStr + " " + GetNewValName(ValData->Str,iusw,ArgValList);
              |     |     |     |     |     |   +-+---+ 
  2588        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
  2589        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------+ 
  2589        |     |     |     |     |   |  else{  | 
              |     |     |     |     |   +-+-------+ 
  2590        |     |     |     |     |     +--- s += ", " + GetNewValName(ValData->Str,iusw,ArgValList);
              |     |     |     |     |   +-+---+ 
  2591        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |     |  +--------------------------------------------------------------------+ 
  2592        |     |     |     |     +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){  | 
              |     |     |     |     |  +--+-----------------------------------------------------------------+ 
  2593        |     |     |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  2594        |     |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |   +-+---+ 
  2595        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  2596        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------+ 
  2597        |     |     |     +--+ if(s != ""){ | 
              |     |     |     |  +--+-----------+ 
  2598        |     |     |     |     +--- fprintf(fp,"%s\n",SepLongStr(s).c_str());
  2599        |     |     |     |     +--- s = "";
              |     |     |     |   +-+---+ 
  2600        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  2601        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2602        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +--------------+ 
  2603        |     +--+ if(s != ""){ | 
              |     |  +--+-----------+ 
  2604        |     |     +--- //          fprintf(fp,"%s\n",s.c_str());
  2605        |     |     +--- fprintf(fp,"%s\n",SepLongStr(s).c_str());
  2606        |     |     +--- s = "";
              |     |   +-+---+ 
  2607        |     |   |  }  | 
              |     |   +-----+ 
  2608        |     +--- fprintf(fp,"\n");
  2609        |     |    
  2610        |     +--- //
  2611        |     |    // コードを出力する。基本的に範囲をトークンでスキャンして動く。      
  2612        |     |    // 必要に応じて文字列の置き換えや、必要コードのセットを行う。        
  2613        |     |    // 行単位で処理する。                                                
  2614        |     |    // 複数のDOに対応するために、スクリプトでの処理となる。            
  2615        |     |    // Doの出現順は、順番(ネスト)になっている(コンパイルエラーなし)  
  2616        |     |    // よって、DoValIdx = 0,1... 1, 0 の順に処理される。                 
  2617        |     |    //                                                                   
  2618        |     +--- DoValIdx = 0;
  2619        |     +--- // 共有変数 UnRollDoRefValBitsは、UnRollの深さごとにSet/Reset
  2620        |     +--- UnRollDoRefValBits = 0;
              |     |  +----------------------------------------------------------------+ 
  2621        |     +--+ for(TokPos = TokenStartPos ; TokPos < TokenEndPos ; TokPos++){ | 
              |     |  +--+-------------------------------------------------------------+ 
  2622        |     |     +--- Token = (TToken *)TokenList->Items[TokPos];
  2623        |     |     +--- s = Token->OrgStr;
              |     |     |  +----------------------------+ 
  2624        |     |     +--+ if(Token->Script != NULL){ | 
              |     |     |  +--+-------------------------+ 
  2625        |     |     |     +--- // スクリプトは、Skip
              |     |     |     |  +------------+ 
  2626        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2627        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------------------------------------+ 
  2627        |     |     |   |  else if((Token->TokId == tid_Comment1)||(Token->TokId == tid_Comment2)){ | 
              |     |     |   +-+-------------------------------------------------------------------------+ 
  2628        |     |     |     +--- fprintf(fp,"%s",Token->OrgStr); // コメントは、そのまま
              |     |     |     |  +------------+ 
  2629        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2630        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+---------------------------------------+ 
  2630        |     |     |   |  else if(Token->TokId == tid_LineEnd){  | 
              |     |     |   +-+---------------------------------------+ 
              |     |     |     |  +--------------------------+ 
  2631        |     |     |     +--+ if(Token->OrgStr != ""){ | 
              |     |     |     |  +--+-----------------------+ 
  2632        |     |     |     |     +--- fprintf(fp,"\n"); // 改行も、そのまま
              |     |     |     |   +-+---+ 
  2633        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +------------+ 
  2634        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2635        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-----------------------+ 
  2635        |     |     |   |  else if(CaseIdx == 1){ | 
              |     |     |   +-+-----------------------+ 
  2636        |     |     |     +--- // UnRollなしの場合は、そのまま出力
  2637        |     |     |     +--- s = "";
              |     |     |     |  +------------------------------------------+ 
  2638        |     |     |     +--+ for( ; TokPos < TokenEndPos ; TokPos++){ | 
              |     |     |     |  +--+---------------------------------------+ 
  2639        |     |     |     |     +--- Token = (TToken *)TokenList->Items[TokPos];
  2640        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |  +----------------------------------+ 
  2641        |     |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |     |  +--------+ 
  2642        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
  2643        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  2644        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2645        |     |     |     +--- //              fprintf(fp,"%s",s.c_str());
  2646        |     |     |     +--- fprintf(fp,"%s",SepLongStr(s).c_str());
              |     |     |     |  +------------+ 
  2647        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2648        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2649        |     |     +--- //
  2650        |     |     |    // UnRool対象のDo変数を含む式およびDOブロックの多重化コードを出力する。  
  2651        |     |     |    // ブロックの場合は、ブロック終了まで解析をSkipする。                
  2652        |     |     |    // かなりの、引数を渡すことになるので、クラスで共有する形とする。        
  2653        |     |     |    // DoRefValBitsは、多重化対象をクリアした形で渡され、内部でさらに        
  2654        |     |     |    // OR が行われる形で使用されることになる。                               
  2655        |     |     |    // 多重化数(cc)の回数のブロックまたは行に多重化する。                    
  2656        |     |     |    // RollCount = 1の場合もあるが、そのままのブロック・行となる。           
  2657        |     |     |    //                                                                       
              |     |     |  +------------------------------+ 
  2658        |     |     +--+ if(Token->TokId == tid_DO){  | 
              |     |     |  +--+---------------------------+ 
  2659        |     |     |     +--- // DOのブロックを出力(END_DO,Moduloの処理まで行う)
  2660        |     |     |     |    // ここで行った多重化をマスクした DoRefValBitsを渡す。 
  2661        |     |     |     +--- EndTokPos = OutputUnroll_DoBlock(fp,TokPos,0,0);
              |     |     |   +-+---+ 
  2662        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+---------------------------------+ 
  2662        |     |     |   |  else if(Token->TokId == tid_IF){ | 
              |     |     |   +-+---------------------------------+ 
  2663        |     |     |     +--- // IFのブロックを出力 if .. endifが対象
  2664        |     |     |     +--- EndTokPos = OutputUnroll_IfBlock(fp,TokPos,0,0);
              |     |     |   +-+---+ 
  2665        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+---------------------------------+ 
  2665        |     |     |   |  else if(Token->ValData != NULL){ | 
              |     |     |   +-+---------------------------------+ 
  2666        |     |     |     +--- // 1行を出力
  2667        |     |     |     +--- EndTokPos = OutputUnroll_Line(fp,TokPos,0,0);
              |     |     |   +-+---+ 
  2668        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2668        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  2669        |     |     |     +--- // DO,IF,代入文以外
  2670        |     |     |     +--- int j;
  2671        |     |     |     +--- s = "";
              |     |     |     |  +------------------------------------------+ 
  2672        |     |     |     +--+ for(j = TokPos ; j < TokenEndPos ; j++){ | 
              |     |     |     |  +--+---------------------------------------+ 
  2673        |     |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  2674        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |  +----------------------------------+ 
  2675        |     |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |     |  +--------+ 
  2676        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
  2677        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  2678        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2679        |     |     |     +--- //              fprintf(fp,"%s",s.c_str());
  2680        |     |     |     +--- fprintf(fp,"%s",SepLongStr(s).c_str());
  2681        |     |     |     +--- EndTokPos = j;
              |     |     |   +-+---+ 
  2682        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2683        |     |     +--- TokPos = EndTokPos;
              |     |   +-+---+ 
  2684        |     |   |  }  | 
              |     |   +-----+ 
  2685        |     +--- fprintf(fp,"\n");
  2686        |     +--- fprintf(fp,"      return\n");
  2687        |     +--- fprintf(fp,"      end\n");
  2688        |     +--- fprintf(fp,"\n");
  2689        |     +--- fprintf(fp,"\n");
  2690        |     +--- // サブルーチン終了(Case回繰り返される)
              |   +-+---+ 
  2691        |   |  }  | 
              |   +-----+ 
            +-+---+ 
  2692      |  }  | 
            +-----+