abc プロジェクト
14.8.16. MakeArgValList メンバ関数説明 |
メンバ関数名 | MakeArgValList |
定義ファイル名 | TuneRegion.cpp |
定義行 | 457 |
所属名 | TTuneRegion |
アクセス属性 | private |
宣言形式 | void MakeArgValList ( ) |
概要 | チューニングリージョンのサブルーチンに渡す引数リストを生成する。 チューニングリージョン外との連携が必要な変数の一覧を作成する。 チューニングリージョン内で最初に参照、チューニングリージョン外で後で参照(S UBROTIONの引数を含む)をチェックする。
TokenEndPosの後までチェック(tid_end)して、参照があるかチェックする。 |
戻り値 | |
パラメタ説明 | |
機能説明 | |
備考 | |
呼出し元関数一覧表
呼出し先関数一覧表
|
名称 |
定義ファイル名 |
定義行 |
1 |
AddObject |
|
|
2 |
IndexOfObject |
|
|
参照メンバ変数一覧表
参照先一覧表
関数論理チャート
| +------------------------------------+
457 +--+ void TTuneRegion::MakeArgValList() |
458 | { |
+--+---------------------------------+
459 +--- int i,Idx,j;
460 +--- TToken *Token;
461 +--- TValData *ValData,*ValData2;
462 |
| +--------------------------------------------------+
463 +--+ for(i = TokenStartPos ; i <= TokenEndPos ; i++){ |
| +--+-----------------------------------------------+
464 | +--- Token = (TToken *)TokenList->Items[i];
| | +------------------------------+
465 | +--+ if(Token->ValData != NULL){ |
| | +--+---------------------------+
466 | | +--- // MainF->print(Token->Str);
467 | | +--- ValData = (TValData *)Token->ValData;
| | | +----------------------------------------------------------+
468 | | +--+ if(ValData->ArrayOrFuncF && (ValData->ArrayLevel == 0)){ |
| | | +--+-------------------------------------------------------+
| | | | +------------------------------------------------+
469 | | | +--+ continue; // 関数は、対象外 |
| | | | +------------------------------------------------+
| | | +-+---+
470 | | | | } |
| | | +-----+
| | | +----------------------------------------------------------+
471 | | +--+ if(ArgValList->IndexOfObject((TObject *)ValData) != -1){ |
| | | +--+-------------------------------------------------------+
| | | | +------------------------+
472 | | | +--+ continue; // 処理済み |
| | | | +------------------------+
| | | +-+---+
473 | | | | } |
| | | +-----+
| | | +----------------------------------------------------------------+
474 | | +--+ if(ValData->ArgF){ // サブルーチンの引数は、常に対象とする。 |
| | | +--+-------------------------------------------------------------+
475 | | | +--- ArgValList->AddObject(ValData->Str,(TObject *)ValData);
| | | +-+---+
476 | | | | } |
| | | +-+---+
| | | +-+-----------------------------------------------------------------------+
476 | | | | else if((Token->RefType == vrf_ref)||(Token->RefType == vrf_refset)){ |
| | | +-+-----------------------------------------------------------------------+
477 | | | +--- // 最初に参照で使用されている変数
478 | | | +--- ArgValList->AddObject(ValData->Str,(TObject *)ValData);
| | | +-+---+
479 | | | | } |
| | | +-+---+
| | | +-+-------------------------------------+
479 | | | | else if(Token->RefType == vrf_set){ |
| | | +-+-------------------------------------+
480 | | | +--- // 最初に代入で使用されている変数(TR外での参照がなければ不要)
481 | | | +--- ArgValList->AddObject("*",(TObject *)ValData);
| | | +-+---+
482 | | | | } |
| | | +-----+
| | +-+---+
483 | | | } |
| | +-----+
| +-+---+
484 | | } |
| +-----+
485 +--- //
486 | // ENDまで検索して、参照があるかを調べる。
487 | //
| +----------------------------------------------------+
488 +--+ for(i = TokenEndPos ; i < TokenList->Count ; i++){ |
| +--+-------------------------------------------------+
489 | +--- Token = (TToken *)TokenList->Items[i];
| | +------------------------------+
490 | +--+ if(Token->TokId == tid_END){ |
| | +--+---------------------------+
| | | +--------+
491 | | +--+ break; |
| | | +--------+
| | +-+---+
492 | | | } |
| | +-----+
| | +------------------------------+
493 | +--+ if(Token->ValData != NULL){ |
| | +--+---------------------------+
494 | | +--- ValData = (TValData *)Token->ValData;
495 | | |
496 | | +--- Idx = ArgValList->IndexOfObject((TObject *)ValData);
| | | +----------------+
497 | | +--+ if(Idx == -1){ |
| | | +--+-------------+
| | | | +----------------------------+
498 | | | +--+ continue; // 対象外の変数 |
| | | | +----------------------------+
| | | +-+---+
499 | | | | } |
| | | +-----+
| | | +--------------------------------------+
500 | | +--+ if(ArgValList->Strings[Idx] == "*"){ |
| | | +--+-----------------------------------+
| | | | +------------------------------------------------------------------+
501 | | | +--+ if((Token->RefType == vrf_ref)||(Token->RefType == vrf_refset)){ |
| | | | +--+---------------------------------------------------------------+
502 | | | | +--- ArgValList->Strings[Idx] = ValData->Str; // 使用にセット
| | | | +-+---+
503 | | | | | } |
| | | | +-+---+
| | | | +-+---------------------------------------------------------+
503 | | | | | else if(Token->RefType == vrf_set){ // 最初に代入で使用 |
| | | | +-+---------------------------------------------------------+
504 | | | | +--- ArgValList->Strings[Idx] = ""; // 未使用にセット
| | | | +-+---+
505 | | | | | } |
| | | | +-----+
| | | +-+---+
506 | | | | } |
| | | +-----+
| | +-+---+
507 | | | } |
| | +-----+
| +-+---+
508 | | } |
| +-----+
509 +--- //
510 | // ArgValListの "*"[TR内で最初に代入で使用されて、その後参照されていない変数]
511 | // を "" としてクリアする。
512 | //
| +--------------------------------------------+
513 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
514 | +--+ if(ArgValList->Strings[i] == "*"){ |
| | +--+---------------------------------+
515 | | +--- ArgValList->Strings[i] = "";
| | +-+---+
516 | | | } |
| | +-----+
| +-+---+
517 | | } |
| +-----+
518 +--- //
519 | // 引数リストの変数が配列で、その定義に変数を参照(Exp: Real D(1:nx))の場合
520 | // その変数も、引数リストに追加する。 Add 2007/1/20
521 | //
| +--------------------------------------------+
522 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
523 | +--+ if(ArgValList->Strings[i] == ""){ |
| | +--+---------------------------------+
| | | +------------+
524 | | +--+ continue; |
| | | +------------+
| | +-+---+
525 | | | } |
| | +-----+
526 | +--- ValData = (TValData *)ArgValList->Objects[i];
| | +------------------------------------------------------------+
527 | +--+ if(!ValData->ArrayOrFuncF || (ValData->ArrayLevel == 0)){ |
| | +--+---------------------------------------------------------+
| | | +----------------------------------+
528 | | +--+ continue; // 配列以外は、対象外 |
| | | +----------------------------------+
| | +-+---+
529 | | | } |
| | +-----+
530 | +--- //
531 | | //
532 | | //
| | +----------------------------------------------------------+
533 | +--+ for(j = ValData->DefPosS ; j < ValData->DefPosE ; j++){ |
| | +--+-------------------------------------------------------+
534 | | +--- Token = (TToken *)TokenList->Items[j];
535 | | +--- ValData2 = (TValData *)Token->ValData;
| | | +------------------------+
536 | | +--+ if(ValData2 == NULL){ |
| | | +--+---------------------+
| | | | +------------------------------------+
537 | | | +--+ continue; // 変数以外のトークン |
| | | | +------------------------------------+
| | | +-+---+
538 | | | | } |
| | | +-----+
| | | +------------------------------------------------------------+
539 | | +--+ if(ArgValList->IndexOfObject((TObject *)ValData2) != -1){ |
| | | +--+---------------------------------------------------------+
| | | | +------------------------+
540 | | | +--+ continue; // 処理済み |
| | | | +------------------------+
| | | +-+---+
541 | | | | } |
| | | +-----+
542 | | +--- ArgValList->AddObject(ValData2->Str,(TObject *)ValData2);
| | +-+---+
543 | | | } |
| | +-----+
| | +--------------------------------------------------------------------+
544 | +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){ |
| | +--+-----------------------------------------------------------------+
545 | | +--- Token = (TToken *)TokenList->Items[j];
546 | | +--- ValData2 = (TValData *)Token->ValData;
| | | +------------------------+
547 | | +--+ if(ValData2 == NULL){ |
| | | +--+---------------------+
| | | | +------------------------------------+
548 | | | +--+ continue; // 変数以外のトークン |
| | | | +------------------------------------+
| | | +-+---+
549 | | | | } |
| | | +-----+
| | | +------------------------------------------------------------+
550 | | +--+ if(ArgValList->IndexOfObject((TObject *)ValData2) != -1){ |
| | | +--+---------------------------------------------------------+
| | | | +------------------------+
551 | | | +--+ continue; // 処理済み |
| | | | +------------------------+
| | | +-+---+
552 | | | | } |
| | | +-----+
553 | | +--- ArgValList->AddObject(ValData2->Str,(TObject *)ValData2);
| | +-+---+
554 | | | } |
| | +-----+
| +-+---+
555 | | } |
| +-----+
+-+---+
556 | } |
+-----+