static    char    sccsid[]="%Z% %M% %I% %E% %U%";
/******************************************************************************
*                                                                             *
*      処理目的　　：  ＥＮＤＩＦコマンドメイン                               *
*                                                                             *
*      関数名　　　：　int cl_process_end_if( pLeaf, pProc )                  *
*                                                                             *
*      引き数      ：　(I)Leaf          * pLeaf                               *
*                      (I)ProcCT        * pProc                               *
*                                                                             *
*                                                                             *
*      戻り値　　　：　ERROR                                    　            *
*                      NORMAL                                                 *
*                                                                             *
*      処理概要　　：　                                                       *
*                                                                             *
******************************************************************************/

#include "colmn.h"

extern CLCOMMON  CLcommon;
extern CLPRTBL *pCLprocTable;
extern GlobalCt *pGlobTable;

int cl_process_end_if(pLeaf, pProc)
Leaf    *pLeaf;
ProcCT  *pProc;
{
	int irc,id;
	BlockCB *pIfCB;

	if (!(pIfCB = pProc->pcrBlockCB)) return -1;
	id = pIfCB->cid;
/*
printf("cl_process_end_if: cid=%08x\n",id);
*/
	if (id==C_IF || id==C_SWITCH || id==C_TRY) ;
	else return -1;

	irc = 0;
	if (pLeaf->cmd.cid == C_ENDTRY) {
		pProc->ucExcept = 0;
		pGlobTable->try_level--;
		if (pIfCB->EndFlag) {	/* CATCH or FINALLYの中で例外が発生したとき */
			pGlobTable->exception = pIfCB->EndFlag;
			pIfCB->EndFlag = 0;
		}
		else if (pIfCB->TureFlag == L_OFF)	/* Catchされなかったとき */
			pGlobTable->exception = pProc->exception;
		else {
			*pGlobTable->errmsg = '\0';
			pGlobTable->err_msg_len = 0;
		}
		pProc->exception = 0;
		/* 前のTRY状態に戻す */
		pProc->pFlag = pIfCB->pFlag;
		pProc->ucExcept = pIfCB->ucExcept;
		/* break/continue中は、この後、pushしてあるbreak/continueを実行するようにする */
		if (cmn_chk_stat(BRK_PR|RET_PR,&pProc->ptype)) pProc->Nextleaf = NULL;
	}
/*
printf("cl_process_end_if: pProc->pcrIfCB=%08x\n",pProc->pcrIfCB);
*/
#if 1
	pIfCB->iUsed = 0;
	pProc->pcrBlockCB = pIfCB->preBlockCB;
#else
	cl_del_block_cb(pProc);
#endif
	return irc;
}
