abc プロジェクト
14.3.5. MakeFunctionCode メンバ関数説明 |
メンバ関数名 | MakeFunctionCode |
定義ファイル名 | pass5.cpp |
定義行 | 570 |
所属名 | TPass5 |
アクセス属性 | private |
宣言形式 | void MakeFunctionCode ( ) |
概要 | ABCLib_(元のソースファイル名).f を作成する。
Region(一番外側)を SetParam() call Sub() に置き換える。 また、NestしたRegion内は、コメントとして、 TokenEndPosまでSkipする。 NestRegion内の sct_Commandも、Nest先のRegionでの処理となる。
・sct_command の変換 ・sct_install ... のブロックをコメントアウト(コメントを残す) |
戻り値 | |
パラメタ説明 | |
機能説明 | |
備考 | |
呼出し元関数一覧表
呼出し先関数一覧表
参照外部変数一覧表
参照メンバ変数一覧表
|
名称 |
定義ファイル名 |
定義行 |
1 |
TPass5::fpOut |
pass5.h |
38 |
2 |
TPass5::TokenList |
pass5.h |
34 |
3 |
TPass5::TuneRegionList |
pass5.h |
36 |
参照先一覧表
関数論理チャート
| +----------------------------------+
570 +--+ void TPass5::MakeFunctionCode() |
571 | { |
+--+-------------------------------+
572 +--- int i,i1;
573 +--- TToken *Token;
574 +--- TScript *Script;
575 +--- AnsiString s;
576 +--- TTuneRegion *TuneRegion;
577 +--- bool IncludeReqF = true;
578 |
| +------------------------------------------+
579 +--+ for(i = 0 ; i < TokenList->Count ; i++){ |
| +--+---------------------------------------+
580 | +--- Token = (TToken *)TokenList->Items[i];
| | +----------------------------+
581 | +--+ if(Token->Script != NULL){ |
| | +--+-------------------------+
582 | | +--- Script = (TScript *)Token->Script;
| | | +------------------------------------+
583 | | +--+ if(Script->ScRegion == scr_start){ |
| | | +--+---------------------------------+
584 | | | +--- // Codeの置き換え
585 | | | +--- TuneRegion = (TTuneRegion *)Script->TuneRegion;
| | | | +----------------------------------+
586 | | | +--+ if(TuneRegion->TokenEndPos > i){ |
| | | | +--+-------------------------------+
| | | | | +----------------------------------+
587 | | | | +--+ if(!TuneRegion->UsedDynPefThis){ |
| | | | | +--+-------------------------------+
588 | | | | | +--- TuneRegion->OutputSrcCode(fpOut,"",0); // 置き換えコードを出力
| | | | | +-+---+
589 | | | | | | } |
| | | | | +-+---+
| | | | | +-+-------+
589 | | | | | | else{ |
| | | | | +-+-------+
590 | | | | | +--- TuneRegion->OutputSrcCode(fpOut,"",3); // 置き換えコードを出力
| | | | | +-+---+
591 | | | | | | } |
| | | | | +-----+
592 | | | | +--- i = TuneRegion->TokenEndPos; // Top Regionの中をスキップする。
| | | | | +------------+
593 | | | | +--+ continue; |
| | | | | +------------+
| | | | +-+---+
594 | | | | | } |
| | | | +-----+
| | | +-+---+
595 | | | | } |
| | | +-+---+
| | | +-+-------------------------------------------+
595 | | | | else if(Script->ScType == sct_DynPefThis){ |
| | | +-+-------------------------------------------+
596 | | | +--- //
597 | | | | // Dynamicの実行 SetParam() を指定
598 | | | | //
599 | | | +--- TScValData *ScValData = NULL;
600 | | | +--- int kk;
601 | | | |
| | | | +----------------------------------------+
602 | | | +--+ if(Script->ScValDataList->Count > 0){ |
| | | | +--+-------------------------------------+
603 | | | | +--- ScValData = (TScValData *)Script->ScValDataList->Items[0];
604 | | | | +--- s = ScValData->Str; // TR名 ""付き
| | | | | +--------------------------+
605 | | | | +--+ while(s.Pos("\"") != 0){ |
| | | | | +--+-----------------------+
605 | | | | | +--- s.Delete(s.Pos("\""),1);
| | | | | +-+---+
605 | | | | | | } |
| | | | | +-----+
605 | | | | +--- ;
| | | | | +--------------------------+
606 | | | | +--+ while(s.Pos("\'") != 0){ |
| | | | | +--+-----------------------+
606 | | | | | +--- s.Delete(s.Pos("\'"),1);
| | | | | +-+---+
606 | | | | | | } |
| | | | | +-----+
606 | | | | +--- ;
| | | | | +--------------------------------------------------+
607 | | | | +--+ for(kk = 0 ; kk < TuneRegionList->Count ; kk++){ |
| | | | | +--+-----------------------------------------------+
608 | | | | | +--- TuneRegion = (TTuneRegion *)TuneRegionList->Items[kk];
| | | | | | +--------------------------------------------+
609 | | | | | +--+ if(CompareText(s,TuneRegion->Name) == 0){ |
| | | | | | +--+-----------------------------------------+
610 | | | | | | +--- TuneRegion->UsedDynPefThis = true;
611 | | | | | | +--- TuneRegion->OutputSrcCode(fpOut,"",2); // 置き換えコードを出力
| | | | | | +-+---+
612 | | | | | | | } |
| | | | | | +-----+
| | | | | +-+---+
613 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
614 | | | | | } |
| | | | +-----+
| | | +-+---+
615 | | | | } |
| | | +-+---+
| | | +-+-----------------------------------------+
615 | | | | else if(Script->ScType == sct_command){ |
| | | +-+-----------------------------------------+
616 | | | +--- //
617 | | | | // FORTRAN 90 の式(コマンド)そのまま出力される。
618 | | | | //
619 | | | | // ここで、ABCLib_xxx = の値の所得も行う。
620 | | | | // 現状では、定数のみが使用可能。(変数や式はエラー)
621 | | | | //
622 | | | +--- s = Script->TokStrList->Strings[0];
| | | | +--------------------------------------------+
623 | | | +--+ for(int j = 0 ; j < Token->Indent ; j++){ |
| | | | +--+-----------------------------------------+
624 | | | | +--- s = " "+s;
| | | | +-+---+
625 | | | | | } |
| | | | +-----+
626 | | | +--- fprintf(fpOut,"%s\n",s.c_str());
| | | +-+---+
627 | | | | } |
| | | +-+---+
| | | +-+-------+
627 | | | | else{ |
| | | +-+-------+
628 | | | +--- fprintf(fpOut,"%s",Token->OrgStr.c_str());
| | | +-+---+
629 | | | | } |
| | | +-----+
| | +-+---+
630 | | | } |
| | +-+---+
| | +-+-------------------------------------------------------+
630 | | | else if((Token->TokId == tid_CALL)&&(MainF->NoMPIF)){ |
| | +-+-------------------------------------------------------+
631 | | +--- //
632 | | | // MPI未使用の場合は、 Callの次が MPIxxx であれば
633 | | | // tid_LineEndまでコメントにする。 2009/03/10
634 | | | //
635 | | +--- int cc = 0;
636 | | +--- bool NewLineF = true;
637 | | +--- AnsiString FuncName,s,s1,s2;
638 | | |
| | | +------------------------------+
639 | | +--+ if(i < TokenList->Count-1){ |
| | | +--+---------------------------+
640 | | | +--- FuncName = Trim(((TToken *)TokenList->Items[i+1])->OrgStr.UpperCase());
641 | | | +--- cc = FuncName.Pos("MPI");
| | | +-+---+
642 | | | | } |
| | | +-----+
| | | +--------------+
643 | | +--+ if(cc == 1){ |
| | | +--+-----------+
| | | | +----------------------------------+
644 | | | +--+ for(;i < TokenList->Count;i++){ |
| | | | +--+-------------------------------+
645 | | | | +--- Token = (TToken *)TokenList->Items[i];
| | | | | +----------------+
646 | | | | +--+ if(NewLineF){ |
| | | | | +--+-------------+
647 | | | | | +--- NewLineF = false;
648 | | | | | +--- s = "c"+Token->OrgStr;
| | | | | +-+---+
649 | | | | | | } |
| | | | | +-+---+
| | | | | +-+-------+
649 | | | | | | else{ |
| | | | | +-+-------+
650 | | | | | +--- s = Token->OrgStr;
| | | | | +-+---+
651 | | | | | | } |
| | | | | +-----+
652 | | | | +--- cc = s.Pos("\n");
| | | | | +--------------+
653 | | | | +--+ if(cc == 0){ |
| | | | | +--+-----------+
654 | | | | | +--- fprintf(fpOut,"%s",s.c_str());
| | | | | +-+---+
655 | | | | | | } |
| | | | | +-+---+
| | | | | +-+-------+
655 | | | | | | else{ |
| | | | | +-+-------+
656 | | | | | +--- s1 = s.SubString(1,cc);
657 | | | | | +--- fprintf(fpOut,"%s",s1.c_str());
658 | | | | | +--- s2 = s.SubString(cc+1,s.Length());
| | | | | | +----------------+
659 | | | | | +--+ if(s2 != ""){ |
| | | | | | +--+-------------+
660 | | | | | | +--- fprintf(fpOut,"c%s",s2.c_str());
| | | | | | +-+---+
661 | | | | | | | } |
| | | | | | +-----+
| | | | | +-+---+
662 | | | | | | } |
| | | | | +-----+
| | | | | +----------------------------------+
663 | | | | +--+ if(Token->TokId == tid_LineEnd){ |
| | | | | +--+-------------------------------+
| | | | | | +--------+
664 | | | | | +--+ break; |
| | | | | | +--------+
| | | | | +-+---+
665 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
666 | | | | | } |
| | | | +-----+
| | | +-+---+
667 | | | | } |
| | | +-+---+
| | | +-+-------+
667 | | | | else{ |
| | | +-+-------+
668 | | | +--- fprintf(fpOut,"%s",Token->OrgStr.c_str());
| | | +-+---+
669 | | | | } |
| | | +-----+
| | +-+---+
670 | | | } |
| | +-+---+
| | +-+-------+
670 | | | else{ |
| | +-+-------+
671 | | +--- fprintf(fpOut,"%s",Token->OrgStr.c_str());
| | +-+---+
672 | | | } |
| | +-----+
| | +----------------------------------------------------------------------+
673 | +--+ if(Token->TokId == tid_END){ // 最初のEndの後でInclude (元と同じ) |
| | +--+-------------------------------------------------------------------+
| | | +------------------+
674 | | +--+ if(IncludeReqF){ |
| | | +--+---------------+
675 | | | +--- IncludeReqF = false;
676 | | | +--- fprintf(fpOut,"\n");
677 | | | +--- fprintf(fpOut,"\n");
678 | | | +--- fprintf(fpOut," include 'ABCLib_ControlRoutines.f'\n");
679 | | | +--- fprintf(fpOut," include 'ABCLib_DynamicRoutines.f'\n");
680 | | | +--- fprintf(fpOut," include 'ABCLib_InstallRoutines.f'\n");
681 | | | +--- fprintf(fpOut," include 'ABCLib_StaticRoutines.f'\n");
| | | +-+---+
682 | | | | } |
| | | +-----+
| | +-+---+
683 | | | } |
| | +-----+
| +-+---+
684 | | } |
| +-----+
+-+---+
685 | } |
+-----+