abc プロジェクト
14.8.25. OutputUnroll_DoBlock メンバ関数説明

メンバ関数名 OutputUnroll_DoBlock
定義ファイル名TuneRegion.cpp
定義行 2845
所属名 TTuneRegion
アクセス属性 public
宣言形式 int OutputUnroll_DoBlock ( FILE * fp , int TokPos , DWORD UsedDoRefValBits , int RefValIdx )
概要 多重化したDO_Blockを出力する。
RefValIdxは、Countに対しての番号となる。(呼び出し側から指定される)
最後のトークン(通常はtid_LineEnd)の位置を返す。
多重化に合わせた変数の置換も行われる。

UseDoRefValBitsは、このブロックで分割対象となっているDoRefValのbitを示す。
RefValIdxは、UseDoRefValBitsで1になっているBitのCount総和における番号を示
す。
呼び出し時のUseDoRefValBitsから新たに1になるBitsだけが繰り返し対象となる。
その場合のRefValIdxは、新たなUseDoRefValBitsでのIdxに再計算され先に渡され
る。
戻り値
パラメタ説明 fp 出力先ファイルポインタ
TokPos トークン位置
UsedDoRefValBits 使用中DO参照変数Bits
RefValIdx 参照変数インデックス
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::OutputUnroll_DoBlock TuneRegion.cpp 2845
2 TTuneRegion::OutputUnroll_IfBlock TuneRegion.cpp 3417
3 TTuneRegion::OutputUnrollExecCode TuneRegion.cpp 2411

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::CalNewRefValIdx TuneRegion.cpp 3726
2 TTuneRegion::ChangeFromOrgStr TuneRegion.cpp 3781
3 TMainF::err main.cpp 271
4 TTuneRegion::GetValAddValue TuneRegion.cpp 3880
5 TTuneRegion::GetValCountOfBit TuneRegion.cpp 3691
6 TTuneRegion::OutputUnroll_DoBlock TuneRegion.cpp 2845
7 TTuneRegion::OutputUnroll_IfBlock TuneRegion.cpp 3417
8 TTuneRegion::OutputUnroll_Line TuneRegion.cpp 2718
9 TTuneRegion::SepLongStr TuneRegion.cpp 4274
10 c_str

11 fprintf

12 IntToStr

13 Length

14 SubString

15 Trim

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

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::DoEndEPos TuneRegion.h 187
2 TTuneRegion::DoEndSPos TuneRegion.h 186
3 TTuneRegion::DoStartEPos TuneRegion.h 185
4 TTuneRegion::DoStartSPos TuneRegion.h 184
5 TTuneRegion::DoStepEPos TuneRegion.h 189
6 TTuneRegion::DoStepSPos TuneRegion.h 188
7 TTuneRegion::DoToken TuneRegion.h 182
8 TTuneRegion::DoTokPos TuneRegion.h 97
9 TTuneRegion::DoVal_i TuneRegion.h 100
10 TTuneRegion::DoVal_l TuneRegion.h 101
11 TTuneRegion::DoVal_m TuneRegion.h 99
12 TTuneRegion::DoValIdx TuneRegion.h 103
13 TTuneRegion::DoValStr TuneRegion.h 98
14 TTuneRegion::DoValToken TuneRegion.h 183
15 TTuneRegion::OffsetStr TuneRegion.h 146
16 TTuneRegion::TokenEndPos TuneRegion.h 123
17 TTuneRegion::TokenList TuneRegion.h 120
18 TTuneRegion::UnrollCount TuneRegion.h 96
19 TTuneRegion::UnRollDoRefValBits TuneRegion.h 94

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

関数論理チャート

        |  +--------------------------------------------------------------------------------------------------+ 
  2845  +--+ int TTuneRegion::OutputUnroll_DoBlock(FILE *fp,int TokPos,DWORD UsedDoRefValBits,int RefValIdx)  | 
  2846     | {                                                                                                | 
           +--+-----------------------------------------------------------------------------------------------+ 
  2847        +--- int EndTokPos;
  2848        +--- TToken *Token,*Token2;
  2849        +--- TValData *ValData;
  2850        +--- AnsiString s;
  2851        +--- int i,j;
  2852        +--- int RollCount;
  2853        +--- int bkDoValIdx = DoValIdx;
  2854        +--- bool UnRollDoF = false;
  2855        +--- bool StartValueIs1F;
  2856        +--- DWORD DoRefValBits;
  2857        +--- DWORD NextUsedDoRefValBits; // 次に渡す Do変数参照(処理済)bit
  2858        +--- DWORD NowUseDoRefValBits;   // 今回の分割数となる UseDoRefValBits
  2859        +--- int NewRefValIdx;           // 次に渡すRefValIdx (of NextUseDoRefValBits)
  2860        +--- DWORD bkUnRollDoRefValBits = UnRollDoRefValBits;
  2861        +--- int AddValue;
  2862        |    
  2863        +--- //
  2864        |    // DO文の入り口の処理を行う。  
  2865        |    //                             
  2866        +--- Token = (TToken *)TokenList->Items[TokPos];
              |  +------------------------------------------------------------------+ 
  2867        +--+ if((Token != DoToken[DoValIdx])||(UnrollCount[DoValIdx] <= 1)){  | 
              |  +--+---------------------------------------------------------------+ 
  2868        |     +--- //
  2869        |     |    // UnRoll対象でない場合は、DO文の行は、DO参照変数の置換のみを行って戻る。  
  2870        |     |    //                                                                         
              |     |  +----------------------------------+ 
  2871        |     +--+ if(Token == DoToken[DoValIdx]){  | 
              |     |  +--+-------------------------------+ 
  2872        |     |     +--- DoValIdx++;
              |     |   +-+---+ 
  2873        |     |   |  }  | 
              |     |   +-----+ 
  2874        |     +--- TokPos = OutputUnroll_Line(fp,TokPos,UsedDoRefValBits,RefValIdx);
  2875        |     +--- TokPos++; // LineEndをSkipする
              |   +-+---+ 
  2876        |   |  }  | 
              |   +-+---+ 
              |   +-+-------+ 
  2876        |   |  else{  | 
              |   +-+-------+ 
  2877        |     +--- //
  2878        |     |    // UnRoll対象DO文の入り口の処理を行う。            
  2879        |     |    // DOの前処理の式を挿入する。(DO依存変数を含まない) 
  2880        |     |    // この場合も、DO参照変数の置換は、対象とすること。  
  2881        |     |    //                                                   
  2882        |     |    // Exp.       im =  N/2  // Unrollした変数           
  2883        |     |    //            i = 1      // 参照変数                 
  2884        |     |    //            do ii=1,im // doの実行回数も変更       
  2885        |     |    //                                                   
  2886        |     |    //[       im = N/2]                                  
  2887        |     |                                                         
  2888        |     +--- UnRollDoF = true;
  2889        |     +--- UnRollDoRefValBits |= (1 << DoValIdx); // 変数Bitsをセットする。
  2890        |     |                                                                     
  2891        |     +--- s = DoVal_m[DoValIdx] + " = ";
  2892        |     +--- s = ChangeFromOrgStr(DoToken[DoValIdx]->OrgStr,s);  // Doの変数を置換
  2893        |     |                                                                           
  2894        |     +--- // 開始が1かチェック
  2895        |     +--- StartValueIs1F = false;
              |     |  +--------------------------------------------------------+ 
  2896        |     +--+ if(DoStartSPos[DoValIdx]+1 == DoStartEPos[DoValIdx]){  | 
              |     |  +--+-----------------------------------------------------+ 
  2897        |     |     +--- Token = (TToken *)TokenList->Items[DoStartSPos[DoValIdx]];
              |     |     |  +----------------------------------+ 
  2898        |     |     +--+ if(Trim(Token->OrgStr) == "1"){  | 
              |     |     |  +--+-------------------------------+ 
  2899        |     |     |     +--- StartValueIs1F = true;
              |     |     |   +-+---+ 
  2900        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2901        |     |   |  }  | 
              |     |   +-----+ 
  2902        |     |    
              |     |  +----------------------------------------------------------------------------+ 
  2903        |     +--+ if((DoStartSPos[DoValIdx]+1 != DoStartEPos[DoValIdx])||(!StartValueIs1F)){ | 
              |     |  +--+-------------------------------------------------------------------------+ 
  2904        |     |     +--- s += "(";
              |     |   +-+---+ 
  2905        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------+ 
  2906        |     +--+ for(i = DoEndSPos[DoValIdx] ; i < DoEndEPos[DoValIdx] ; i++){  | 
              |     |  +--+-------------------------------------------------------------+ 
  2907        |     |     +--- Token = (TToken *)TokenList->Items[i];
  2908        |     |     +--- // ここも、変数変更
  2909        |     |     +--- ValData = (TValData *)Token->ValData;
  2910        |     |     +--- AddValue = 0;
              |     |     |  +----------------------------------------------------------------------------+ 
  2911        |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |  +--+-------------------------------------------------------------------------+ 
  2912        |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  2913        |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  2914        |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |   +-+---+ 
  2915        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------------+ 
  2916        |     |     +--+ if(AddValue != 0){ | 
              |     |     |  +--+-----------------+ 
  2917        |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |   +-+---+ 
  2918        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2918        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  2919        |     |     |     +--- s += Token->OrgStr;
              |     |     |   +-+---+ 
  2920        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2921        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------+ 
  2922        |     +--+ if(!StartValueIs1F){ | 
              |     |  +--+-------------------+ 
  2923        |     |     +--- s += "-";
              |     |     |  +--------------------------------------------------------------------+ 
  2924        |     |     +--+ for(i = DoStartSPos[DoValIdx] ; i < DoStartEPos[DoValIdx] ; i++){  | 
              |     |     |  +--+-----------------------------------------------------------------+ 
  2925        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
  2926        |     |     |     +--- // ここも、変数変更
  2927        |     |     |     +--- ValData = (TValData *)Token->ValData;
  2928        |     |     |     +--- AddValue = 0;
              |     |     |     |  +----------------------------------------------------------------------------+ 
  2929        |     |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |     |  +--+-------------------------------------------------------------------------+ 
  2930        |     |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  2931        |     |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  2932        |     |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |     |   +-+---+ 
  2933        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------------+ 
  2934        |     |     |     +--+ if(AddValue != 0){ | 
              |     |     |     |  +--+-----------------+ 
  2935        |     |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |     |   +-+---+ 
  2936        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  2936        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  2937        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |   +-+---+ 
  2938        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  2939        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2940        |     |     +--- s += "+1";
              |     |   +-+---+ 
  2941        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------------------+ 
  2942        |     +--+ if((DoStartSPos[DoValIdx]+1 != DoStartEPos[DoValIdx])||(!StartValueIs1F)){ | 
              |     |  +--+-------------------------------------------------------------------------+ 
  2943        |     |     +--- s += ")";
              |     |   +-+---+ 
  2944        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------+ 
  2945        |     +--+ if(DoStepSPos[DoValIdx] == DoStepEPos[DoValIdx]){  | 
              |     |  +--+-------------------------------------------------+ 
  2946        |     |     +--- s += "/" + IntToStr(UnrollCount[DoValIdx]);
              |     |   +-+---+ 
  2947        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
  2947        |     |   |  else{  | 
              |     |   +-+-------+ 
  2948        |     |     +--- s += "/(" + IntToStr(UnrollCount[DoValIdx]) + "*(";
              |     |     |  +------------------------------------------------------------------+ 
  2949        |     |     +--+ for(i = DoStepSPos[DoValIdx] ; i < DoStepEPos[DoValIdx] ; i++){  | 
              |     |     |  +--+---------------------------------------------------------------+ 
  2950        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
  2951        |     |     |     +--- // ここも、変数変更
  2952        |     |     |     +--- ValData = (TValData *)Token->ValData;
  2953        |     |     |     +--- AddValue = 0;
              |     |     |     |  +----------------------------------------------------------------------------+ 
  2954        |     |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |     |  +--+-------------------------------------------------------------------------+ 
  2955        |     |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  2956        |     |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  2957        |     |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |     |   +-+---+ 
  2958        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------------+ 
  2959        |     |     |     +--+ if(AddValue != 0){ | 
              |     |     |     |  +--+-----------------+ 
  2960        |     |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |     |   +-+---+ 
  2961        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  2961        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  2962        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |   +-+---+ 
  2963        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2964        |     |     |     +--- //              s += Token->OrgStr;
              |     |     |   +-+---+ 
  2965        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2966        |     |     +--- s += "))";
              |     |   +-+---+ 
  2967        |     |   |  }  | 
              |     |   +-----+ 
  2968        |     +--- s = SepLongStr(s);
  2969        |     +--- fprintf(fp,"%s\n",s.c_str());
  2970        |     +--- //[       i = 1]
  2971        |     +--- s = DoValStr[DoValIdx] + " = ";
  2972        |     +--- s = ChangeFromOrgStr(DoToken[DoValIdx]->OrgStr,s);  // Doの変数を置換
              |     |  +--------------------------------------------------------------------+ 
  2973        |     +--+ for(i = DoStartSPos[DoValIdx] ; i < DoStartEPos[DoValIdx] ; i++){  | 
              |     |  +--+-----------------------------------------------------------------+ 
  2974        |     |     +--- Token = (TToken *)TokenList->Items[i];
  2975        |     |     +--- // ここも、変数変更
  2976        |     |     +--- ValData = (TValData *)Token->ValData;
  2977        |     |     +--- AddValue = 0;
              |     |     |  +----------------------------------------------------------------------------+ 
  2978        |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |  +--+-------------------------------------------------------------------------+ 
  2979        |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  2980        |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  2981        |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |   +-+---+ 
  2982        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------------+ 
  2983        |     |     +--+ if(AddValue != 0){ | 
              |     |     |  +--+-----------------+ 
  2984        |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |   +-+---+ 
  2985        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2985        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  2986        |     |     |     +--- s += Token->OrgStr;
              |     |     |   +-+---+ 
  2987        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2988        |     |     +--- //          s += Token->OrgStr;
              |     |   +-+---+ 
  2989        |     |   |  }  | 
              |     |   +-----+ 
  2990        |     +--- s = SepLongStr(s);
  2991        |     +--- fprintf(fp,"%s\n",s.c_str());
  2992        |     +--- // Do文の出力を行う
  2993        |     +--- s = "";
              |     |  +--------------------------------------------------+ 
  2994        |     +--+ for(i = TokPos ; i < DoEndEPos[DoValIdx] ; i++){ | 
              |     |  +--+-----------------------------------------------+ 
  2995        |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |  +------------------------------------+ 
  2996        |     |     +--+ if(Token == DoValToken[DoValIdx]){ | 
              |     |     |  +--+---------------------------------+ 
  2997        |     |     |     +--- s += ChangeFromOrgStr(Token->OrgStr,DoVal_i[DoValIdx]); // Doの変数を置換
              |     |     |     |  +------------+ 
  2998        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2999        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +----------------------------------+ 
  3000        |     |     +--+ if(i == DoStartSPos[DoValIdx]){  | 
              |     |     |  +--+-------------------------------+ 
  3001        |     |     |     +--- s += "1";   // 開始値は、常に1
              |     |     |     |  +------------+ 
  3002        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  3003        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------------------------------+ 
  3003        |     |     |   |  else if((i > DoStartSPos[DoValIdx])&&(i < DoStartEPos[DoValIdx])){ | 
              |     |     |   +-+-------------------------------------------------------------------+ 
              |     |     |     |  +------------------------------+ 
  3004        |     |     |     +--+ continue;   // 開始値をSkip  | 
              |     |     |     |  +------------------------------+ 
              |     |     |   +-+---+ 
  3005        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------------------------+ 
  3006        |     |     +--+ if(i == DoEndSPos[DoValIdx]){  | 
              |     |     |  +--+-----------------------------+ 
  3007        |     |     |     +--- s += DoVal_m[DoValIdx]; // Doの終了式を置換
  3008        |     |     |     +--- i = DoEndEPos[DoValIdx]-1;
              |     |     |     |  +------------+ 
  3009        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  3010        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3011        |     |     +--- s += Token->OrgStr;
              |     |     |  +----------------------------------+ 
  3012        |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |  +--+-------------------------------+ 
              |     |     |     |  +--------+ 
  3013        |     |     |     +--+ break; | 
              |     |     |     |  +--------+ 
              |     |     |   +-+---+ 
  3014        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  3015        |     |   |  }  | 
              |     |   +-----+ 
  3016        |     +--- s = SepLongStr(s);
  3017        |     +--- fprintf(fp,"%s",s.c_str());
  3018        |     +--- // Do文の終わりまで TokPosをSkip
  3019        |     +--- TokPos = DoEndEPos[DoValIdx];
  3020        |     +--- DoValIdx++; // Next Nest Do (Doの最後で戻る)
              |   +-+---+ 
  3021        |   |  }  | 
              |   +-----+ 
  3022        +--- //    DoValIdx++; // Next Nest Do (Doの最後で戻る)
  3023        |                                                         
  3024        +--- //
  3025        |    // EndDoまでスキャンする。 
  3026        |    //                         
              |  +------------------------------------------+ 
  3027        +--+ for( ; TokPos < TokenEndPos ; TokPos++){ | 
              |  +--+---------------------------------------+ 
  3028        |     +--- Token = (TToken *)TokenList->Items[TokPos];
              |     |  +----------------------------+ 
  3029        |     +--+ if(Token->Script != NULL){ | 
              |     |  +--+-------------------------+ 
  3030        |     |     +--- // スクリプトは、Skip
              |     |     |  +------------+ 
  3031        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
  3032        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------------------------------------------------------------------------+ 
  3032        |     |   |  else if((Token->TokId == tid_Comment1)||(Token->TokId == tid_Comment2)){ | 
              |     |   +-+-------------------------------------------------------------------------+ 
  3033        |     |     +--- fprintf(fp,"%s",Token->OrgStr); // コメントは、そのまま
              |     |     |  +------------+ 
  3034        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
  3035        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------------------------------------+ 
  3035        |     |   |  else if(Token->TokId == tid_ENDDO){  | 
              |     |   +-+-------------------------------------+ 
  3036        |     |     +--- // EndDoの処理へ
              |     |     |  +--------+ 
  3037        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |   +-+---+ 
  3038        |     |   |  }  | 
              |     |   +-----+ 
  3039        |     +--- //
  3040        |     |    // 行内で、UnRoll有効中のDo変数を参照しているかを調べる。  
  3041        |     |    // もし、使用中であれば、多重化の対象となる。              
  3042        |     |    // 多重化は、代入文とDo文とする。(2004/08/26)              
  3043        |     |    //                                                         
  3044        |     +--- DoRefValBits = 0;
              |     |  +------------------------------------------+ 
  3045        |     +--+ for(j = TokPos ; j < TokenEndPos ; j++){ | 
              |     |  +--+---------------------------------------+ 
  3046        |     |     +--- Token2 = (TToken *)TokenList->Items[j];
              |     |     |  +------------------------------------+ 
  3047        |     |     +--+ if(Token2->TokId == tid_LineEnd){  | 
              |     |     |  +--+---------------------------------+ 
              |     |     |     |  +--------+ 
  3048        |     |     |     +--+ break; | 
              |     |     |     |  +--------+ 
              |     |     |   +-+---+ 
  3049        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------------------------+ 
  3050        |     |     +--+ if(Token2->TokId == tid_DO){ | 
              |     |     |  +--+---------------------------+ 
  3051        |     |     |     +--- // Doの後の変数をスキップ(除外) DO 100などはサポート外
  3052        |     |     |     +--- j++;
              |     |     |   +-+---+ 
  3053        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------------------------+ 
  3054        |     |     +--+ if(Token2->ValData == NULL){ | 
              |     |     |  +--+---------------------------+ 
              |     |     |     |  +------------+ 
  3055        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  3056        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3057        |     |     +--- ValData = (TValData *)Token2->ValData;
  3058        |     |     +--- DoRefValBits |= ValData->RefDoValBits;
              |     |   +-+---+ 
  3059        |     |   |  }  | 
              |     |   +-----+ 
  3060        |     +--- DoRefValBits &= UnRollDoRefValBits;
  3061        |     +--- // 次に渡す Do変数参照(処理済)bitを決定(OR)
  3062        |     +--- NextUsedDoRefValBits = DoRefValBits | UsedDoRefValBits;
  3063        |     +--- NowUseDoRefValBits = DoRefValBits & (~UsedDoRefValBits);
  3064        |     +--- RollCount = GetValCountOfBit(NowUseDoRefValBits,UnrollCount);
              |     |  +------------------------------------------------------------------------+ 
  3065        |     +--+ for(int AndRefValIdx = 0 ; AndRefValIdx < RollCount ; AndRefValIdx++){ | 
              |     |  +--+---------------------------------------------------------------------+ 
  3066        |     |     +--- //
  3067        |     |     |    // NewRefValIdxを計算する。  
  3068        |     |     |    //                           
              |     |     |  +----------------------------------------------------------------------+ 
  3069        |     |     +--+ if(RollCount <= 1){ // 分割が発生しない場合は、呼び出し元がそのまま  | 
              |     |     |  +--+-------------------------------------------------------------------+ 
  3070        |     |     |     +--- NewRefValIdx = RefValIdx;
              |     |     |   +-+---+ 
  3071        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  3071        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  3072        |     |     |     +--- // 新たに分割が発生する場合には、計算が必要
  3073        |     |     |     |    // RefValIdx : UseDoRefValBits                                   
  3074        |     |     |     |    // kk ; AndUseDoRefValBits の2つを合成した NewRefValIdxを計算。 
  3075        |     |     |     |    // [32] の要素で合成する。                                      
  3076        |     |     |     |    //                                                               
  3077        |     |     |     +--- NewRefValIdx = CalNewRefValIdx(RefValIdx,UsedDoRefValBits,
  3078        |     |     |     |                    AndRefValIdx,NowUseDoRefValBits,UnrollCount);  
              |     |     |   +-+---+ 
  3079        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------------------------+ 
  3080        |     |     +--+ if(Token->TokId == tid_DO){  | 
              |     |     |  +--+---------------------------+ 
  3081        |     |     |     +--- // DOのブロックを出力(END_DO,Moduloの処理まで行う)
  3082        |     |     |     +--- EndTokPos = OutputUnroll_DoBlock(fp,TokPos,NextUsedDoRefValBits,NewRefValIdx);
              |     |     |     |  +----------------------------------------------------------+ 
  3083        |     |     |     +--+ if(AndRefValIdx < RollCount-1){ // 継続がある場合は改行  | 
              |     |     |     |  +--+-------------------------------------------------------+ 
  3084        |     |     |     |     +--- fprintf(fp,"\n");
              |     |     |     |   +-+---+ 
  3085        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  3086        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+---------------------------------+ 
  3086        |     |     |   |  else if(Token->TokId == tid_IF){ | 
              |     |     |   +-+---------------------------------+ 
  3087        |     |     |     +--- // IFのブロックを出力 if .. endifが対象
  3088        |     |     |     +--- EndTokPos = OutputUnroll_IfBlock(fp,TokPos,NextUsedDoRefValBits,NewRefValIdx);
              |     |     |     |  +----------------------------------------------------------+ 
  3089        |     |     |     +--+ if(AndRefValIdx < RollCount-1){ // 継続がある場合は改行  | 
              |     |     |     |  +--+-------------------------------------------------------+ 
  3090        |     |     |     |     +--- fprintf(fp,"\n");
              |     |     |     |   +-+---+ 
  3091        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  3092        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+---------------------------------+ 
  3092        |     |     |   |  else if(Token->ValData != NULL){ | 
              |     |     |   +-+---------------------------------+ 
  3093        |     |     |     +--- // 代入文1行を出力
  3094        |     |     |     +--- EndTokPos = OutputUnroll_Line(fp,TokPos,NextUsedDoRefValBits,NewRefValIdx);
              |     |     |   +-+---+ 
  3095        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  3095        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  3096        |     |     |     +--- // それ以外の文は、そのまま出力する
  3097        |     |     |     +--- int j;
  3098        |     |     |     |    
  3099        |     |     |     +--- s = "";
              |     |     |     |  +------------------------------------------+ 
  3100        |     |     |     +--+ for(j = TokPos ; j < TokenEndPos ; j++){ | 
              |     |     |     |  +--+---------------------------------------+ 
  3101        |     |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  3102        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |  +----------------------------------+ 
  3103        |     |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |     |  +--------+ 
  3104        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
  3105        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  3106        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------------------------+ 
  3107        |     |     |     +--+ if((s != "")&&(s[1] == ' ')){  | 
              |     |     |     |  +--+-----------------------------+ 
  3108        |     |     |     |     +--- s = OffsetStr + s;
              |     |     |     |   +-+---+ 
  3109        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3110        |     |     |     +--- s = SepLongStr(s);
  3111        |     |     |     +--- fprintf(fp,"%s",s.c_str());
  3112        |     |     |     +--- EndTokPos = j;
              |     |     |   +-+---+ 
  3113        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  3114        |     |   |  }  | 
              |     |   +-----+ 
  3115        |     +--- TokPos = EndTokPos;
              |   +-+---+ 
  3116        |   |  }  | 
              |   +-----+ 
              |  +----------------------------------------------------------+ 
  3117        +--+ if(TokPos >= TokenEndPos){  // EndDOが見つからなかった。 | 
              |  +--+-------------------------------------------------------+ 
  3118        |     +--- MainF->err("文法解析エラー。ENDDOが見つからなかった。");
              |     |  +----------------+ 
  3119        |     +--+ return 99999;  | 
              |     |  +----------------+ 
              |   +-+---+ 
  3120        |   |  }  | 
              |   +-----+ 
  3121        +--- //
  3122        |    // EndDoの処理を行う 
  3123        |    //                   
  3124        +--- DoValIdx = bkDoValIdx;
  3125        +--- UnRollDoRefValBits = bkUnRollDoRefValBits;
  3126        +--- Token = (TToken *)TokenList->Items[TokPos];
              |  +------------------+ 
  3127        +--+ if(!UnRollDoF){  | 
              |  +--+---------------+ 
  3128        |     +--- //
  3129        |     |    // UnRoll対象でない場合は、ENDDOの行は、DO参照変数の置換のみを行う。 
  3130        |     |    //                                                                   
  3131        |     |    //                                                                   
  3132        |     +--- TokPos = OutputUnroll_Line(fp,TokPos,UsedDoRefValBits,RefValIdx);
              |   +-+---+ 
  3133        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------+ 
  3133        |   |  else if(Token->TokId == tid_ENDDO){  | 
              |   +-+-------------------------------------+ 
  3134        |     +--- //
  3135        |     |    // EndDoの処理 (DO変数を含まない、これも含む場合あり)  
  3136        |     |    // EndDoの前に、変数の加算が入る。                     
  3137        |     |    // EndDoの後に、Modulo()の処理が入る                   
  3138        |     |    //                                                     
  3139        |     +--- AnsiString s2,s3;
  3140        |     +--- AnsiString BaseStr;
  3141        |     |    
  3142        |     +--- s3 = Token->OrgStr; // End DO Token
  3143        |     +--- BaseStr = ChangeFromOrgStr(DoToken[DoValIdx]->OrgStr,"");
              |     |  +----------------------------------+ 
  3144        |     +--+ if(UnrollCount[DoValIdx] != 1){  | 
              |     |  +--+-------------------------------+ 
  3145        |     |     +--- s2 = BaseStr + "  ";
  3146        |     |     +--- s2 += DoValStr[DoValIdx] + " = " + DoValStr[DoValIdx] + "+";
  3147        |     |     +--- s2 += IntToStr(UnrollCount[DoValIdx]);
  3148        |     |     |    
              |     |     |  +----------------------------------------------------+ 
  3149        |     |     +--+ if(DoStepSPos[DoValIdx] != DoStepEPos[DoValIdx]){  | 
              |     |     |  +--+-------------------------------------------------+ 
  3150        |     |     |     +--- s2 += "*(";
              |     |     |     |  +--------------------------------------------------------------------+ 
  3151        |     |     |     +--+ for(int k3 = DoStepSPos[DoValIdx];k3 < DoStepEPos[DoValIdx];k3++){ | 
              |     |     |     |  +--+-----------------------------------------------------------------+ 
  3152        |     |     |     |     +--- Token = (TToken *)TokenList->Items[k3];
  3153        |     |     |     |     +--- s2 += Token->Str;
              |     |     |     |   +-+---+ 
  3154        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3155        |     |     |     +--- s2 += ")";
              |     |     |   +-+---+ 
  3156        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3157        |     |     +--- s2 = SepLongStr(s2);
  3158        |     |     +--- fprintf(fp,"%s\n",s2.c_str());
              |     |   +-+---+ 
  3159        |     |   |  }  | 
              |     |   +-----+ 
  3160        |     +--- s3 = SepLongStr(s3);
  3161        |     +--- fprintf(fp,"%s",s3.c_str());
  3162        |     +--- //
  3163        |     |    // 余り部分の処理を行う。  
  3164        |     |    // modulo, if を追加する。 
  3165        |     |    //                         
  3166        |     +--- fprintf(fp,"\n");
  3167        |     +--- BaseStr = ChangeFromOrgStr(DoToken[DoValIdx]->OrgStr,"");
  3168        |     +--- s = BaseStr;
  3169        |     +--- s += DoVal_l[DoValIdx] + " = modulo(";
  3170        |     |    
  3171        |     +--- StartValueIs1F = false;
              |     |  +--------------------------------------------------------+ 
  3172        |     +--+ if(DoStartSPos[DoValIdx]+1 == DoStartEPos[DoValIdx]){  | 
              |     |  +--+-----------------------------------------------------+ 
  3173        |     |     +--- Token = (TToken *)TokenList->Items[DoStartSPos[DoValIdx]];
              |     |     |  +----------------------------------+ 
  3174        |     |     +--+ if(Trim(Token->OrgStr) == "1"){  | 
              |     |     |  +--+-------------------------------+ 
  3175        |     |     |     +--- StartValueIs1F = true;
              |     |     |   +-+---+ 
  3176        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  3177        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------------------+ 
  3178        |     +--+ if((DoStartSPos[DoValIdx]+1 != DoStartEPos[DoValIdx])||(!StartValueIs1F)){ | 
              |     |  +--+-------------------------------------------------------------------------+ 
  3179        |     |     +--- s += "(";
              |     |   +-+---+ 
  3180        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------+ 
  3181        |     +--+ for(i = DoEndSPos[DoValIdx] ; i < DoEndEPos[DoValIdx] ; i++){  | 
              |     |  +--+-------------------------------------------------------------+ 
  3182        |     |     +--- Token = (TToken *)TokenList->Items[i];
  3183        |     |     +--- // ここも、変数変更
  3184        |     |     +--- ValData = (TValData *)Token->ValData;
  3185        |     |     +--- AddValue = 0;
              |     |     |  +----------------------------------------------------------------------------+ 
  3186        |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |  +--+-------------------------------------------------------------------------+ 
  3187        |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  3188        |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  3189        |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |   +-+---+ 
  3190        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------------+ 
  3191        |     |     +--+ if(AddValue != 0){ | 
              |     |     |  +--+-----------------+ 
  3192        |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |   +-+---+ 
  3193        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  3193        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  3194        |     |     |     +--- s += Token->OrgStr;
              |     |     |   +-+---+ 
  3195        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3196        |     |     +--- //          s += Token->OrgStr;
              |     |   +-+---+ 
  3197        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------+ 
  3198        |     +--+ if(!StartValueIs1F){ | 
              |     |  +--+-------------------+ 
  3199        |     |     +--- s += "-";
              |     |     |  +--------------------------------------------------------------------+ 
  3200        |     |     +--+ for(i = DoStartSPos[DoValIdx] ; i < DoStartEPos[DoValIdx] ; i++){  | 
              |     |     |  +--+-----------------------------------------------------------------+ 
  3201        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
  3202        |     |     |     +--- // ここも、変数変更
  3203        |     |     |     +--- ValData = (TValData *)Token->ValData;
  3204        |     |     |     +--- AddValue = 0;
              |     |     |     |  +----------------------------------------------------------------------------+ 
  3205        |     |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |     |  +--+-------------------------------------------------------------------------+ 
  3206        |     |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  3207        |     |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  3208        |     |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |     |   +-+---+ 
  3209        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------------+ 
  3210        |     |     |     +--+ if(AddValue != 0){ | 
              |     |     |     |  +--+-----------------+ 
  3211        |     |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |     |   +-+---+ 
  3212        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  3212        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  3213        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |   +-+---+ 
  3214        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3215        |     |     |     +--- //              s += Token->OrgStr;
              |     |     |   +-+---+ 
  3216        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3217        |     |     +--- s += "+1";
              |     |   +-+---+ 
  3218        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------------------+ 
  3219        |     +--+ if((DoStartSPos[DoValIdx]+1 != DoStartEPos[DoValIdx])||(!StartValueIs1F)){ | 
              |     |  +--+-------------------------------------------------------------------------+ 
  3220        |     |     +--- s += ")";
              |     |   +-+---+ 
  3221        |     |   |  }  | 
              |     |   +-----+ 
  3222        |     |    
  3223        |     +--- s += ",";
              |     |  +----------------------------------------------------+ 
  3224        |     +--+ if(DoStepSPos[DoValIdx] == DoStepEPos[DoValIdx]){  | 
              |     |  +--+-------------------------------------------------+ 
  3225        |     |     +--- s += IntToStr(UnrollCount[DoValIdx]);
              |     |   +-+---+ 
  3226        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
  3226        |     |   |  else{  | 
              |     |   +-+-------+ 
  3227        |     |     +--- s += IntToStr(UnrollCount[DoValIdx]) + "*(";
              |     |     |  +------------------------------------------------------------------+ 
  3228        |     |     +--+ for(i = DoStepSPos[DoValIdx] ; i < DoStepEPos[DoValIdx] ; i++){  | 
              |     |     |  +--+---------------------------------------------------------------+ 
  3229        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
  3230        |     |     |     +--- // ここも、変数変更
  3231        |     |     |     +--- ValData = (TValData *)Token->ValData;
  3232        |     |     |     +--- AddValue = 0;
              |     |     |     |  +----------------------------------------------------------------------------+ 
  3233        |     |     |     +--+ if((ValData != NULL)&&((ValData->RefDoValBits & UnRollDoRefValBits)!= 0)){ | 
              |     |     |     |  +--+-------------------------------------------------------------------------+ 
  3234        |     |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  3235        |     |     |     |     |               ValData->RefDoValBits & UnRollDoRefValBits, 
  3236        |     |     |     |     |               DoValIdx,UnrollCount);                      
              |     |     |     |   +-+---+ 
  3237        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------------+ 
  3238        |     |     |     +--+ if(AddValue != 0){ | 
              |     |     |     |  +--+-----------------+ 
  3239        |     |     |     |     +--- s += "("+Token->OrgStr+"+"+IntToStr(AddValue)+")";
              |     |     |     |   +-+---+ 
  3240        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  3240        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  3241        |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |   +-+---+ 
  3242        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3243        |     |     |     +--- //              s += Token->OrgStr;
              |     |     |   +-+---+ 
  3244        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3245        |     |     +--- s += ")";
              |     |   +-+---+ 
  3246        |     |   |  }  | 
              |     |   +-----+ 
  3247        |     +--- s += ")";
  3248        |     +--- s = SepLongStr(s);
  3249        |     +--- fprintf(fp,"%s\n",s.c_str());
  3250        |     |    
  3251        |     +--- s = BaseStr;
  3252        |     +--- s += "if ("+DoVal_l[DoValIdx] + " .ne. 0) then";
  3253        |     +--- s = SepLongStr(s);
  3254        |     +--- fprintf(fp,"%s\n",s.c_str());
  3255        |     |    
  3256        |     +--- //
  3257        |     |    // 余りの処理のためのDo部分の出力                                        
  3258        |     |    // これに対しては、内部のUnrollは行わない。(プログラムが長くなるため)  
  3259        |     |    //                                                                       
  3260        |     +--- int TokPos2; // 内部Do用のTokPos
  3261        |     |                                     
  3262        |     +--- OffsetStr += "  ";
              |     |  +--------------------------------------------------------------------+ 
  3263        |     +--+ for(TokPos2 = DoTokPos[DoValIdx] ; TokPos2 <= TokPos ; TokPos2++){ | 
              |     |  +--+-----------------------------------------------------------------+ 
  3264        |     |     +--- Token = (TToken *)TokenList->Items[TokPos2];
  3265        |     |     +--- s = Token->OrgStr;
              |     |     |  +----------------------------+ 
  3266        |     |     +--+ if(Token->Script != NULL){ | 
              |     |     |  +--+-------------------------+ 
  3267        |     |     |     +--- // スクリプトは、ここでは、Skip
              |     |     |     |  +------------+ 
  3268        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  3269        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------------------------------------+ 
  3269        |     |     |   |  else if((Token->TokId == tid_Comment1)||(Token->TokId == tid_Comment2)){ | 
              |     |     |   +-+-------------------------------------------------------------------------+ 
  3270        |     |     |     +--- fprintf(fp,"%s",Token->OrgStr); // コメント
              |     |     |     |  +------------+ 
  3271        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  3272        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+---------------------------------------------------------+ 
  3272        |     |     |   |  else if(Token == DoToken[DoValIdx]){   // 該当Do文の出現 | 
              |     |     |   +-+---------------------------------------------------------+ 
  3273        |     |     |     +--- //
  3274        |     |     |     |    // 初期値を置換した Doを生成  
  3275        |     |     |     |    //                             
  3276        |     |     |     +--- s = "  ";
              |     |     |     |  +----------------------------------------+ 
  3277        |     |     |     +--+ for( ; TokPos2 < TokPos ; TokPos2++){  | 
              |     |     |     |  +--+-------------------------------------+ 
  3278        |     |     |     |     +--- Token = (TToken *)TokenList->Items[TokPos2];
              |     |     |     |     |  +------------------------------------------+ 
  3279        |     |     |     |     +--+ if(TokPos2 == DoStartEPos[DoValIdx]-1){  | 
              |     |     |     |     |  +--+---------------------------------------+ 
  3280        |     |     |     |     |     +--- s += Token->OrgStr;
  3281        |     |     |     |     |     +--- s += "+"+DoVal_m[DoValIdx] + "*" + IntToStr(UnrollCount[DoValIdx]); // Doの変数を置換
              |     |     |     |     |     |  +----------------------------------------------------+ 
  3282        |     |     |     |     |     +--+ if(DoStepSPos[DoValIdx] != DoStepEPos[DoValIdx]){  | 
              |     |     |     |     |     |  +--+-------------------------------------------------+ 
  3283        |     |     |     |     |     |     +--- s += "*(";
              |     |     |     |     |     |     |  +------------------------------------------------------------------+ 
  3284        |     |     |     |     |     |     +--+ for(i = DoStepSPos[DoValIdx] ; i < DoStepEPos[DoValIdx] ; i++){  | 
              |     |     |     |     |     |     |  +--+---------------------------------------------------------------+ 
  3285        |     |     |     |     |     |     |     +--- Token = (TToken *)TokenList->Items[i];
  3286        |     |     |     |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |     |     |   +-+---+ 
  3287        |     |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |     |   +-----+ 
  3288        |     |     |     |     |     |     +--- s += ")";
              |     |     |     |     |     |   +-+---+ 
  3289        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
  3290        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------+ 
  3290        |     |     |     |     |   |  else{  | 
              |     |     |     |     |   +-+-------+ 
  3291        |     |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |   +-+---+ 
  3292        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |     |  +----------------------------------+ 
  3293        |     |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |     |  +--------+ 
  3294        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
  3295        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  3296        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3297        |     |     |     +--- fprintf(fp,"%s",s.c_str());
              |     |     |     |  +------------+ 
  3298        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  3299        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3300        |     |     +--- //
  3301        |     |     |    // 行内で、UnRoll有効中のDo変数を参照しているかを調べる。          
  3302        |     |     |    // もし、使用中であれば、多重化の対象となる。                      
  3303        |     |     |    //                                                                 
  3304        |     |     |    // Modulo内での多重化対象は、UnRollしたDO変数自体は対象外とする。  
  3305        |     |     |    // ようは、UnRoll対象での外側のUseBitのみが多重化対象となる。      
  3306        |     |     |    //                                                                 
  3307        |     |     +--- DoRefValBits = 0;
              |     |     |  +--------------------------------------------+ 
  3308        |     |     +--+ for(j = TokPos2 ; j < TokenEndPos ; j++){  | 
              |     |     |  +--+-----------------------------------------+ 
  3309        |     |     |     +--- Token2 = (TToken *)TokenList->Items[j];
              |     |     |     |  +------------------------------------+ 
  3310        |     |     |     +--+ if(Token2->TokId == tid_LineEnd){  | 
              |     |     |     |  +--+---------------------------------+ 
              |     |     |     |     |  +--------+ 
  3311        |     |     |     |     +--+ break; | 
              |     |     |     |     |  +--------+ 
              |     |     |     |   +-+---+ 
  3312        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +------------------------------+ 
  3313        |     |     |     +--+ if(Token2->TokId == tid_DO){ | 
              |     |     |     |  +--+---------------------------+ 
  3314        |     |     |     |     +--- // Doの後の変数をスキップ(除外) DO 100などはサポート外
  3315        |     |     |     |     +--- j++;
              |     |     |     |   +-+---+ 
  3316        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +------------------------------+ 
  3317        |     |     |     +--+ if(Token2->ValData == NULL){ | 
              |     |     |     |  +--+---------------------------+ 
              |     |     |     |     |  +------------+ 
  3318        |     |     |     |     +--+ continue;  | 
              |     |     |     |     |  +------------+ 
              |     |     |     |   +-+---+ 
  3319        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3320        |     |     |     +--- ValData = (TValData *)Token2->ValData;
  3321        |     |     |     +--- DoRefValBits |= ValData->RefDoValBits;
              |     |     |   +-+---+ 
  3322        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3323        |     |     +--- DoRefValBits &= UnRollDoRefValBits; // UnRoll対象(今のDoを除く)
  3324        |     |     +--- // 次に渡す Do変数参照(処理済)bitを決定(OR)
  3325        |     |     +--- NextUsedDoRefValBits = DoRefValBits | UsedDoRefValBits;
  3326        |     |     +--- NowUseDoRefValBits = DoRefValBits & (~UsedDoRefValBits);
  3327        |     |     |    
  3328        |     |     +--- //      fprintf(fp,"DoRefValBits %04X UnRollDoRefValBits %04X\n",
  3329        |     |     |    //      DoRefValBits , UnRollDoRefValBits);                                                    
  3330        |     |     |    //      fprintf(fp,"UsedDoRefValBits %04X NextUseDoRefValBits %04X NowUseDoRefValBits %04X\n", 
  3331        |     |     |    //      UsedDoRefValBits, NextUsedDoRefValBits , NowUseDoRefValBits);                          
  3332        |     |     |                                                                                                   
  3333        |     |     +--- RollCount = GetValCountOfBit(NowUseDoRefValBits,UnrollCount);
              |     |     |  +------------------------------------------------------------------------+ 
  3334        |     |     +--+ for(int AndRefValIdx = 0 ; AndRefValIdx < RollCount ; AndRefValIdx++){ | 
              |     |     |  +--+---------------------------------------------------------------------+ 
  3335        |     |     |     +--- //
  3336        |     |     |     |    // NewRefValIdxを計算する。  
  3337        |     |     |     |    //                           
              |     |     |     |  +----------------------------------------------------------------------+ 
  3338        |     |     |     +--+ if(RollCount <= 1){ // 分割が発生しない場合は、呼び出し元がそのまま  | 
              |     |     |     |  +--+-------------------------------------------------------------------+ 
  3339        |     |     |     |     +--- NewRefValIdx = RefValIdx;
              |     |     |     |   +-+---+ 
  3340        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  3340        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  3341        |     |     |     |     +--- // 新たに分割が発生する場合には、計算が必要
  3342        |     |     |     |     |    // RefValIdx : UseDoRefValBits                                   
  3343        |     |     |     |     |    // kk ; AndUseDoRefValBits の2つを合成した NewRefValIdxを計算。 
  3344        |     |     |     |     |    // [32] の要素で合成する。                                      
  3345        |     |     |     |     |    //                                                               
  3346        |     |     |     |     +--- NewRefValIdx = CalNewRefValIdx(RefValIdx,UsedDoRefValBits,
  3347        |     |     |     |     |                    AndRefValIdx,NowUseDoRefValBits,UnrollCount);  
              |     |     |     |   +-+---+ 
  3348        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  3349        |     |     |     +--- //      fprintf(fp,"  NewRefValIdx %d RefValIdx %d\n",
  3350        |     |     |     |    //      NewRefValIdx,RefValIdx);                       
              |     |     |     |  +------------------------------+ 
  3351        |     |     |     +--+ if(Token->TokId == tid_DO){  | 
              |     |     |     |  +--+---------------------------+ 
  3352        |     |     |     |     +--- // DOのブロックを出力(END_DO,Moduloの処理まで行う)
  3353        |     |     |     |     +--- EndTokPos = OutputUnroll_DoBlock(fp,TokPos2,NextUsedDoRefValBits,NewRefValIdx);
              |     |     |     |   +-+---+ 
  3354        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+---------------------------------+ 
  3354        |     |     |     |   |  else if(Token->TokId == tid_IF){ | 
              |     |     |     |   +-+---------------------------------+ 
  3355        |     |     |     |     +--- // IFのブロックを出力 if .. endifが対象
  3356        |     |     |     |     +--- EndTokPos = OutputUnroll_IfBlock(fp,TokPos2,NextUsedDoRefValBits,NewRefValIdx);
              |     |     |     |   +-+---+ 
  3357        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+---------------------------------+ 
  3357        |     |     |     |   |  else if(Token->ValData != NULL){ | 
              |     |     |     |   +-+---------------------------------+ 
  3358        |     |     |     |     +--- // 代入文1行を出力
  3359        |     |     |     |     +--- EndTokPos = OutputUnroll_Line(fp,TokPos2,NextUsedDoRefValBits,NewRefValIdx);
              |     |     |     |   +-+---+ 
  3360        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  3360        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  3361        |     |     |     |     +--- // それ以外の文は、そのまま出力する
  3362        |     |     |     |     +--- int j;
  3363        |     |     |     |     |    
  3364        |     |     |     |     +--- s = "";
              |     |     |     |     |  +--------------------------------------------+ 
  3365        |     |     |     |     +--+ for(j = TokPos2 ; j < TokenEndPos ; j++){  | 
              |     |     |     |     |  +--+-----------------------------------------+ 
  3366        |     |     |     |     |     +--- Token = (TToken *)TokenList->Items[j];
  3367        |     |     |     |     |     +--- s += Token->OrgStr;
              |     |     |     |     |     |  +----------------------------------+ 
  3368        |     |     |     |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |     |     |     |  +--+-------------------------------+ 
              |     |     |     |     |     |     |  +--------+ 
  3369        |     |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |     |  +--------+ 
              |     |     |     |     |     |   +-+---+ 
  3370        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
  3371        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |     |  +--------------------------------+ 
  3372        |     |     |     |     +--+ if((s != "")&&(s[1] == ' ')){  | 
              |     |     |     |     |  +--+-----------------------------+ 
  3373        |     |     |     |     |     +--- s = OffsetStr + s;
              |     |     |     |     |   +-+---+ 
  3374        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
  3375        |     |     |     |     +--- s = SepLongStr(s);
  3376        |     |     |     |     +--- fprintf(fp,"%s",s.c_str());
  3377        |     |     |     |     +--- EndTokPos = j;
              |     |     |     |   +-+---+ 
  3378        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  3379        |     |     |   |  }  | 
              |     |     |   +-----+ 
  3380        |     |     +--- TokPos2 = EndTokPos;
              |     |   +-+---+ 
  3381        |     |   |  }  | 
              |     |   +-----+ 
  3382        |     +--- s = BaseStr + "endif";
  3383        |     +--- fprintf(fp,"%s",s.c_str());
  3384        |     +--- //      fprintf(fp,"%s",s.c_str());
  3385        |     +--- OffsetStr = OffsetStr.SubString(3,OffsetStr.Length());
              |   +-+---+ 
  3386        |   |  }  | 
              |   +-----+ 
              |  +----------------+ 
  3387        +--+ return TokPos; | 
              |  +----------------+ 
            +-+---+ 
  3388      |  }  | 
            +-----+