abc プロジェクト
21.2. AddSubFuncDef 関数説明

関数名 AddSubFuncDef
定義ファイル名pass2.cpp
定義行 455
宣言形式 void AddSubFuncDef ( TList * TokenList , int sPos , int ePos , TList * ValDataList )
概要 SUBROUTINE , FUNCTIONの文(行)の処理を行う。
引数のValDataを生成して、 ValDataに ArgF=trueをセットする。
戻り値 なし
パラメタ説明 TokenList 処理するトークンリスト
sPos TokenList上での開始位置
ePos TokenList上での終了位置
ValDataList 変数データリスト
機能説明 SUBROUTINE , FUNCTIONの文(行)の処理を行う。
出現した変数名をValDataListに追加する。この時ValDataにArgF=trueをセットし
て、サブルーチンやFunctionの引数として変数が使われていることを設定
する。
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 Pass2_Line pass2.cpp 104

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 Add

2 AnsiCompareText

3 Trim

参照外部変数一覧表
名称 定義ファイル名 定義行
1 ImplType pass2.cpp 23
2 ModuleIdx pass2.cpp 20

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

関数論理チャート

        |  +----------------------------------------------------------------------------+ 
   455  +--+ void AddSubFuncDef(TList *TokenList,int sPos,int ePos,TList *ValDataList)  | 
   456     | {                                                                          | 
           +--+-------------------------------------------------------------------------+ 
   457        +--- int i,j;
   458        +--- TToken *Token;
   459        +--- int TokId;
   460        +--- AnsiString TokStr,ValName;
   461        |    
              |  +----------------------------------+ 
   462        +--+ for(i = sPos ; i <= ePos ; i++){ | 
              |  +--+-------------------------------+ 
   463        |     +--- Token = (TToken *)TokenList->Items[i];
   464        |     +--- TokId = Token->TokId;
   465        |     +--- TokStr = Token->Str;
   466        |     |    
              |     |  +------------------------------------------+ 
   467        |     +--+ if(TokId == tid_LineEnd){   // 1行終了  | 
              |     |  +--+---------------------------------------+ 
              |     |     |  +--------+ 
   468        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |   +-+---+ 
   469        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +------------------------------------------------+ 
   470        |     +--+ if(TokId != -1){    // 変数トークンのみが対象  | 
              |     |  +--+---------------------------------------------+ 
              |     |     |  +------------+ 
   471        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
   472        |     |   |  }  | 
              |     |   +-----+ 
   473        |     +--- //
   474        |     |    // すでに、同じMoudelIdxで、宣言されている同名変数があるかを調べる。   
   475        |     |    // あれば、追加しない。(型の一致かどうかの判定は、コンパイラまかせ)  
   476        |     |    //                                                                     
   477        |     +--- TValData *ValData;
   478        |     +--- bool NewValDataF = true;
   479        |     |    
   480        |     +--- ValName = Trim(TokStr);
              |     |  +--------------------------------------------+ 
   481        |     +--+ for(j = 0 ; j < ValDataList->Count ; j++){ | 
              |     |  +--+-----------------------------------------+ 
   482        |     |     +--- ValData = (TValData *)ValDataList->Items[j];
              |     |     |  +----------------------------------------------------+ 
   483        |     |     +--+ if((AnsiCompareText(ValData->Str,ValName) == 0)&&  | 
   484        |     |     |  |     (ValData->ModuleIdx == ModuleIdx)){            | 
              |     |     |  +--+-------------------------------------------------+ 
   485        |     |     |     +--- NewValDataF = false;
              |     |     |     |  +--------+ 
   486        |     |     |     +--+ break; | 
              |     |     |     |  +--------+ 
              |     |     |   +-+---+ 
   487        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   488        |     |   |  }  | 
              |     |   +-----+ 
   489        |     +--- //
   490        |     |    // 変数リストに追加する。  
   491        |     |    //                         
              |     |  +------------------+ 
   492        |     +--+ if(NewValDataF){ | 
              |     |  +--+---------------+ 
   493        |     |     +--- ValData = new TValData(ValName);
   494        |     |     +--- ValDataList->Add((void *)ValData);
   495        |     |     +--- ValData->ModuleIdx = ModuleIdx;
   496        |     |     +--- ValData->DataType = ImplType[ValName[1]]; // 暗黙の宣言
   497        |     |     +--- ValData->DefPos = -1;
   498        |     |     +--- ValData->ArgF = true;   // ArgFをセット
              |     |   +-+---+ 
   499        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
   499        |     |   |  else{  | 
              |     |   +-+-------+ 
   500        |     |     +--- ValData->ArgF = true;   // ArgFをセット
              |     |   +-+---+ 
   501        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   502        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   503      |  }  | 
            +-----+