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