|  |  |  | @ -710,14 +710,14 @@ 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) | 
		
	
		
			
				|  |  |  |  | qse_awk_rcb_t* qse_awk_rtx_getrcb (qse_awk_rtx_t* rtx) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	return rtx->cbs; | 
		
	
		
			
				|  |  |  |  | 	return rtx->rcb; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | void qse_awk_rtx_setcb (qse_awk_rtx_t* rtx, qse_awk_rcb_t* rcb) | 
		
	
		
			
				|  |  |  |  | void qse_awk_rtx_setrcb (qse_awk_rtx_t* rtx, qse_awk_rcb_t* rcb) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	rtx->cbs = rcb; | 
		
	
		
			
				|  |  |  |  | 	rtx->rcb = rcb; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | static void free_namedval (qse_map_t* map, void* dptr, qse_size_t dlen) | 
		
	
	
		
			
				
					
					|  |  |  | @ -738,7 +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->rcb = QSE_NULL; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	rtx->stack = QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 	rtx->stack_top = 0; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1336,10 +1336,10 @@ static int run_bpae_loop (qse_awk_rtx_t* rtx) | 
		
	
		
			
				|  |  |  |  | 	STACK_NARGS(rtx) = (void*)nargs; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	/* call the callback */ | 
		
	
		
			
				|  |  |  |  | 	if (rtx->cbs != QSE_NULL && rtx->cbs->on_enter != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	if (rtx->rcb != QSE_NULL && rtx->rcb->on_enter != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOERR); | 
		
	
		
			
				|  |  |  |  | 		ret = rtx->cbs->on_enter (rtx, rtx->cbs->data); | 
		
	
		
			
				|  |  |  |  | 		ret = rtx->rcb->on_enter (rtx, rtx->rcb->data); | 
		
	
		
			
				|  |  |  |  | 		if (ret <= -1)  | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if (rtx->errnum == QSE_AWK_ENOMEM) | 
		
	
	
		
			
				
					
					|  |  |  | @ -1438,8 +1438,8 @@ static int run_bpae_loop (qse_awk_rtx_t* rtx) | 
		
	
		
			
				|  |  |  |  | 	v = STACK_RETVAL(rtx); | 
		
	
		
			
				|  |  |  |  | 	if (ret == 0) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		if (rtx->cbs != QSE_NULL && rtx->cbs->on_exit != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			rtx->cbs->on_exit (rtx, v, rtx->cbs->data); | 
		
	
		
			
				|  |  |  |  | 		if (rtx->rcb != QSE_NULL && rtx->rcb->on_exit != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			rtx->rcb->on_exit (rtx, v, rtx->rcb->data); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	/* end the life of the gbl return value */ | 
		
	
		
			
				|  |  |  |  | 	qse_awk_rtx_refdownval (rtx, v); | 
		
	
	
		
			
				
					
					|  |  |  | @ -1546,8 +1546,8 @@ int qse_awk_rtx_call ( | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if (rtx->errnum == QSE_AWK_ENOERR) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				if (rtx->cbs != QSE_NULL && rtx->cbs->on_exit != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 					rtx->cbs->on_exit (rtx, crdata.val, rtx->cbs->data); | 
		
	
		
			
				|  |  |  |  | 				if (rtx->rcb != QSE_NULL && rtx->rcb->on_exit != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 					rtx->rcb->on_exit (rtx, crdata.val, rtx->rcb->data); | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 			else ret = -1; | 
		
	
		
			
				|  |  |  |  | 			qse_awk_rtx_refdownval(rtx, crdata.val); | 
		
	
	
		
			
				
					
					|  |  |  | @ -1557,8 +1557,8 @@ int qse_awk_rtx_call ( | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		qse_awk_rtx_refupval (rtx, v); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if (rtx->cbs != QSE_NULL && rtx->cbs->on_exit != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			rtx->cbs->on_exit (rtx, v, rtx->cbs->data); | 
		
	
		
			
				|  |  |  |  | 		if (rtx->rcb != QSE_NULL && rtx->rcb->on_exit != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			rtx->rcb->on_exit (rtx, v, rtx->rcb->data); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		qse_awk_rtx_refdownval (rtx, v); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @ -1849,11 +1849,11 @@ static int run_block0 (qse_awk_rtx_t* run, qse_awk_nde_blk_t* nde) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #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) \ | 
		
	
		
			
				|  |  |  |  | 	if ((rtx)->rcb != QSE_NULL &&  \ | 
		
	
		
			
				|  |  |  |  | 	    (rtx)->rcb->on_statement != QSE_NULL) \ | 
		
	
		
			
				|  |  |  |  | 	{ \ | 
		
	
		
			
				|  |  |  |  | 		(rtx)->cbs->on_statement ( \ | 
		
	
		
			
				|  |  |  |  | 			rtx, (nde)->line, (rtx)->cbs->data); \ | 
		
	
		
			
				|  |  |  |  | 		(rtx)->rcb->on_statement ( \ | 
		
	
		
			
				|  |  |  |  | 			rtx, (nde)->line, (rtx)->rcb->data); \ | 
		
	
		
			
				|  |  |  |  | 	}  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | static int run_statement (qse_awk_rtx_t* run, qse_awk_nde_t* nde) | 
		
	
	
		
			
				
					
					|  |  |  | 
 |