| 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 | } |
+-----+