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