created a function to set callback after context creation.
- qse_awk_rtx_setcb(), qse_awk_rtx_getcb()
This commit is contained in:
		@ -637,13 +637,13 @@ qse_map_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qse_awk_rtx_t* qse_awk_rtx_open (
 | 
			
		||||
	qse_awk_t* awk, qse_size_t xtn, qse_awk_rio_t* rio, 
 | 
			
		||||
	qse_awk_rcb_t* cbs, const qse_cstr_t* arg)
 | 
			
		||||
	qse_awk_t* awk, qse_size_t xtn, 
 | 
			
		||||
	qse_awk_rio_t* rio, const qse_cstr_t* arg)
 | 
			
		||||
{
 | 
			
		||||
	qse_awk_rtx_t* rtx;
 | 
			
		||||
 | 
			
		||||
        QSE_ASSERTX (awk->ccls != QSE_NULL, "Call qse_setccls() first");
 | 
			
		||||
        QSE_ASSERTX (awk->prm != QSE_NULL, "Call qse_setprm() first");
 | 
			
		||||
        QSE_ASSERTX (awk->ccls != QSE_NULL, "Call qse_awk_setccls() first");
 | 
			
		||||
        QSE_ASSERTX (awk->prm != QSE_NULL, "Call qse_awk_setprm() first");
 | 
			
		||||
 | 
			
		||||
	/* clear the awk error code */
 | 
			
		||||
	qse_awk_seterror (awk, QSE_AWK_ENOERR, 0, QSE_NULL, 0);
 | 
			
		||||
@ -660,7 +660,8 @@ qse_awk_rtx_t* qse_awk_rtx_open (
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/* allocate the storage for the rtx object */
 | 
			
		||||
	rtx = (qse_awk_rtx_t*) QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_rtx_t) + xtn);
 | 
			
		||||
	rtx = (qse_awk_rtx_t*) QSE_AWK_ALLOC (
 | 
			
		||||
		awk, QSE_SIZEOF(qse_awk_rtx_t) + xtn);
 | 
			
		||||
	if (rtx == QSE_NULL)
 | 
			
		||||
	{
 | 
			
		||||
		/* if it fails, the failure is reported thru 
 | 
			
		||||
@ -681,7 +682,6 @@ qse_awk_rtx_t* qse_awk_rtx_open (
 | 
			
		||||
	rtx->errnum    = QSE_AWK_ENOERR;
 | 
			
		||||
	rtx->errlin    = 0;
 | 
			
		||||
	rtx->errmsg[0] = QSE_T('\0');
 | 
			
		||||
	rtx->cbs       = cbs;
 | 
			
		||||
 | 
			
		||||
	if (init_globals (rtx, arg) == -1)
 | 
			
		||||
	{
 | 
			
		||||
@ -710,6 +710,16 @@ qse_bool_t qse_awk_rtx_shouldstop (qse_awk_rtx_t* rtx)
 | 
			
		||||
	return (rtx->exit_level == EXIT_ABORT || rtx->awk->stopall);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qse_awk_rcb_t* qse_awk_rtx_getcb (qse_awk_rtx_t* rtx)
 | 
			
		||||
{
 | 
			
		||||
	return rtx->cbs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void qse_awk_rtx_setcb (qse_awk_rtx_t* rtx, qse_awk_rcb_t* rcb)
 | 
			
		||||
{
 | 
			
		||||
	rtx->cbs = rcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void free_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
 | 
			
		||||
{
 | 
			
		||||
	qse_awk_rtx_refdownval (
 | 
			
		||||
@ -728,6 +738,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
 | 
			
		||||
	QSE_MEMSET (rtx, 0, QSE_SIZEOF(qse_awk_rtx_t));
 | 
			
		||||
 | 
			
		||||
	rtx->awk = awk;
 | 
			
		||||
	rtx->cbs = QSE_NULL;
 | 
			
		||||
 | 
			
		||||
	rtx->stack = QSE_NULL;
 | 
			
		||||
	rtx->stack_top = 0;
 | 
			
		||||
@ -1836,13 +1847,13 @@ static int run_block0 (qse_awk_rtx_t* run, qse_awk_nde_blk_t* nde)
 | 
			
		||||
	return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define ON_STATEMENT(run,nde) \
 | 
			
		||||
	if ((run)->awk->stopall) (run)->exit_level = EXIT_ABORT; \
 | 
			
		||||
	if ((run)->cbs != QSE_NULL &&  \
 | 
			
		||||
	    (run)->cbs->on_statement != QSE_NULL) \
 | 
			
		||||
#define ON_STATEMENT(rtx,nde) \
 | 
			
		||||
	if ((rtx)->awk->stopall) (rtx)->exit_level = EXIT_ABORT; \
 | 
			
		||||
	if ((rtx)->cbs != QSE_NULL &&  \
 | 
			
		||||
	    (rtx)->cbs->on_statement != QSE_NULL) \
 | 
			
		||||
	{ \
 | 
			
		||||
		(run)->cbs->on_statement ( \
 | 
			
		||||
			run, (nde)->line, (run)->cbs->data); \
 | 
			
		||||
		(rtx)->cbs->on_statement ( \
 | 
			
		||||
			rtx, (nde)->line, (rtx)->cbs->data); \
 | 
			
		||||
	} 
 | 
			
		||||
 | 
			
		||||
static int run_statement (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user