touched up code while enhancing index() and match()
This commit is contained in:
		| @ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * $Id: Awk.cpp 287 2009-09-15 10:01:02Z hyunghwan.chung $ | ||||
|  * $Id: Awk.cpp 288 2009-09-15 14:03:15Z hyunghwan.chung $ | ||||
|  *  | ||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
| @ -903,10 +903,10 @@ void Awk::Run::stop () const | ||||
| 	qse_awk_rtx_stop (this->rtx); | ||||
| } | ||||
|  | ||||
| bool Awk::Run::isStopReq () const | ||||
| bool Awk::Run::pendingStop () const | ||||
| { | ||||
| 	QSE_ASSERT (this->rtx != QSE_NULL); | ||||
| 	return qse_awk_rtx_isstopreq (this->rtx)? true: false; | ||||
| 	return qse_awk_rtx_pendingstop (this->rtx)? true: false; | ||||
| } | ||||
|  | ||||
| Awk::errnum_t Awk::Run::getErrorNumber () const  | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * $Id: fnc.c 287 2009-09-15 10:01:02Z hyunghwan.chung $ | ||||
|  * $Id: fnc.c 288 2009-09-15 14:03:15Z hyunghwan.chung $ | ||||
|  * | ||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
| @ -43,7 +43,7 @@ static qse_awk_fnc_t sys_fnc[] = | ||||
| 	{ {QSE_T("fflush"),  6}, 0, QSE_AWK_RIO, {0, 1, QSE_NULL}, fnc_fflush}, | ||||
|  | ||||
| 	/* string functions */ | ||||
| 	{ {QSE_T("index"),   5}, 0, 0,  {2,   2, QSE_NULL},     fnc_index}, | ||||
| 	{ {QSE_T("index"),   5}, 0, 0,  {2,   3, QSE_NULL},     fnc_index}, | ||||
| 	{ {QSE_T("substr"),  6}, 0, 0,  {2,   3, QSE_NULL},     fnc_substr}, | ||||
| 	{ {QSE_T("length"),  6}, 1, 0,  {0,   1, QSE_NULL},     fnc_length}, | ||||
| 	{ {QSE_T("split"),   5}, 0, 0,  {2,   3, QSE_T("vrv")}, fnc_split}, | ||||
| @ -51,7 +51,7 @@ static qse_awk_fnc_t sys_fnc[] = | ||||
| 	{ {QSE_T("toupper"), 7}, 0, 0,  {1,   1, QSE_NULL},     fnc_toupper}, | ||||
| 	{ {QSE_T("gsub"),    4}, 0, 0,  {2,   3, QSE_T("xvr")}, fnc_gsub}, | ||||
| 	{ {QSE_T("sub"),     3}, 0, 0,  {2,   3, QSE_T("xvr")}, fnc_sub}, | ||||
| 	{ {QSE_T("match"),   5}, 0, 0,  {2,   2, QSE_T("vx")},  fnc_match}, | ||||
| 	{ {QSE_T("match"),   5}, 0, 0,  {2,   3, QSE_T("vxv")}, fnc_match}, | ||||
| 	{ {QSE_T("sprintf"), 7}, 0, 0,  {1, MAX, QSE_NULL},     fnc_sprintf}, | ||||
|  | ||||
| 	{ {QSE_NULL,         0}, 0, 0,  {0,   0, QSE_NULL},     QSE_NULL} | ||||
| @ -438,19 +438,32 @@ static int fnc_fflush (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_index (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| static int fnc_index (qse_awk_rtx_t* rtx, const qse_cstr_t* fnm) | ||||
| { | ||||
| 	qse_size_t nargs; | ||||
| 	qse_awk_val_t* a0, * a1; | ||||
| 	qse_char_t* str0, * str1, * ptr; | ||||
| 	qse_size_t len0, len1; | ||||
| 	qse_long_t idx; | ||||
| 	qse_long_t idx, start = 1; | ||||
|  | ||||
| 	nargs = qse_awk_rtx_getnargs (run); | ||||
| 	QSE_ASSERT (nargs == 2); | ||||
| 	nargs = qse_awk_rtx_getnargs (rtx); | ||||
| 	QSE_ASSERT (nargs >= 2 && nargs <= 3); | ||||
| 	 | ||||
| 	a0 = qse_awk_rtx_getarg (run, 0); | ||||
| 	a1 = qse_awk_rtx_getarg (run, 1); | ||||
| 	a0 = qse_awk_rtx_getarg (rtx, 0); | ||||
| 	a1 = qse_awk_rtx_getarg (rtx, 1); | ||||
|  | ||||
| 	if (nargs >= 3)  | ||||
| 	{ | ||||
| 		qse_awk_val_t* a2; | ||||
| 		qse_real_t rv; | ||||
| 		int n; | ||||
|  | ||||
| 		a2 = qse_awk_rtx_getarg (rtx, 2); | ||||
| 		n = qse_awk_rtx_valtonum (rtx, a2, &start, &rv); | ||||
| 		if (n <= -1) return -1; | ||||
| 		if (n >= 1) start = (qse_long_t)rv; | ||||
| 		if (start < 1) start = 1; | ||||
| 	} | ||||
|  | ||||
| 	if (a0->type == QSE_AWK_VAL_STR) | ||||
| 	{ | ||||
| @ -459,7 +472,7 @@ static int fnc_index (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		str0 = qse_awk_rtx_valtocpldup (run, a0, &len0); | ||||
| 		str0 = qse_awk_rtx_valtocpldup (rtx, a0, &len0); | ||||
| 		if (str0 == QSE_NULL) return -1; | ||||
| 	} | ||||
|  | ||||
| @ -470,25 +483,27 @@ static int fnc_index (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		str1 = qse_awk_rtx_valtocpldup (run, a1, &len1); | ||||
| 		str1 = qse_awk_rtx_valtocpldup (rtx, a1, &len1); | ||||
| 		if (str1 == QSE_NULL) | ||||
| 		{ | ||||
| 			if (a0->type != QSE_AWK_VAL_STR)  | ||||
| 				QSE_AWK_FREE (run->awk, str0); | ||||
| 				QSE_AWK_FREE (rtx->awk, str0); | ||||
| 			return -1; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ptr = qse_strxnstr (str0, len0, str1, len1); | ||||
| 	ptr = (start > len0)?  | ||||
| 		QSE_NULL: | ||||
| 		qse_strxnstr (&str0[start-1], len0-start+1, str1, len1); | ||||
| 	idx = (ptr == QSE_NULL)? 0: ((qse_long_t)(ptr-str0) + 1); | ||||
|  | ||||
| 	if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str0); | ||||
| 	if (a1->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str1); | ||||
| 	if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str0); | ||||
| 	if (a1->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str1); | ||||
|  | ||||
| 	a0 = qse_awk_rtx_makeintval (run, idx); | ||||
| 	a0 = qse_awk_rtx_makeintval (rtx, idx); | ||||
| 	if (a0 == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (run, a0); | ||||
| 	qse_awk_rtx_setretval (rtx, a0); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @ -529,7 +544,7 @@ static int fnc_length (qse_awk_rtx_t* rtx, const qse_cstr_t* fnm) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_substr (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| static int fnc_substr (qse_awk_rtx_t* rtx, const qse_cstr_t* fnm) | ||||
| { | ||||
| 	qse_size_t nargs; | ||||
| 	qse_awk_val_t* a0, * a1, * a2, * r; | ||||
| @ -539,12 +554,12 @@ static int fnc_substr (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	qse_real_t rindex, rcount; | ||||
| 	int n; | ||||
|  | ||||
| 	nargs = qse_awk_rtx_getnargs (run); | ||||
| 	nargs = qse_awk_rtx_getnargs (rtx); | ||||
| 	QSE_ASSERT (nargs >= 2 && nargs <= 3); | ||||
|  | ||||
| 	a0 = qse_awk_rtx_getarg (run, 0); | ||||
| 	a1 = qse_awk_rtx_getarg (run, 1); | ||||
| 	a2 = (nargs >= 3)? qse_awk_rtx_getarg (run, 2): QSE_NULL; | ||||
| 	a0 = qse_awk_rtx_getarg (rtx, 0); | ||||
| 	a1 = qse_awk_rtx_getarg (rtx, 1); | ||||
| 	a2 = (nargs >= 3)? qse_awk_rtx_getarg (rtx, 2): QSE_NULL; | ||||
|  | ||||
| 	if (a0->type == QSE_AWK_VAL_STR) | ||||
| 	{ | ||||
| @ -553,14 +568,14 @@ static int fnc_substr (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	} | ||||
| 	else  | ||||
| 	{ | ||||
| 		str = qse_awk_rtx_valtocpldup (run, a0, &len); | ||||
| 		str = qse_awk_rtx_valtocpldup (rtx, a0, &len); | ||||
| 		if (str == QSE_NULL) return -1; | ||||
| 	} | ||||
|  | ||||
| 	n = qse_awk_rtx_valtonum (run, a1, &lindex, &rindex); | ||||
| 	if (n == -1)  | ||||
| 	n = qse_awk_rtx_valtonum (rtx, a1, &lindex, &rindex); | ||||
| 	if (n <= -1)  | ||||
| 	{ | ||||
| 		if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str); | ||||
| 		if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	if (n == 1) lindex = (qse_long_t)rindex; | ||||
| @ -568,11 +583,11 @@ static int fnc_substr (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	if (a2 == QSE_NULL) lcount = (qse_long_t)len; | ||||
| 	else  | ||||
| 	{ | ||||
| 		n = qse_awk_rtx_valtonum (run, a2, &lcount, &rcount); | ||||
| 		n = qse_awk_rtx_valtonum (rtx, a2, &lcount, &rcount); | ||||
| 		if (n == -1)  | ||||
| 		{ | ||||
| 			if (a0->type != QSE_AWK_VAL_STR)  | ||||
| 				QSE_AWK_FREE (run->awk, str); | ||||
| 				QSE_AWK_FREE (rtx->awk, str); | ||||
| 			return -1; | ||||
| 		} | ||||
| 		if (n == 1) lcount = (qse_long_t)rcount; | ||||
| @ -588,15 +603,15 @@ static int fnc_substr (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 		lcount = (qse_long_t)len - lindex; | ||||
| 	} | ||||
|  | ||||
| 	r = qse_awk_rtx_makestrval (run, &str[lindex], (qse_size_t)lcount); | ||||
| 	r = qse_awk_rtx_makestrval (rtx, &str[lindex], (qse_size_t)lcount); | ||||
| 	if (r == QSE_NULL) | ||||
| 	{ | ||||
| 		if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str); | ||||
| 		if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str); | ||||
| 	qse_awk_rtx_setretval (run, r); | ||||
| 	if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str); | ||||
| 	qse_awk_rtx_setretval (rtx, r); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @ -1058,12 +1073,15 @@ static int __substitute (qse_awk_rtx_t* run, qse_long_t max_count) | ||||
|  | ||||
| 	if (a0->type != QSE_AWK_VAL_REX) | ||||
| 	{ | ||||
| 		qse_awk_errnum_t errnum; | ||||
|  | ||||
| 		rex = QSE_AWK_BUILDREX ( | ||||
| 			run->awk, a0_ptr, a0_len, &run->errinf.num); | ||||
| 			run->awk, a0_ptr, a0_len, &errnum); | ||||
| 		if (rex == QSE_NULL) | ||||
| 		{ | ||||
| 			qse_str_fini (&new); | ||||
| 			FREE_A_PTRS (run->awk); | ||||
| 			qse_awk_rtx_seterrnum (run, errnum, QSE_NULL); | ||||
| 			return -1; | ||||
| 		} | ||||
| 	} | ||||
| @ -1260,23 +1278,36 @@ static int fnc_sub (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	return __substitute (run, 1); | ||||
| } | ||||
|  | ||||
| static int fnc_match (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| static int fnc_match (qse_awk_rtx_t* rtx, const qse_cstr_t* fnm) | ||||
| { | ||||
| 	qse_size_t nargs; | ||||
| 	qse_awk_val_t* a0, * a1; | ||||
| 	qse_char_t* str0, * str1; | ||||
| 	qse_size_t len0, len1; | ||||
| 	qse_long_t idx; | ||||
| 	qse_long_t idx, start = 1; | ||||
| 	void* rex; | ||||
| 	int n; | ||||
| 	qse_cstr_t mat; | ||||
| 	qse_awk_errnum_t errnum; | ||||
|  | ||||
| 	nargs = qse_awk_rtx_getnargs (run); | ||||
| 	QSE_ASSERT (nargs == 2); | ||||
| 	nargs = qse_awk_rtx_getnargs (rtx); | ||||
| 	QSE_ASSERT (nargs >= 2 && nargs <= 3); | ||||
| 	 | ||||
| 	a0 = qse_awk_rtx_getarg (run, 0); | ||||
| 	a1 = qse_awk_rtx_getarg (run, 1); | ||||
| 	a0 = qse_awk_rtx_getarg (rtx, 0); | ||||
| 	a1 = qse_awk_rtx_getarg (rtx, 1); | ||||
|  | ||||
| 	if (nargs >= 3)  | ||||
| 	{ | ||||
| 		qse_awk_val_t* a2; | ||||
| 		qse_real_t rv; | ||||
|  | ||||
| 		a2 = qse_awk_rtx_getarg (rtx, 2); | ||||
| 		n = qse_awk_rtx_valtonum (rtx, a2, &start, &rv); | ||||
| 		if (n <= -1) return -1; | ||||
| 		if (n >= 1) start = (qse_long_t)rv; | ||||
| 		if (start < 1) start = 1; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	if (a0->type == QSE_AWK_VAL_STR) | ||||
| 	{ | ||||
| @ -1285,7 +1316,7 @@ static int fnc_match (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		str0 = qse_awk_rtx_valtocpldup (run, a0, &len0); | ||||
| 		str0 = qse_awk_rtx_valtocpldup (rtx, a0, &len0); | ||||
| 		if (str0 == QSE_NULL) return -1; | ||||
| 	} | ||||
|  | ||||
| @ -1295,6 +1326,8 @@ static int fnc_match (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 	} | ||||
| 	else  | ||||
| 	{ | ||||
| 		qse_awk_errnum_t errnum; | ||||
|  | ||||
| 		if (a1->type == QSE_AWK_VAL_STR) | ||||
| 		{ | ||||
| 			str1 = ((qse_awk_val_str_t*)a1)->ptr; | ||||
| @ -1302,77 +1335,83 @@ static int fnc_match (qse_awk_rtx_t* run, const qse_cstr_t* fnm) | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			str1 = qse_awk_rtx_valtocpldup (run, a1, &len1); | ||||
| 			str1 = qse_awk_rtx_valtocpldup (rtx, a1, &len1); | ||||
| 			if (str1 == QSE_NULL) | ||||
| 			{ | ||||
| 				if (a0->type != QSE_AWK_VAL_STR)  | ||||
| 					QSE_AWK_FREE (run->awk, str0); | ||||
| 					QSE_AWK_FREE (rtx->awk, str0); | ||||
| 				return -1; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		rex = QSE_AWK_BUILDREX (run->awk, str1, len1, &run->errinf.num); | ||||
| 		rex = QSE_AWK_BUILDREX (rtx->awk, str1, len1, &errnum); | ||||
| 		if (rex == QSE_NULL) | ||||
| 		{ | ||||
| 			if (a0->type != QSE_AWK_VAL_STR)  | ||||
| 				QSE_AWK_FREE (run->awk, str0); | ||||
| 				QSE_AWK_FREE (rtx->awk, str0); | ||||
| 			qse_awk_rtx_seterrnum (rtx, errnum, QSE_NULL); | ||||
| 			return -1; | ||||
| 		} | ||||
|  | ||||
| 		if (a1->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str1); | ||||
| 		if (a1->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str1); | ||||
| 	} | ||||
|  | ||||
| 	n = QSE_AWK_MATCHREX ( | ||||
| 		run->awk, rex,  | ||||
| 		(run->gbl.ignorecase? QSE_REX_MATCH_IGNORECASE: 0), | ||||
| 		str0, len0, str0, len0, | ||||
| 		&mat, &errnum | ||||
| 	); | ||||
| 	if (start > len0) n = 0; | ||||
| 	else | ||||
| 	{ | ||||
| 		n = QSE_AWK_MATCHREX ( | ||||
| 			rtx->awk, rex,  | ||||
| 			(rtx->gbl.ignorecase? QSE_REX_MATCH_IGNORECASE: 0), | ||||
| 			str0+start-1, len0-start+1,/*TODO: must use str0,len0?*/ | ||||
| 			str0+start-1, len0-start+1, | ||||
| 			&mat, &errnum | ||||
| 		); | ||||
| 	} | ||||
|  | ||||
| 	if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (run->awk, str0); | ||||
| 	if (a1->type != QSE_AWK_VAL_REX) QSE_AWK_FREEREX (run->awk, rex); | ||||
| 	if (a0->type != QSE_AWK_VAL_STR) QSE_AWK_FREE (rtx->awk, str0); | ||||
| 	if (a1->type != QSE_AWK_VAL_REX) QSE_AWK_FREEREX (rtx->awk, rex); | ||||
|  | ||||
| 	if (n <= -1)  | ||||
| 	{ | ||||
| 		qse_awk_rtx_seterrnum (run, errnum, QSE_NULL); | ||||
| 		qse_awk_rtx_seterrnum (rtx, errnum, QSE_NULL); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	idx = (n == 0)? 0: ((qse_long_t)(mat.ptr-str0) + 1); | ||||
|  | ||||
| 	a0 = qse_awk_rtx_makeintval (run, idx); | ||||
| 	a0 = qse_awk_rtx_makeintval (rtx, idx); | ||||
| 	if (a0 == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_refupval (run, a0); | ||||
| 	qse_awk_rtx_refupval (rtx, a0); | ||||
|  | ||||
| 	a1 = qse_awk_rtx_makeintval (run,  | ||||
| 	a1 = qse_awk_rtx_makeintval (rtx,  | ||||
| 		((n == 0)? (qse_long_t)-1: (qse_long_t)mat.len)); | ||||
| 	if (a1 == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_awk_rtx_refdownval (run, a0); | ||||
| 		qse_awk_rtx_refdownval (rtx, a0); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	qse_awk_rtx_refupval (run, a1); | ||||
| 	qse_awk_rtx_refupval (rtx, a1); | ||||
|  | ||||
| 	if (qse_awk_rtx_setgbl (run, QSE_AWK_GBL_RSTART, a0) == -1) | ||||
| 	if (qse_awk_rtx_setgbl (rtx, QSE_AWK_GBL_RSTART, a0) == -1) | ||||
| 	{ | ||||
| 		qse_awk_rtx_refdownval (run, a1); | ||||
| 		qse_awk_rtx_refdownval (run, a0); | ||||
| 		qse_awk_rtx_refdownval (rtx, a1); | ||||
| 		qse_awk_rtx_refdownval (rtx, a0); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (qse_awk_rtx_setgbl (run, QSE_AWK_GBL_RLENGTH, a1) == -1) | ||||
| 	if (qse_awk_rtx_setgbl (rtx, QSE_AWK_GBL_RLENGTH, a1) == -1) | ||||
| 	{ | ||||
| 		qse_awk_rtx_refdownval (run, a1); | ||||
| 		qse_awk_rtx_refdownval (run, a0); | ||||
| 		qse_awk_rtx_refdownval (rtx, a1); | ||||
| 		qse_awk_rtx_refdownval (rtx, a0); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	qse_awk_rtx_setretval (run, a0); | ||||
| 	qse_awk_rtx_setretval (rtx, a0); | ||||
|  | ||||
| 	qse_awk_rtx_refdownval (run, a1); | ||||
| 	qse_awk_rtx_refdownval (run, a0); | ||||
| 	qse_awk_rtx_refdownval (rtx, a1); | ||||
| 	qse_awk_rtx_refdownval (rtx, a0); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * $Id: run.c 287 2009-09-15 10:01:02Z hyunghwan.chung $ | ||||
|  * $Id: run.c 288 2009-09-15 14:03:15Z hyunghwan.chung $ | ||||
|  * | ||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
| @ -758,7 +758,7 @@ void qse_awk_rtx_stop (qse_awk_rtx_t* rtx) | ||||
| 	rtx->exit_level = EXIT_ABORT; | ||||
| } | ||||
|  | ||||
| qse_bool_t qse_awk_rtx_isstopreq (qse_awk_rtx_t* rtx) | ||||
| qse_bool_t qse_awk_rtx_pendingstop (qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	return (rtx->exit_level == EXIT_ABORT || rtx->awk->stopall); | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user