touched up code
This commit is contained in:
		| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: parse.c 259 2009-08-20 11:28:03Z hyunghwan.chung $ |  * $Id: parse.c 260 2009-08-20 13:04:24Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|    Copyright 2006-2009 Chung, Hyung-Hwan. |    Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|  |  | ||||||
| @ -379,19 +379,12 @@ static global_t gtab[] = | |||||||
| 	} while (0) | 	} while (0) | ||||||
|  |  | ||||||
|  |  | ||||||
| #define SETERR_CODE(awk,code) \ | #define SETERR_COD(awk,code) \ | ||||||
| 	qse_awk_seterror (awk, code, QSE_NULL, 0) | 	qse_awk_seterror (awk, code, QSE_NULL, 0) | ||||||
|  |  | ||||||
| #define SETERR_LOC(awk,code,line) \ | #define SETERR_LOC(awk,code,line) \ | ||||||
| 	qse_awk_seterror (awk, code, QSE_NULL, line) | 	qse_awk_seterror (awk, code, QSE_NULL, line) | ||||||
|  |  | ||||||
| #define SETERR_ARG(awk,code,ep,el) \ |  | ||||||
| 	do { \ |  | ||||||
| 		qse_cstr_t __ea; \ |  | ||||||
| 		__ea.len = (el); __ea.ptr = (ep); \ |  | ||||||
| 		qse_awk_seterror ((awk), (code), &__ea, 0); \ |  | ||||||
| 	} while (0) |  | ||||||
|  |  | ||||||
| #define SETERR_ARG_LOC(awk,code,ep,el,line) \ | #define SETERR_ARG_LOC(awk,code,ep,el,line) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| 		qse_cstr_t __ea; \ | 		qse_cstr_t __ea; \ | ||||||
| @ -399,6 +392,8 @@ static global_t gtab[] = | |||||||
| 		qse_awk_seterror ((awk), (code), &__ea, (line)); \ | 		qse_awk_seterror ((awk), (code), &__ea, (line)); \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
|  |  | ||||||
|  | #define SETERR_ARG(awk,code,ep,el) SETERR_ARG_LOC(awk,code,ep,el,0) | ||||||
|  |  | ||||||
| static int get_char (qse_awk_t* awk) | static int get_char (qse_awk_t* awk) | ||||||
| { | { | ||||||
| 	qse_ssize_t n; | 	qse_ssize_t n; | ||||||
| @ -627,7 +622,7 @@ int qse_awk_parse (qse_awk_t* awk, qse_awk_sio_t* sio) | |||||||
| 		"the source code input stream must be provided at least"); | 		"the source code input stream must be provided at least"); | ||||||
| 	if (sio == QSE_NULL || sio->in == QSE_NULL) | 	if (sio == QSE_NULL || sio->in == QSE_NULL) | ||||||
| 	{ | 	{ | ||||||
| 		SETERR_CODE (awk, QSE_AWK_EINVAL); | 		SETERR_COD (awk, QSE_AWK_EINVAL); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -1769,14 +1764,14 @@ int qse_awk_addgbl (qse_awk_t* awk, const qse_char_t* name, qse_size_t len) | |||||||
|  |  | ||||||
| 	if (len <= 0) | 	if (len <= 0) | ||||||
| 	{ | 	{ | ||||||
| 		SETERR_CODE (awk, QSE_AWK_EINVAL); | 		SETERR_COD (awk, QSE_AWK_EINVAL); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (awk->tree.ngbls > awk->tree.ngbls_base)  | 	if (awk->tree.ngbls > awk->tree.ngbls_base)  | ||||||
| 	{ | 	{ | ||||||
| 		/* this function is not allowed after qse_awk_parse is called */ | 		/* this function is not allowed after qse_awk_parse is called */ | ||||||
| 		SETERR_CODE (awk, QSE_AWK_ENOPER); | 		SETERR_COD (awk, QSE_AWK_ENOPER); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -1800,7 +1795,7 @@ int qse_awk_delgbl ( | |||||||
| 	if (awk->tree.ngbls > awk->tree.ngbls_base)  | 	if (awk->tree.ngbls > awk->tree.ngbls_base)  | ||||||
| 	{ | 	{ | ||||||
| 		/* this function is not allow after qse_awk_parse is called */ | 		/* this function is not allow after qse_awk_parse is called */ | ||||||
| 		SETERR_CODE (awk, QSE_AWK_ENOPER); | 		SETERR_COD (awk, QSE_AWK_ENOPER); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -1833,7 +1828,7 @@ static qse_awk_t* collect_globals (qse_awk_t* awk) | |||||||
| 	{ | 	{ | ||||||
| 		/* special check if the first name is on the  | 		/* special check if the first name is on the  | ||||||
| 		 * same line when QSE_AWK_NEWLINE is on */ | 		 * same line when QSE_AWK_NEWLINE is on */ | ||||||
| 		SETERR_CODE (awk, QSE_AWK_EVARMS); | 		SETERR_COD (awk, QSE_AWK_EVARMS); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -1891,7 +1886,7 @@ static qse_awk_t* collect_locals ( | |||||||
| 	{ | 	{ | ||||||
| 		/* special check if the first name is on the  | 		/* special check if the first name is on the  | ||||||
| 		 * same line when QSE_AWK_NEWLINE is on */ | 		 * same line when QSE_AWK_NEWLINE is on */ | ||||||
| 		SETERR_CODE (awk, QSE_AWK_EVARMS); | 		SETERR_COD (awk, QSE_AWK_EVARMS); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: run.c 259 2009-08-20 11:28:03Z hyunghwan.chung $ |  * $Id: run.c 260 2009-08-20 13:04:24Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|    Copyright 2006-2009 Chung, Hyung-Hwan. |    Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|  |  | ||||||
| @ -73,18 +73,9 @@ struct pafv | |||||||
| 	 (idx) < QSE_TYPE_MAX(qse_long_t) && \ | 	 (idx) < QSE_TYPE_MAX(qse_long_t) && \ | ||||||
| 	 (idx) < QSE_TYPE_MAX(qse_size_t)) | 	 (idx) < QSE_TYPE_MAX(qse_size_t)) | ||||||
|  |  | ||||||
| #define SETERR_CODE(rtx,code) \ |  | ||||||
| 	qse_awk_rtx_seterror (rtx, code, QSE_NULL, 0) |  | ||||||
|  |  | ||||||
| #define SETERR_LOC(rtx,code,line) \ | #define SETERR_ARGX_LOC(rtx,code,ea,line) \ | ||||||
| 	qse_awk_rtx_seterror (rtx, code, QSE_NULL, line) | 	qse_awk_rtx_seterror ((rtx), (code), (ea), (line)) | ||||||
|  |  | ||||||
| #define SETERR_ARG(rtx,code,ep,el) \ |  | ||||||
| 	do { \ |  | ||||||
| 		qse_cstr_t __ea; \ |  | ||||||
| 		__ea.len = (el); __ea.ptr = (ep); \ |  | ||||||
| 		qse_awk_rtx_seterror ((rtx), (code), &__ea, 0); \ |  | ||||||
| 	} while (0) |  | ||||||
|  |  | ||||||
| #define SETERR_ARG_LOC(rtx,code,ep,el,line) \ | #define SETERR_ARG_LOC(rtx,code,ep,el,line) \ | ||||||
| 	do { \ | 	do { \ | ||||||
| @ -93,6 +84,11 @@ struct pafv | |||||||
| 		qse_awk_rtx_seterror ((rtx), (code), &__ea, (line)); \ | 		qse_awk_rtx_seterror ((rtx), (code), &__ea, (line)); \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
|  |  | ||||||
|  | #define SETERR_ARGX(rtx,code,ea) SETERR_ARGX_LOC(rtx,code,ea,0) | ||||||
|  | #define SETERR_ARG(rtx,code,ep,el) SETERR_ARG_LOC(rtx,code,ep,el,0) | ||||||
|  | #define SETERR_LOC(rtx,code,line) SETERR_ARGX_LOC(rtx,code,QSE_NULL,line) | ||||||
|  | #define SETERR_COD(rtx,code) SETERR_ARGX_LOC(rtx,code,QSE_NULL,0) | ||||||
|  |  | ||||||
| static qse_size_t push_arg_from_vals ( | static qse_size_t push_arg_from_vals ( | ||||||
| 	qse_awk_rtx_t* rtx, qse_awk_nde_call_t* call, void* data); | 	qse_awk_rtx_t* rtx, qse_awk_nde_call_t* call, void* data); | ||||||
|  |  | ||||||
| @ -309,7 +305,7 @@ static int set_global ( | |||||||
| 		if (var != QSE_NULL) | 		if (var != QSE_NULL) | ||||||
| 		{ | 		{ | ||||||
| 			/* global variable */ | 			/* global variable */ | ||||||
| 			qse_awk_rtx_seterror ( | 			SETERR_ARGX_LOC ( | ||||||
| 				rtx, | 				rtx, | ||||||
| 				QSE_AWK_EMAPTOSCALAR,  | 				QSE_AWK_EMAPTOSCALAR,  | ||||||
| 				xstr_to_cstr(&var->id.name), | 				xstr_to_cstr(&var->id.name), | ||||||
| @ -320,9 +316,8 @@ static int set_global ( | |||||||
| 		{ | 		{ | ||||||
| 			/* qse_awk_rtx_setgbl has been called */ | 			/* qse_awk_rtx_setgbl has been called */ | ||||||
| 			qse_cstr_t ea; | 			qse_cstr_t ea; | ||||||
|  |  | ||||||
| 			ea.ptr = qse_awk_getgblname (rtx->awk, idx, &ea.len); | 			ea.ptr = qse_awk_getgblname (rtx->awk, idx, &ea.len); | ||||||
| 			qse_awk_rtx_seterrnum (rtx, QSE_AWK_EMAPTOSCALAR, &ea); | 			SETERR_ARGX (rtx, QSE_AWK_EMAPTOSCALAR, &ea); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		return -1; | 		return -1; | ||||||
| @ -334,7 +329,7 @@ static int set_global ( | |||||||
| 	    idx != QSE_AWK_GBL_ARGV) | 	    idx != QSE_AWK_GBL_ARGV) | ||||||
| 	{ | 	{ | ||||||
| 		/* TODO: better error code */ | 		/* TODO: better error code */ | ||||||
| 		SETERR_CODE (rtx, QSE_AWK_ESCALARTOMAP); | 		SETERR_COD (rtx, QSE_AWK_ESCALARTOMAP); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -355,7 +350,7 @@ static int set_global ( | |||||||
| 				{ | 				{ | ||||||
| 					/* '\0' is included in the value */ | 					/* '\0' is included in the value */ | ||||||
| 					QSE_AWK_FREE (rtx->awk, out.u.cpldup.ptr); | 					QSE_AWK_FREE (rtx->awk, out.u.cpldup.ptr); | ||||||
| 					SETERR_CODE (rtx, QSE_AWK_ECONVFMTCHR); | 					SETERR_COD (rtx, QSE_AWK_ECONVFMTCHR); | ||||||
| 					return -1; | 					return -1; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @ -494,7 +489,7 @@ static int set_global ( | |||||||
| 				if (out.u.cpldup.ptr[i] == QSE_T('\0')) | 				if (out.u.cpldup.ptr[i] == QSE_T('\0')) | ||||||
| 				{ | 				{ | ||||||
| 					QSE_AWK_FREE (rtx->awk, out.u.cpldup.ptr); | 					QSE_AWK_FREE (rtx->awk, out.u.cpldup.ptr); | ||||||
| 					SETERR_CODE (rtx, QSE_AWK_EOFMTCHR); | 					SETERR_COD (rtx, QSE_AWK_EOFMTCHR); | ||||||
| 					return -1; | 					return -1; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @ -1084,8 +1079,7 @@ static int build_runarg ( | |||||||
| 				 * map will be freeed when v_argv is freed */ | 				 * map will be freeed when v_argv is freed */ | ||||||
| 				qse_awk_rtx_refdownval (rtx, v_argv); | 				qse_awk_rtx_refdownval (rtx, v_argv); | ||||||
|  |  | ||||||
| 				qse_awk_rtx_seterrnum ( | 				SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 					rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 				return -1; | 				return -1; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @ -1192,7 +1186,7 @@ static int prepare_globals (qse_awk_rtx_t* rtx, const qse_cstr_t* runarg) | |||||||
| 		--ngbls; | 		--ngbls; | ||||||
| 		if (__raw_push(rtx,qse_awk_val_nil) == -1) | 		if (__raw_push(rtx,qse_awk_val_nil) == -1) | ||||||
| 		{ | 		{ | ||||||
| 			qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); | 			SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 			goto oops; | 			goto oops; | ||||||
| 		} | 		} | ||||||
| 	}	 | 	}	 | ||||||
| @ -1326,35 +1320,35 @@ static void capture_retval_on_exit (void* arg) | |||||||
| 	qse_awk_rtx_refupval (data->rtx, data->val); | 	qse_awk_rtx_refupval (data->rtx, data->val); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int enter_stack_frame (qse_awk_rtx_t* run) | static int enter_stack_frame (qse_awk_rtx_t* rtx) | ||||||
| { | { | ||||||
| 	qse_size_t saved_stack_top; | 	qse_size_t saved_stack_top; | ||||||
|  |  | ||||||
| 	/* remember the current stack top */ | 	/* remember the current stack top */ | ||||||
| 	saved_stack_top = run->stack_top; | 	saved_stack_top = rtx->stack_top; | ||||||
|  |  | ||||||
| 	/* push the current stack base */ | 	/* push the current stack base */ | ||||||
| 	if (__raw_push(run,(void*)run->stack_base) == -1) goto oops; | 	if (__raw_push(rtx,(void*)rtx->stack_base) == -1) goto oops; | ||||||
|  |  | ||||||
| 	/* push the current stack top before push the current stack base */ | 	/* push the current stack top before push the current stack base */ | ||||||
| 	if (__raw_push(run,(void*)saved_stack_top) == -1) goto oops; | 	if (__raw_push(rtx,(void*)saved_stack_top) == -1) goto oops; | ||||||
| 	 | 	 | ||||||
| 	/* secure space for a return value */ | 	/* secure space for a return value */ | ||||||
| 	if (__raw_push(run,qse_awk_val_nil) == -1) goto oops; | 	if (__raw_push(rtx,qse_awk_val_nil) == -1) goto oops; | ||||||
| 	 | 	 | ||||||
| 	/* secure space for STACK_NARGS */ | 	/* secure space for STACK_NARGS */ | ||||||
| 	if (__raw_push(run,qse_awk_val_nil) == -1) goto oops; | 	if (__raw_push(rtx,qse_awk_val_nil) == -1) goto oops; | ||||||
|  |  | ||||||
| 	/* let the stack top remembered be the base of a new stack frame */ | 	/* let the stack top remembered be the base of a new stack frame */ | ||||||
| 	run->stack_base = saved_stack_top; | 	rtx->stack_base = saved_stack_top; | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
| oops: | oops: | ||||||
| 	/* restore the stack top in a cheesy(?) way.  | 	/* restore the stack top in a cheesy(?) way.  | ||||||
| 	 * it is ok to do so as the values pushed are | 	 * it is ok to do so as the values pushed are | ||||||
| 	 * nils and binary numbers. */ | 	 * nils and binary numbers. */ | ||||||
| 	run->stack_top = saved_stack_top; | 	rtx->stack_top = saved_stack_top; | ||||||
| 	qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL); | 	SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 	return -1; | 	return -1; | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -1516,7 +1510,7 @@ qse_awk_val_t* qse_awk_rtx_call ( | |||||||
| 	{ | 	{ | ||||||
| 		/* cannot call the function again when exit() is called | 		/* cannot call the function again when exit() is called | ||||||
| 		 * in an AWK program or qse_awk_rtx_stop() is invoked */ | 		 * in an AWK program or qse_awk_rtx_stop() is invoked */ | ||||||
| 		qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOPER, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_ENOPER); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
| 	/*rtx->exit_level = EXIT_NONE;*/ | 	/*rtx->exit_level = EXIT_NONE;*/ | ||||||
| @ -1536,7 +1530,7 @@ qse_awk_val_t* qse_awk_rtx_call ( | |||||||
| 	); | 	); | ||||||
| 	if (pair == QSE_NULL)  | 	if (pair == QSE_NULL)  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum ( | 		SETERR_ARGX ( | ||||||
| 			rtx, QSE_AWK_EFUNNF,  | 			rtx, QSE_AWK_EFUNNF,  | ||||||
| 			xstr_to_cstr(&call.what.fun.name)); | 			xstr_to_cstr(&call.what.fun.name)); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| @ -1550,7 +1544,7 @@ qse_awk_val_t* qse_awk_rtx_call ( | |||||||
| 	{ | 	{ | ||||||
| 		/* TODO: is this correct? what if i want to  | 		/* TODO: is this correct? what if i want to  | ||||||
| 		 *       allow arbitarary numbers of arguments? */ | 		 *       allow arbitarary numbers of arguments? */ | ||||||
| 		qse_awk_rtx_seterrnum (rtx, QSE_AWK_EARGTM, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EARGTM); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -2591,7 +2585,7 @@ static int run_delete (qse_awk_rtx_t* run, qse_awk_nde_delete_t* nde) | |||||||
|  |  | ||||||
| 			if (val->type != QSE_AWK_VAL_MAP) | 			if (val->type != QSE_AWK_VAL_MAP) | ||||||
| 			{ | 			{ | ||||||
| 				qse_awk_rtx_seterror ( | 				SETERR_ARGX_LOC ( | ||||||
| 					run, QSE_AWK_ENOTDEL,  | 					run, QSE_AWK_ENOTDEL,  | ||||||
| 					xstr_to_cstr(&var->id.name), var->line); | 					xstr_to_cstr(&var->id.name), var->line); | ||||||
| 				return -1; | 				return -1; | ||||||
| @ -2678,7 +2672,7 @@ static int run_delete (qse_awk_rtx_t* run, qse_awk_nde_delete_t* nde) | |||||||
|  |  | ||||||
| 			if (val->type != QSE_AWK_VAL_MAP) | 			if (val->type != QSE_AWK_VAL_MAP) | ||||||
| 			{ | 			{ | ||||||
| 				qse_awk_rtx_seterror ( | 				SETERR_ARGX_LOC ( | ||||||
| 					run, QSE_AWK_ENOTDEL, | 					run, QSE_AWK_ENOTDEL, | ||||||
| 					xstr_to_cstr(&var->id.name), var->line); | 					xstr_to_cstr(&var->id.name), var->line); | ||||||
| 				return -1; | 				return -1; | ||||||
| @ -3375,7 +3369,7 @@ static qse_awk_val_t* do_assignment_scalar ( | |||||||
| 		{ | 		{ | ||||||
| 			/* once a variable becomes a map, | 			/* once a variable becomes a map, | ||||||
| 			 * it cannot be changed to a scalar variable */ | 			 * it cannot be changed to a scalar variable */ | ||||||
| 			qse_awk_rtx_seterror ( | 			SETERR_ARGX_LOC ( | ||||||
| 				run, QSE_AWK_EMAPTOSCALAR, | 				run, QSE_AWK_EMAPTOSCALAR, | ||||||
| 				xstr_to_cstr(&var->id.name), var->line); | 				xstr_to_cstr(&var->id.name), var->line); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| @ -3406,7 +3400,7 @@ static qse_awk_val_t* do_assignment_scalar ( | |||||||
| 		{	 | 		{	 | ||||||
| 			/* once the variable becomes a map, | 			/* once the variable becomes a map, | ||||||
| 			 * it cannot be changed to a scalar variable */ | 			 * it cannot be changed to a scalar variable */ | ||||||
| 			qse_awk_rtx_seterror ( | 			SETERR_ARGX_LOC ( | ||||||
| 				run, QSE_AWK_EMAPTOSCALAR,  | 				run, QSE_AWK_EMAPTOSCALAR,  | ||||||
| 				xstr_to_cstr(&var->id.name), var->line); | 				xstr_to_cstr(&var->id.name), var->line); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| @ -3423,7 +3417,7 @@ static qse_awk_val_t* do_assignment_scalar ( | |||||||
| 		{	 | 		{	 | ||||||
| 			/* once the variable becomes a map, | 			/* once the variable becomes a map, | ||||||
| 			 * it cannot be changed to a scalar variable */ | 			 * it cannot be changed to a scalar variable */ | ||||||
| 			qse_awk_rtx_seterror ( | 			SETERR_ARGX_LOC ( | ||||||
| 				run, QSE_AWK_EMAPTOSCALAR,  | 				run, QSE_AWK_EMAPTOSCALAR,  | ||||||
| 				xstr_to_cstr(&var->id.name), var->line); | 				xstr_to_cstr(&var->id.name), var->line); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| @ -3893,7 +3887,7 @@ static qse_awk_val_t* eval_binop_bor ( | |||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1)  | 	if (n1 == -1 || n2 == -1)  | ||||||
| 	{ | 	{ | ||||||
| 		SETERR_CODE (rtx, QSE_AWK_EOPERAND); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -3920,7 +3914,7 @@ static qse_awk_val_t* eval_binop_bxor ( | |||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (rtx, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -3946,7 +3940,7 @@ static qse_awk_val_t* eval_binop_band ( | |||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1)  | 	if (n1 == -1 || n2 == -1)  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (rtx, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4255,7 +4249,7 @@ static int __cmp_str_str ( | |||||||
| } | } | ||||||
|  |  | ||||||
| static int __cmp_val ( | static int __cmp_val ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	typedef int (*cmp_val_t) (qse_awk_rtx_t*, qse_awk_val_t*, qse_awk_val_t*); | 	typedef int (*cmp_val_t) (qse_awk_rtx_t*, qse_awk_val_t*, qse_awk_val_t*); | ||||||
|  |  | ||||||
| @ -4272,7 +4266,7 @@ static int __cmp_val ( | |||||||
| 	if (left->type == QSE_AWK_VAL_MAP || right->type == QSE_AWK_VAL_MAP) | 	if (left->type == QSE_AWK_VAL_MAP || right->type == QSE_AWK_VAL_MAP) | ||||||
| 	{ | 	{ | ||||||
| 		/* a map can't be compared againt other values */ | 		/* a map can't be compared againt other values */ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return CMP_ERROR;  | 		return CMP_ERROR;  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4283,98 +4277,98 @@ static int __cmp_val ( | |||||||
| 		right->type >= QSE_AWK_VAL_NIL && | 		right->type >= QSE_AWK_VAL_NIL && | ||||||
| 		right->type <= QSE_AWK_VAL_STR); | 		right->type <= QSE_AWK_VAL_STR); | ||||||
|  |  | ||||||
| 	return func[left->type*4+right->type] (run, left, right); | 	return func[left->type*4+right->type] (rtx, left, right); | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_eq ( | static qse_awk_val_t* eval_binop_eq ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n = __cmp_val (run, left, right); | 	int n = __cmp_val (rtx, left, right); | ||||||
| 	if (n == CMP_ERROR) return QSE_NULL; | 	if (n == CMP_ERROR) return QSE_NULL; | ||||||
| 	return (n == 0)? qse_awk_val_one: qse_awk_val_zero; | 	return (n == 0)? qse_awk_val_one: qse_awk_val_zero; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_ne ( | static qse_awk_val_t* eval_binop_ne ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n = __cmp_val (run, left, right); | 	int n = __cmp_val (rtx, left, right); | ||||||
| 	if (n == CMP_ERROR) return QSE_NULL; | 	if (n == CMP_ERROR) return QSE_NULL; | ||||||
| 	return (n != 0)? qse_awk_val_one: qse_awk_val_zero; | 	return (n != 0)? qse_awk_val_one: qse_awk_val_zero; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_gt ( | static qse_awk_val_t* eval_binop_gt ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n = __cmp_val (run, left, right); | 	int n = __cmp_val (rtx, left, right); | ||||||
| 	if (n == CMP_ERROR) return QSE_NULL; | 	if (n == CMP_ERROR) return QSE_NULL; | ||||||
| 	return (n > 0)? qse_awk_val_one: qse_awk_val_zero; | 	return (n > 0)? qse_awk_val_one: qse_awk_val_zero; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_ge ( | static qse_awk_val_t* eval_binop_ge ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n = __cmp_val (run, left, right); | 	int n = __cmp_val (rtx, left, right); | ||||||
| 	if (n == CMP_ERROR) return QSE_NULL; | 	if (n == CMP_ERROR) return QSE_NULL; | ||||||
| 	return (n >= 0)? qse_awk_val_one: qse_awk_val_zero; | 	return (n >= 0)? qse_awk_val_one: qse_awk_val_zero; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_lt ( | static qse_awk_val_t* eval_binop_lt ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n = __cmp_val (run, left, right); | 	int n = __cmp_val (rtx, left, right); | ||||||
| 	if (n == CMP_ERROR) return QSE_NULL; | 	if (n == CMP_ERROR) return QSE_NULL; | ||||||
| 	return (n < 0)? qse_awk_val_one: qse_awk_val_zero; | 	return (n < 0)? qse_awk_val_one: qse_awk_val_zero; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_le ( | static qse_awk_val_t* eval_binop_le ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n = __cmp_val (run, left, right); | 	int n = __cmp_val (rtx, left, right); | ||||||
| 	if (n == CMP_ERROR) return QSE_NULL; | 	if (n == CMP_ERROR) return QSE_NULL; | ||||||
| 	return (n <= 0)? qse_awk_val_one: qse_awk_val_zero; | 	return (n <= 0)? qse_awk_val_one: qse_awk_val_zero; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_lshift ( | static qse_awk_val_t* eval_binop_lshift ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	n3 = n1 + (n2 << 1); | 	n3 = n1 + (n2 << 1); | ||||||
| 	if (n3 == 0) | 	if (n3 == 0) | ||||||
| 	{ | 	{ | ||||||
| 		return qse_awk_rtx_makeintval (run, (qse_long_t)l1<<(qse_long_t)l2); | 		return qse_awk_rtx_makeintval (rtx, (qse_long_t)l1<<(qse_long_t)l2); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_rshift ( | static qse_awk_val_t* eval_binop_rshift ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4382,28 +4376,28 @@ static qse_awk_val_t* eval_binop_rshift ( | |||||||
| 	if (n3 == 0) | 	if (n3 == 0) | ||||||
| 	{ | 	{ | ||||||
| 		return qse_awk_rtx_makeintval ( | 		return qse_awk_rtx_makeintval ( | ||||||
| 			run, (qse_long_t)l1>>(qse_long_t)l2); | 			rtx, (qse_long_t)l1>>(qse_long_t)l2); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_plus ( | static qse_awk_val_t* eval_binop_plus ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
| 	/* | 	/* | ||||||
| @ -4416,74 +4410,74 @@ static qse_awk_val_t* eval_binop_plus ( | |||||||
| 	n3 = n1 + (n2 << 1); | 	n3 = n1 + (n2 << 1); | ||||||
| 	QSE_ASSERT (n3 >= 0 && n3 <= 3); | 	QSE_ASSERT (n3 >= 0 && n3 <= 3); | ||||||
|  |  | ||||||
| 	return (n3 == 0)? qse_awk_rtx_makeintval(run,(qse_long_t)l1+(qse_long_t)l2): | 	return (n3 == 0)? qse_awk_rtx_makeintval(rtx,(qse_long_t)l1+(qse_long_t)l2): | ||||||
| 	       (n3 == 1)? qse_awk_rtx_makerealval(run,(qse_real_t)r1+(qse_real_t)l2): | 	       (n3 == 1)? qse_awk_rtx_makerealval(rtx,(qse_real_t)r1+(qse_real_t)l2): | ||||||
| 	       (n3 == 2)? qse_awk_rtx_makerealval(run,(qse_real_t)l1+(qse_real_t)r2): | 	       (n3 == 2)? qse_awk_rtx_makerealval(rtx,(qse_real_t)l1+(qse_real_t)r2): | ||||||
| 	                  qse_awk_rtx_makerealval(run,(qse_real_t)r1+(qse_real_t)r2); | 	                  qse_awk_rtx_makerealval(rtx,(qse_real_t)r1+(qse_real_t)r2); | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_minus ( | static qse_awk_val_t* eval_binop_minus ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	n3 = n1 + (n2 << 1); | 	n3 = n1 + (n2 << 1); | ||||||
| 	QSE_ASSERT (n3 >= 0 && n3 <= 3); | 	QSE_ASSERT (n3 >= 0 && n3 <= 3); | ||||||
| 	return (n3 == 0)? qse_awk_rtx_makeintval(run,(qse_long_t)l1-(qse_long_t)l2): | 	return (n3 == 0)? qse_awk_rtx_makeintval(rtx,(qse_long_t)l1-(qse_long_t)l2): | ||||||
| 	       (n3 == 1)? qse_awk_rtx_makerealval(run,(qse_real_t)r1-(qse_real_t)l2): | 	       (n3 == 1)? qse_awk_rtx_makerealval(rtx,(qse_real_t)r1-(qse_real_t)l2): | ||||||
| 	       (n3 == 2)? qse_awk_rtx_makerealval(run,(qse_real_t)l1-(qse_real_t)r2): | 	       (n3 == 2)? qse_awk_rtx_makerealval(rtx,(qse_real_t)l1-(qse_real_t)r2): | ||||||
| 	                  qse_awk_rtx_makerealval(run,(qse_real_t)r1-(qse_real_t)r2); | 	                  qse_awk_rtx_makerealval(rtx,(qse_real_t)r1-(qse_real_t)r2); | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_mul ( | static qse_awk_val_t* eval_binop_mul ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	n3 = n1 + (n2 << 1); | 	n3 = n1 + (n2 << 1); | ||||||
| 	QSE_ASSERT (n3 >= 0 && n3 <= 3); | 	QSE_ASSERT (n3 >= 0 && n3 <= 3); | ||||||
| 	return (n3 == 0)? qse_awk_rtx_makeintval(run,(qse_long_t)l1*(qse_long_t)l2): | 	return (n3 == 0)? qse_awk_rtx_makeintval(rtx,(qse_long_t)l1*(qse_long_t)l2): | ||||||
| 	       (n3 == 1)? qse_awk_rtx_makerealval(run,(qse_real_t)r1*(qse_real_t)l2): | 	       (n3 == 1)? qse_awk_rtx_makerealval(rtx,(qse_real_t)r1*(qse_real_t)l2): | ||||||
| 	       (n3 == 2)? qse_awk_rtx_makerealval(run,(qse_real_t)l1*(qse_real_t)r2): | 	       (n3 == 2)? qse_awk_rtx_makerealval(rtx,(qse_real_t)l1*(qse_real_t)r2): | ||||||
| 	                  qse_awk_rtx_makerealval(run,(qse_real_t)r1*(qse_real_t)r2); | 	                  qse_awk_rtx_makerealval(rtx,(qse_real_t)r1*(qse_real_t)r2); | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_div ( | static qse_awk_val_t* eval_binop_div ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
| 	qse_awk_val_t* res; | 	qse_awk_val_t* res; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1)  | 	if (n1 == -1 || n2 == -1)  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4492,55 +4486,55 @@ static qse_awk_val_t* eval_binop_div ( | |||||||
| 	{ | 	{ | ||||||
| 		if  (l2 == 0)  | 		if  (l2 == 0)  | ||||||
| 		{ | 		{ | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_EDIVBY0, QSE_NULL); | 			SETERR_COD (rtx, QSE_AWK_EDIVBY0); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (((qse_long_t)l1 % (qse_long_t)l2) == 0) | 		if (((qse_long_t)l1 % (qse_long_t)l2) == 0) | ||||||
| 		{ | 		{ | ||||||
| 			res = qse_awk_rtx_makeintval ( | 			res = qse_awk_rtx_makeintval ( | ||||||
| 				run, (qse_long_t)l1 / (qse_long_t)l2); | 				rtx, (qse_long_t)l1 / (qse_long_t)l2); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
| 		{ | 		{ | ||||||
| 			res = qse_awk_rtx_makerealval ( | 			res = qse_awk_rtx_makerealval ( | ||||||
| 				run, (qse_real_t)l1 / (qse_real_t)l2); | 				rtx, (qse_real_t)l1 / (qse_real_t)l2); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	else if (n3 == 1) | 	else if (n3 == 1) | ||||||
| 	{ | 	{ | ||||||
| 		res = qse_awk_rtx_makerealval ( | 		res = qse_awk_rtx_makerealval ( | ||||||
| 			run, (qse_real_t)r1 / (qse_real_t)l2); | 			rtx, (qse_real_t)r1 / (qse_real_t)l2); | ||||||
| 	} | 	} | ||||||
| 	else if (n3 == 2) | 	else if (n3 == 2) | ||||||
| 	{ | 	{ | ||||||
| 		res = qse_awk_rtx_makerealval ( | 		res = qse_awk_rtx_makerealval ( | ||||||
| 			run, (qse_real_t)l1 / (qse_real_t)r2); | 			rtx, (qse_real_t)l1 / (qse_real_t)r2); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		QSE_ASSERT (n3 == 3); | 		QSE_ASSERT (n3 == 3); | ||||||
| 		res = qse_awk_rtx_makerealval ( | 		res = qse_awk_rtx_makerealval ( | ||||||
| 			run, (qse_real_t)r1 / (qse_real_t)r2); | 			rtx, (qse_real_t)r1 / (qse_real_t)r2); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return res; | 	return res; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_idiv ( | static qse_awk_val_t* eval_binop_idiv ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2, quo; | 	qse_real_t r1, r2, quo; | ||||||
| 	qse_awk_val_t* res; | 	qse_awk_val_t* res; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1)  | 	if (n1 == -1 || n2 == -1)  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4549,47 +4543,47 @@ static qse_awk_val_t* eval_binop_idiv ( | |||||||
| 	{ | 	{ | ||||||
| 		if (l2 == 0)  | 		if (l2 == 0)  | ||||||
| 		{ | 		{ | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_EDIVBY0, QSE_NULL); | 			SETERR_COD (rtx, QSE_AWK_EDIVBY0); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| 		} | 		} | ||||||
| 		res = qse_awk_rtx_makeintval ( | 		res = qse_awk_rtx_makeintval ( | ||||||
| 			run, (qse_long_t)l1 / (qse_long_t)l2); | 			rtx, (qse_long_t)l1 / (qse_long_t)l2); | ||||||
| 	} | 	} | ||||||
| 	else if (n3 == 1) | 	else if (n3 == 1) | ||||||
| 	{ | 	{ | ||||||
| 		quo = (qse_real_t)r1 / (qse_real_t)l2; | 		quo = (qse_real_t)r1 / (qse_real_t)l2; | ||||||
| 		res = qse_awk_rtx_makeintval (run, (qse_long_t)quo); | 		res = qse_awk_rtx_makeintval (rtx, (qse_long_t)quo); | ||||||
| 	} | 	} | ||||||
| 	else if (n3 == 2) | 	else if (n3 == 2) | ||||||
| 	{ | 	{ | ||||||
| 		quo = (qse_real_t)l1 / (qse_real_t)r2; | 		quo = (qse_real_t)l1 / (qse_real_t)r2; | ||||||
| 		res = qse_awk_rtx_makeintval (run, (qse_long_t)quo); | 		res = qse_awk_rtx_makeintval (rtx, (qse_long_t)quo); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		QSE_ASSERT (n3 == 3); | 		QSE_ASSERT (n3 == 3); | ||||||
|  |  | ||||||
| 		quo = (qse_real_t)r1 / (qse_real_t)r2; | 		quo = (qse_real_t)r1 / (qse_real_t)r2; | ||||||
| 		res = qse_awk_rtx_makeintval (run, (qse_long_t)quo); | 		res = qse_awk_rtx_makeintval (rtx, (qse_long_t)quo); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return res; | 	return res; | ||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_mod ( | static qse_awk_val_t* eval_binop_mod ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
| 	qse_awk_val_t* res; | 	qse_awk_val_t* res; | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1) | 	if (n1 == -1 || n2 == -1) | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4598,15 +4592,15 @@ static qse_awk_val_t* eval_binop_mod ( | |||||||
| 	{ | 	{ | ||||||
| 		if  (l2 == 0)  | 		if  (l2 == 0)  | ||||||
| 		{ | 		{ | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_EDIVBY0, QSE_NULL); | 			SETERR_COD (rtx, QSE_AWK_EDIVBY0); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| 		} | 		} | ||||||
| 		res = qse_awk_rtx_makeintval ( | 		res = qse_awk_rtx_makeintval ( | ||||||
| 			run, (qse_long_t)l1 % (qse_long_t)l2); | 			rtx, (qse_long_t)l1 % (qse_long_t)l2); | ||||||
| 	} | 	} | ||||||
| 	else  | 	else  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4614,22 +4608,23 @@ static qse_awk_val_t* eval_binop_mod ( | |||||||
| } | } | ||||||
|  |  | ||||||
| static qse_awk_val_t* eval_binop_exp ( | static qse_awk_val_t* eval_binop_exp ( | ||||||
| 	qse_awk_rtx_t* run, qse_awk_val_t* left, qse_awk_val_t* right) | 	qse_awk_rtx_t* rtx, qse_awk_val_t* left, qse_awk_val_t* right) | ||||||
| { | { | ||||||
| 	int n1, n2, n3; | 	int n1, n2, n3; | ||||||
| 	qse_long_t l1, l2; | 	qse_long_t l1, l2; | ||||||
| 	qse_real_t r1, r2; | 	qse_real_t r1, r2; | ||||||
| 	qse_awk_val_t* res; | 	qse_awk_val_t* res; | ||||||
|  |  | ||||||
| 	QSE_ASSERTX (run->awk->prm.pow != QSE_NULL, | 	QSE_ASSERTX (rtx->awk->prm.pow != QSE_NULL, | ||||||
| 		"the pow function should be provided when the awk object is created to make the exponentiation work properly."); | 		"the pow function should be provided when the awk object" | ||||||
|  | 		" is created to make the exponentiation work properly."); | ||||||
|  |  | ||||||
| 	n1 = qse_awk_rtx_valtonum (run, left, &l1, &r1); | 	n1 = qse_awk_rtx_valtonum (rtx, left, &l1, &r1); | ||||||
| 	n2 = qse_awk_rtx_valtonum (run, right, &l2, &r2); | 	n2 = qse_awk_rtx_valtonum (rtx, right, &l2, &r2); | ||||||
|  |  | ||||||
| 	if (n1 == -1 || n2 == -1)  | 	if (n1 == -1 || n2 == -1)  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_EOPERAND, QSE_NULL); | 		SETERR_COD (rtx, QSE_AWK_EOPERAND); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -4641,11 +4636,11 @@ static qse_awk_val_t* eval_binop_exp ( | |||||||
| 		{ | 		{ | ||||||
| 			qse_long_t v = 1; | 			qse_long_t v = 1; | ||||||
| 			while (l2-- > 0) v *= l1; | 			while (l2-- > 0) v *= l1; | ||||||
| 			res = qse_awk_rtx_makeintval (run, v); | 			res = qse_awk_rtx_makeintval (rtx, v); | ||||||
| 		} | 		} | ||||||
| 		else if (l1 == 0) | 		else if (l1 == 0) | ||||||
| 		{ | 		{ | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_EDIVBY0, QSE_NULL); | 			SETERR_COD (rtx, QSE_AWK_EDIVBY0); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
| @ -4653,7 +4648,7 @@ static qse_awk_val_t* eval_binop_exp ( | |||||||
| 			qse_real_t v = 1.0; | 			qse_real_t v = 1.0; | ||||||
| 			l2 *= -1; | 			l2 *= -1; | ||||||
| 			while (l2-- > 0) v /= l1; | 			while (l2-- > 0) v /= l1; | ||||||
| 			res = qse_awk_rtx_makerealval (run, v); | 			res = qse_awk_rtx_makerealval (rtx, v); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	else if (n3 == 1) | 	else if (n3 == 1) | ||||||
| @ -4663,11 +4658,11 @@ static qse_awk_val_t* eval_binop_exp ( | |||||||
| 		{ | 		{ | ||||||
| 			qse_real_t v = 1.0; | 			qse_real_t v = 1.0; | ||||||
| 			while (l2-- > 0) v *= r1; | 			while (l2-- > 0) v *= r1; | ||||||
| 			res = qse_awk_rtx_makerealval (run, v); | 			res = qse_awk_rtx_makerealval (rtx, v); | ||||||
| 		} | 		} | ||||||
| 		else if (r1 == 0.0) | 		else if (r1 == 0.0) | ||||||
| 		{ | 		{ | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_EDIVBY0, QSE_NULL); | 			SETERR_COD (rtx, QSE_AWK_EDIVBY0); | ||||||
| 			return QSE_NULL; | 			return QSE_NULL; | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
| @ -4675,15 +4670,16 @@ static qse_awk_val_t* eval_binop_exp ( | |||||||
| 			qse_real_t v = 1.0; | 			qse_real_t v = 1.0; | ||||||
| 			l2 *= -1; | 			l2 *= -1; | ||||||
| 			while (l2-- > 0) v /= r1; | 			while (l2-- > 0) v /= r1; | ||||||
| 			res = qse_awk_rtx_makerealval (run, v); | 			res = qse_awk_rtx_makerealval (rtx, v); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	else if (n3 == 2) | 	else if (n3 == 2) | ||||||
| 	{ | 	{ | ||||||
| 		/* left - int, right - real */ | 		/* left - int, right - real */ | ||||||
| 		res = qse_awk_rtx_makerealval (run,  | 		res = qse_awk_rtx_makerealval ( | ||||||
| 			run->awk->prm.pow ( | 			rtx,  | ||||||
| 				run->awk, (qse_real_t)l1, (qse_real_t)r2 | 			rtx->awk->prm.pow ( | ||||||
|  | 				rtx->awk, (qse_real_t)l1, (qse_real_t)r2 | ||||||
| 			) | 			) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
| @ -4691,9 +4687,10 @@ static qse_awk_val_t* eval_binop_exp ( | |||||||
| 	{ | 	{ | ||||||
| 		/* left - real, right - real */ | 		/* left - real, right - real */ | ||||||
| 		QSE_ASSERT (n3 == 3); | 		QSE_ASSERT (n3 == 3); | ||||||
| 		res = qse_awk_rtx_makerealval (run, | 		res = qse_awk_rtx_makerealval ( | ||||||
| 			run->awk->prm.pow ( | 			rtx, | ||||||
| 				run->awk, (qse_real_t)r1,(qse_real_t)r2 | 			rtx->awk->prm.pow ( | ||||||
|  | 				rtx->awk, (qse_real_t)r1,(qse_real_t)r2 | ||||||
| 			) | 			) | ||||||
| 		); | 		); | ||||||
| 	} | 	} | ||||||
| @ -5457,7 +5454,7 @@ static qse_awk_val_t* eval_fun_ex ( | |||||||
| 		call->what.fun.name.ptr, call->what.fun.name.len); | 		call->what.fun.name.ptr, call->what.fun.name.len); | ||||||
| 	if (pair == QSE_NULL)  | 	if (pair == QSE_NULL)  | ||||||
| 	{ | 	{ | ||||||
| 		qse_awk_rtx_seterror ( | 		SETERR_ARGX_LOC ( | ||||||
| 			rtx, QSE_AWK_EFUNNF, | 			rtx, QSE_AWK_EFUNNF, | ||||||
| 			xstr_to_cstr(&call->what.fun.name), nde->line); | 			xstr_to_cstr(&call->what.fun.name), nde->line); | ||||||
| 		return QSE_NULL; | 		return QSE_NULL; | ||||||
| @ -5674,7 +5671,7 @@ static qse_awk_val_t* __eval_call ( | |||||||
| 				{ | 				{ | ||||||
| 					/* the handler has not set the error. | 					/* the handler has not set the error. | ||||||
| 					 * fix it */  | 					 * fix it */  | ||||||
| 					qse_awk_rtx_seterror ( | 					SETERR_ARGX_LOC ( | ||||||
| 						run, QSE_AWK_EFNCIMPL,  | 						run, QSE_AWK_EFNCIMPL,  | ||||||
| 						xstr_to_cstr(&call->what.fnc.oname), | 						xstr_to_cstr(&call->what.fnc.oname), | ||||||
| 						nde->line | 						nde->line | ||||||
| @ -6524,7 +6521,7 @@ static int shorten_record (qse_awk_rtx_t* run, qse_size_t nflds) | |||||||
| 		if (ofs_free != QSE_NULL)  | 		if (ofs_free != QSE_NULL)  | ||||||
| 			QSE_AWK_FREE (run->awk, ofs_free); | 			QSE_AWK_FREE (run->awk, ofs_free); | ||||||
| 		if (nflds > 1) qse_awk_rtx_refdownval (run, v); | 		if (nflds > 1) qse_awk_rtx_refdownval (run, v); | ||||||
| 		qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL); | 		SETERR_COD (run, QSE_AWK_ENOMEM); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -6536,7 +6533,7 @@ static int shorten_record (qse_awk_rtx_t* run, qse_size_t nflds) | |||||||
| 			if (ofs_free != QSE_NULL)  | 			if (ofs_free != QSE_NULL)  | ||||||
| 				QSE_AWK_FREE (run->awk, ofs_free); | 				QSE_AWK_FREE (run->awk, ofs_free); | ||||||
| 			if (nflds > 1) qse_awk_rtx_refdownval (run, v); | 			if (nflds > 1) qse_awk_rtx_refdownval (run, v); | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL); | 			SETERR_COD (run, QSE_AWK_ENOMEM); | ||||||
| 			return -1; | 			return -1; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @ -6548,7 +6545,7 @@ static int shorten_record (qse_awk_rtx_t* run, qse_size_t nflds) | |||||||
| 			if (ofs_free != QSE_NULL)  | 			if (ofs_free != QSE_NULL)  | ||||||
| 				QSE_AWK_FREE (run->awk, ofs_free); | 				QSE_AWK_FREE (run->awk, ofs_free); | ||||||
| 			if (nflds > 1) qse_awk_rtx_refdownval (run, v); | 			if (nflds > 1) qse_awk_rtx_refdownval (run, v); | ||||||
| 			qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL); | 			SETERR_COD (run, QSE_AWK_ENOMEM); | ||||||
| 			return -1; | 			return -1; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -6705,7 +6702,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 	do { \ | 	do { \ | ||||||
| 		if (qse_str_ccat (out, (c)) == -1) \ | 		if (qse_str_ccat (out, (c)) == -1) \ | ||||||
| 		{ \ | 		{ \ | ||||||
| 			qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); \ | 			SETERR_COD (rtx, QSE_AWK_ENOMEM); \ | ||||||
| 			return QSE_NULL; \ | 			return QSE_NULL; \ | ||||||
| 		} \ | 		} \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
| @ -6714,7 +6711,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 	do { \ | 	do { \ | ||||||
| 		if (qse_str_ccat (fbu, (c)) == -1) \ | 		if (qse_str_ccat (fbu, (c)) == -1) \ | ||||||
| 		{ \ | 		{ \ | ||||||
| 			qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); \ | 			SETERR_COD (rtx, QSE_AWK_ENOMEM); \ | ||||||
| 			return QSE_NULL; \ | 			return QSE_NULL; \ | ||||||
| 		} \ | 		} \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
| @ -6783,7 +6780,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			{ | 			{ | ||||||
| 				if (stack_arg_idx >= nargs_on_stack) | 				if (stack_arg_idx >= nargs_on_stack) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 					SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | ||||||
| @ -6794,7 +6791,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				{ | 				{ | ||||||
| 					if (stack_arg_idx >= nargs_on_stack) | 					if (stack_arg_idx >= nargs_on_stack) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
| 					v = val; | 					v = val; | ||||||
| @ -6836,7 +6833,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					GROW (&rtx->format.tmp); | 					GROW (&rtx->format.tmp); | ||||||
| 					if (rtx->format.tmp.ptr == QSE_NULL) | 					if (rtx->format.tmp.ptr == QSE_NULL) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
| @ -6889,7 +6886,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			{ | 			{ | ||||||
| 				if (stack_arg_idx >= nargs_on_stack) | 				if (stack_arg_idx >= nargs_on_stack) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 					SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | ||||||
| @ -6900,7 +6897,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				{ | 				{ | ||||||
| 					if (stack_arg_idx >= nargs_on_stack) | 					if (stack_arg_idx >= nargs_on_stack) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
| 					v = val; | 					v = val; | ||||||
| @ -6940,7 +6937,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					GROW (&rtx->format.tmp); | 					GROW (&rtx->format.tmp); | ||||||
| 					if (rtx->format.tmp.ptr == QSE_NULL) | 					if (rtx->format.tmp.ptr == QSE_NULL) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
| @ -7010,7 +7007,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			{ | 			{ | ||||||
| 				if (stack_arg_idx >= nargs_on_stack) | 				if (stack_arg_idx >= nargs_on_stack) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 					SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | ||||||
| @ -7021,7 +7018,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				{ | 				{ | ||||||
| 					if (stack_arg_idx >= nargs_on_stack) | 					if (stack_arg_idx >= nargs_on_stack) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
| 					v = val; | 					v = val; | ||||||
| @ -7063,7 +7060,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					GROW (&rtx->format.tmp); | 					GROW (&rtx->format.tmp); | ||||||
| 					if (rtx->format.tmp.ptr == QSE_NULL) | 					if (rtx->format.tmp.ptr == QSE_NULL) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
| @ -7098,7 +7095,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			{ | 			{ | ||||||
| 				if (stack_arg_idx >= nargs_on_stack) | 				if (stack_arg_idx >= nargs_on_stack) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 					SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | ||||||
| @ -7109,7 +7106,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				{ | 				{ | ||||||
| 					if (stack_arg_idx >= nargs_on_stack) | 					if (stack_arg_idx >= nargs_on_stack) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
| 					v = val; | 					v = val; | ||||||
| @ -7147,7 +7144,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					GROW (&rtx->format.tmp); | 					GROW (&rtx->format.tmp); | ||||||
| 					if (rtx->format.tmp.ptr == QSE_NULL) | 					if (rtx->format.tmp.ptr == QSE_NULL) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
|  |  | ||||||
| @ -7175,7 +7172,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			{ | 			{ | ||||||
| 				if (stack_arg_idx >= nargs_on_stack) | 				if (stack_arg_idx >= nargs_on_stack) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 					SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | ||||||
| @ -7186,7 +7183,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				{ | 				{ | ||||||
| 					if (stack_arg_idx >= nargs_on_stack) | 					if (stack_arg_idx >= nargs_on_stack) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum (rtx, QSE_AWK_EFMTARG, QSE_NULL); | 						SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
| 					v = val; | 					v = val; | ||||||
| @ -7227,11 +7224,15 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			else | 			else | ||||||
| 			{ | 			{ | ||||||
| 				qse_awk_rtx_refdownval (rtx, v); | 				qse_awk_rtx_refdownval (rtx, v); | ||||||
| 				qse_awk_rtx_seterrnum (rtx, QSE_AWK_EVALTYPE, QSE_NULL); | 				SETERR_COD (rtx, QSE_AWK_EVALTYPE); | ||||||
| 				return QSE_NULL; | 				return QSE_NULL; | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			if (prec == -1 || prec == 0 || prec > (qse_long_t)ch_len) prec = (qse_long_t)ch_len; | 			if (prec == -1 || prec == 0 || prec > (qse_long_t)ch_len)  | ||||||
|  | 			{ | ||||||
|  | 				prec = (qse_long_t)ch_len; | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			if (prec > width) width = prec; | 			if (prec > width) width = prec; | ||||||
|  |  | ||||||
| 			if (!minus) | 			if (!minus) | ||||||
| @ -7241,8 +7242,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					if (qse_str_ccat (out, QSE_T(' ')) == -1)  | 					if (qse_str_ccat (out, QSE_T(' ')) == -1)  | ||||||
| 					{  | 					{  | ||||||
| 						qse_awk_rtx_refdownval (rtx, v); | 						qse_awk_rtx_refdownval (rtx, v); | ||||||
| 						qse_awk_rtx_seterrnum ( | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 							rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 						return QSE_NULL;  | 						return QSE_NULL;  | ||||||
| 					}  | 					}  | ||||||
| 					width--; | 					width--; | ||||||
| @ -7254,8 +7254,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				if (qse_str_ccat (out, ch) == -1)  | 				if (qse_str_ccat (out, ch) == -1)  | ||||||
| 				{  | 				{  | ||||||
| 					qse_awk_rtx_refdownval (rtx, v); | 					qse_awk_rtx_refdownval (rtx, v); | ||||||
| 					qse_awk_rtx_seterrnum ( | 					SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 						rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 					return QSE_NULL;  | 					return QSE_NULL;  | ||||||
| 				}  | 				}  | ||||||
| 			} | 			} | ||||||
| @ -7267,8 +7266,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					if (qse_str_ccat (out, QSE_T(' ')) == -1)  | 					if (qse_str_ccat (out, QSE_T(' ')) == -1)  | ||||||
| 					{  | 					{  | ||||||
| 						qse_awk_rtx_refdownval (rtx, v); | 						qse_awk_rtx_refdownval (rtx, v); | ||||||
| 						qse_awk_rtx_seterrnum ( | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 							rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 						return QSE_NULL;  | 						return QSE_NULL;  | ||||||
| 					}  | 					}  | ||||||
| 					width--; | 					width--; | ||||||
| @ -7288,8 +7286,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 			{ | 			{ | ||||||
| 				if (stack_arg_idx >= nargs_on_stack) | 				if (stack_arg_idx >= nargs_on_stack) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_seterrnum ( | 					SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 						rtx, QSE_AWK_EFMTARG, QSE_NULL); |  | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | 				v = qse_awk_rtx_getarg (rtx, stack_arg_idx); | ||||||
| @ -7300,8 +7297,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				{ | 				{ | ||||||
| 					if (stack_arg_idx >= nargs_on_stack) | 					if (stack_arg_idx >= nargs_on_stack) | ||||||
| 					{ | 					{ | ||||||
| 						qse_awk_rtx_seterrnum ( | 						SETERR_COD (rtx, QSE_AWK_EFMTARG); | ||||||
| 							rtx, QSE_AWK_EFMTARG, QSE_NULL); |  | ||||||
| 						return QSE_NULL; | 						return QSE_NULL; | ||||||
| 					} | 					} | ||||||
| 					v = val; | 					v = val; | ||||||
| @ -7331,8 +7327,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 				if (v == val) | 				if (v == val) | ||||||
| 				{ | 				{ | ||||||
| 					qse_awk_rtx_refdownval (rtx, v); | 					qse_awk_rtx_refdownval (rtx, v); | ||||||
| 					qse_awk_rtx_seterrnum ( | 					SETERR_COD (rtx, QSE_AWK_EFMTCNV); | ||||||
| 						rtx, QSE_AWK_EFMTCNV, QSE_NULL); |  | ||||||
| 					return QSE_NULL; | 					return QSE_NULL; | ||||||
| 				} | 				} | ||||||
| 	 | 	 | ||||||
| @ -7360,8 +7355,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 						if (str_free != QSE_NULL)  | 						if (str_free != QSE_NULL)  | ||||||
| 							QSE_AWK_FREE (rtx->awk, str_free); | 							QSE_AWK_FREE (rtx->awk, str_free); | ||||||
| 						qse_awk_rtx_refdownval (rtx, v); | 						qse_awk_rtx_refdownval (rtx, v); | ||||||
| 						qse_awk_rtx_seterrnum ( | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 							rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 						return QSE_NULL;  | 						return QSE_NULL;  | ||||||
| 					}  | 					}  | ||||||
| 					width--; | 					width--; | ||||||
| @ -7375,8 +7369,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					if (str_free != QSE_NULL)  | 					if (str_free != QSE_NULL)  | ||||||
| 						QSE_AWK_FREE (rtx->awk, str_free); | 						QSE_AWK_FREE (rtx->awk, str_free); | ||||||
| 					qse_awk_rtx_refdownval (rtx, v); | 					qse_awk_rtx_refdownval (rtx, v); | ||||||
| 					qse_awk_rtx_seterrnum ( | 					SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 						rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 					return QSE_NULL;  | 					return QSE_NULL;  | ||||||
| 				}  | 				}  | ||||||
| 			} | 			} | ||||||
| @ -7390,8 +7383,7 @@ qse_char_t* qse_awk_rtx_format ( | |||||||
| 					if (qse_str_ccat (out, QSE_T(' ')) == -1)  | 					if (qse_str_ccat (out, QSE_T(' ')) == -1)  | ||||||
| 					{  | 					{  | ||||||
| 						qse_awk_rtx_refdownval (rtx, v); | 						qse_awk_rtx_refdownval (rtx, v); | ||||||
| 						qse_awk_rtx_seterrnum ( | 						SETERR_COD (rtx, QSE_AWK_ENOMEM); | ||||||
| 							rtx, QSE_AWK_ENOMEM, QSE_NULL); |  | ||||||
| 						return QSE_NULL;  | 						return QSE_NULL;  | ||||||
| 					}  | 					}  | ||||||
| 					width--; | 					width--; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user