| 
							
							
							
						 |  |  | @ -1,5 +1,5 @@ | 
		
	
		
			
				|  |  |  |  | /* | 
		
	
		
			
				|  |  |  |  |  * $Id: parse.c 246 2009-07-27 02:31:58Z hyunghwan.chung $ | 
		
	
		
			
				|  |  |  |  |  * $Id: parse.c 247 2009-07-31 13:01:04Z hyunghwan.chung $ | 
		
	
		
			
				|  |  |  |  |  * | 
		
	
		
			
				|  |  |  |  |    Copyright 2006-2009 Chung, Hyung-Hwan. | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -379,7 +379,10 @@ static global_t gtab[] = | 
		
	
		
			
				|  |  |  |  | 			qse_awk_seterror (awk, code, (awk)->token.line, &errarg); \ | 
		
	
		
			
				|  |  |  |  | 	} while (0) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define SETERRARG(awk,code,line,arg,leng) \ | 
		
	
		
			
				|  |  |  |  | #define SETERRARG(awk,code,line,arg) \ | 
		
	
		
			
				|  |  |  |  | 	qse_awk_seterror ((awk), (code), (line), (arg)) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define SETERRARGL(awk,code,line,arg,leng) \ | 
		
	
		
			
				|  |  |  |  | 	do { \ | 
		
	
		
			
				|  |  |  |  | 		qse_cstr_t errarg; \ | 
		
	
		
			
				|  |  |  |  | 		errarg.len = (leng); \ | 
		
	
	
		
			
				
					
					|  |  |  | @ -519,7 +522,7 @@ static int parse (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 		/* cannot open the source file. | 
		
	
		
			
				|  |  |  |  | 		 * it doesn't even have to call CLOSE */ | 
		
	
		
			
				|  |  |  |  | 		if (ISNOERR(awk))  | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EOPEN, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EOPEN, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -560,7 +563,7 @@ static int parse (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 					QSE_MAP_KPTR(p), QSE_MAP_KLEN(p)) == QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 				{ | 
		
	
		
			
				|  |  |  |  | 					/* TODO: set better error no & line */ | 
		
	
		
			
				|  |  |  |  | 					SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 					SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 						awk, QSE_AWK_EFUNNF,  | 
		
	
		
			
				|  |  |  |  | 						*(qse_size_t*)QSE_MAP_VPTR(p), | 
		
	
		
			
				|  |  |  |  | 						QSE_MAP_KPTR(p), | 
		
	
	
		
			
				
					
					|  |  |  | @ -618,7 +621,7 @@ oops: | 
		
	
		
			
				|  |  |  |  | 			/* this is to keep the earlier error above | 
		
	
		
			
				|  |  |  |  | 			 * that might be more critical than this */ | 
		
	
		
			
				|  |  |  |  | 			if (ISNOERR(awk))  | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_ECLOSE, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_ECLOSE, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 			ret = -1; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @ -632,16 +635,15 @@ oops: | 
		
	
		
			
				|  |  |  |  | 	return ret; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | static int begin_include  (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | static int begin_include (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	int level; | 
		
	
		
			
				|  |  |  |  | 	qse_ssize_t op; | 
		
	
		
			
				|  |  |  |  | 	qse_char_t* file = QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 	qse_awk_sio_arg_t* arg = QSE_NULL; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	if (qse_strlen(awk->token.name->ptr) != awk->token.name->len) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk,  | 
		
	
		
			
				|  |  |  |  | 			QSE_AWK_EIONMNL, | 
		
	
		
			
				|  |  |  |  | 			awk->token.line, | 
		
	
	
		
			
				
					
					|  |  |  | @ -691,6 +693,11 @@ static int begin_include  (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	awk->sio.inp = arg; | 
		
	
		
			
				|  |  |  |  | 	awk->parse.depth.cur.incl++; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	arg->saved.line = awk->sio.lex.line; | 
		
	
		
			
				|  |  |  |  | 	arg->saved.column = awk->sio.lex.column; | 
		
	
		
			
				|  |  |  |  | 	awk->sio.lex.line = 1; | 
		
	
		
			
				|  |  |  |  | 	awk->sio.lex.column = 1; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	return 0; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | oops: | 
		
	
	
		
			
				
					
					|  |  |  | @ -738,6 +745,13 @@ retry: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if (MATCH(awk,TOKEN_INCLUDE)) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if (awk->parse.depth.max.incl > 0 && | 
		
	
		
			
				|  |  |  |  | 			    awk->parse.depth.cur.incl >=  awk->parse.depth.max.incl) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				SETERRLIN (awk, QSE_AWK_EINCLTD, awk->ptoken.line); | 
		
	
		
			
				|  |  |  |  | 				return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			if (get_token(awk) <= -1) return QSE_NULL; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			if (!MATCH(awk,TOKEN_STR)) | 
		
	
	
		
			
				
					
					|  |  |  | @ -746,17 +760,10 @@ retry: | 
		
	
		
			
				|  |  |  |  | 				return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			if (awk->parse.depth.max.incl > 0 && | 
		
	
		
			
				|  |  |  |  | 			    awk->parse.depth.cur.incl >=  awk->parse.depth.max.incl) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				SETERRLIN (awk, QSE_AWK_EINCLTD, awk->ptoken.line); | 
		
	
		
			
				|  |  |  |  | 				return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			if (begin_include (awk) <= -1) return QSE_NULL; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			/* read the first meaningful token from the included file  | 
		
	
		
			
				|  |  |  |  | 			 * and rematch it by jumping to retry */ | 
		
	
		
			
				|  |  |  |  | 			 * and recheck it by jumping to retry: */ | 
		
	
		
			
				|  |  |  |  | 			do | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				if (get_token(awk) <= -1) return QSE_NULL;  | 
		
	
	
		
			
				
					
					|  |  |  | @ -780,7 +787,7 @@ retry: | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		if ((awk->option & QSE_AWK_PABLOCK) == 0) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EFUNCTION); | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EKWFNC); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -808,7 +815,7 @@ retry: | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		if ((awk->option & QSE_AWK_PABLOCK) == 0) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EFUNCTION); | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EKWFNC); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -837,7 +844,7 @@ retry: | 
		
	
		
			
				|  |  |  |  | 		/* patternless block */ | 
		
	
		
			
				|  |  |  |  | 		if ((awk->option & QSE_AWK_PABLOCK) == 0) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EFUNCTION); | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EKWFNC); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -860,7 +867,7 @@ retry: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if ((awk->option & QSE_AWK_PABLOCK) == 0) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EFUNCTION); | 
		
	
		
			
				|  |  |  |  | 			SETERRTOK (awk, QSE_AWK_EKWFNC); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -972,7 +979,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	/* check if it is a builtin function */ | 
		
	
		
			
				|  |  |  |  | 	if (qse_awk_getfnc (awk, name, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG (awk, QSE_AWK_EFNCRED, awk->token.line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL (awk, QSE_AWK_EFNCRED, awk->token.line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 		return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -980,7 +987,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	if (qse_map_search (awk->tree.funs, name, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		/* the function is defined previously */ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EFUNRED, awk->token.line,  | 
		
	
		
			
				|  |  |  |  | 			name, name_len); | 
		
	
		
			
				|  |  |  |  | 		return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -989,7 +996,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	/* check if it conflicts with a named variable */ | 
		
	
		
			
				|  |  |  |  | 	if (qse_map_search (awk->parse.named, name, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EVARRED, awk->token.line,  | 
		
	
		
			
				|  |  |  |  | 			name, name_len); | 
		
	
		
			
				|  |  |  |  | 		return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -999,7 +1006,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	g = find_global (awk, name, name_len); | 
		
	
		
			
				|  |  |  |  | 	if (g != QSE_LDA_NIL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EGBLRED, awk->token.line,  | 
		
	
		
			
				|  |  |  |  | 			name, name_len); | 
		
	
		
			
				|  |  |  |  | 		return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1087,7 +1094,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 				QSE_AWK_FREE (awk, name_dup); | 
		
	
		
			
				|  |  |  |  | 				qse_lda_clear (awk->parse.params); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 					awk, QSE_AWK_EDUPPAR, awk->token.line, | 
		
	
		
			
				|  |  |  |  | 					param, param_len); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -1647,7 +1654,7 @@ static int add_global ( | 
		
	
		
			
				|  |  |  |  | 	/* check if it is a keyword */ | 
		
	
		
			
				|  |  |  |  | 	if (classify_ident (awk, name, len) != TOKEN_IDENT) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EKWRED, awk->token.line, | 
		
	
		
			
				|  |  |  |  | 			name, len); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1656,7 +1663,7 @@ static int add_global ( | 
		
	
		
			
				|  |  |  |  | 	/* check if it conflict with a builtin function name */ | 
		
	
		
			
				|  |  |  |  | 	if (qse_awk_getfnc (awk, name, len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EFNCRED, awk->token.line, | 
		
	
		
			
				|  |  |  |  | 			name, len); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1665,7 +1672,7 @@ static int add_global ( | 
		
	
		
			
				|  |  |  |  | 	/* check if it conflict with a function name */ | 
		
	
		
			
				|  |  |  |  | 	if (qse_map_search (awk->tree.funs, name, len) != QSE_NULL)  | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EFUNRED, line,  | 
		
	
		
			
				|  |  |  |  | 			name, len); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1675,7 +1682,7 @@ static int add_global ( | 
		
	
		
			
				|  |  |  |  | 	 * caught in the function call table */ | 
		
	
		
			
				|  |  |  |  | 	if (qse_map_search (awk->parse.funs, name, len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EFUNRED, line,  | 
		
	
		
			
				|  |  |  |  | 			name, len); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1684,7 +1691,7 @@ static int add_global ( | 
		
	
		
			
				|  |  |  |  | 	/* check if it conflicts with other global variable names */ | 
		
	
		
			
				|  |  |  |  | 	if (find_global (awk, name, len) != QSE_LDA_NIL) | 
		
	
		
			
				|  |  |  |  | 	{  | 
		
	
		
			
				|  |  |  |  | 		SETERRARG (awk, QSE_AWK_EDUPGBL, line, name, len); | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL (awk, QSE_AWK_EDUPGBL, line, name, len); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -1761,7 +1768,7 @@ int qse_awk_delgbl ( | 
		
	
		
			
				|  |  |  |  | 		QSE_AWK_NUM_STATIC_GBLS, name, len); | 
		
	
		
			
				|  |  |  |  | 	if (n == QSE_LDA_NIL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG (awk, QSE_AWK_ENOENT, 0, name, len); | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL (awk, QSE_AWK_ENOENT, 0, name, len); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -1866,7 +1873,7 @@ static qse_awk_t* collect_locals ( | 
		
	
		
			
				|  |  |  |  | 		 * function f() { local length; } */ | 
		
	
		
			
				|  |  |  |  | 		if (qse_awk_getfnc (awk, lcl.ptr, lcl.len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 				awk, QSE_AWK_EFNCRED, awk->token.line, | 
		
	
		
			
				|  |  |  |  | 				lcl.ptr, lcl.len); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1881,7 +1888,7 @@ static qse_awk_t* collect_locals ( | 
		
	
		
			
				|  |  |  |  | 				awk->parse.params, 0, lcl.ptr, lcl.len); | 
		
	
		
			
				|  |  |  |  | 			if (n != QSE_LDA_NIL) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 					awk, QSE_AWK_EPARRED, awk->token.line, | 
		
	
		
			
				|  |  |  |  | 					lcl.ptr, lcl.len); | 
		
	
		
			
				|  |  |  |  | 				return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1898,7 +1905,7 @@ static qse_awk_t* collect_locals ( | 
		
	
		
			
				|  |  |  |  | 					awk->tree.cur_fun.ptr, | 
		
	
		
			
				|  |  |  |  | 					awk->tree.cur_fun.len) == 0) | 
		
	
		
			
				|  |  |  |  | 				{ | 
		
	
		
			
				|  |  |  |  | 					SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 					SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 						awk, QSE_AWK_EFUNRED, | 
		
	
		
			
				|  |  |  |  | 						awk->token.line, | 
		
	
		
			
				|  |  |  |  | 						lcl.ptr, lcl.len); | 
		
	
	
		
			
				
					
					|  |  |  | @ -1914,7 +1921,7 @@ static qse_awk_t* collect_locals ( | 
		
	
		
			
				|  |  |  |  | 			lcl.ptr, lcl.len); | 
		
	
		
			
				|  |  |  |  | 		if (n != QSE_LDA_NIL) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 				awk, QSE_AWK_EDUPLCL, awk->token.line,  | 
		
	
		
			
				|  |  |  |  | 				lcl.ptr, lcl.len); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -1928,7 +1935,7 @@ static qse_awk_t* collect_locals ( | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				/* it is a conflict only if it is one of a  | 
		
	
		
			
				|  |  |  |  | 				 * static global variable */ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 					awk, QSE_AWK_EDUPLCL, awk->token.line,  | 
		
	
		
			
				|  |  |  |  | 					lcl.ptr, lcl.len); | 
		
	
		
			
				|  |  |  |  | 				return QSE_NULL; | 
		
	
	
		
			
				
					
					|  |  |  | @ -3143,8 +3150,7 @@ static qse_awk_nde_t* parse_primary_nogetline (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 				if (!MATCH(awk,TOKEN_IN)) | 
		
	
		
			
				|  |  |  |  | 				{ | 
		
	
		
			
				|  |  |  |  | 					qse_awk_clrpt (awk, nde); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 					SETERRTOK (awk, QSE_AWK_EIN); | 
		
	
		
			
				|  |  |  |  | 					SETERRTOK (awk, QSE_AWK_EKWIN); | 
		
	
		
			
				|  |  |  |  | 					return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
	
		
			
				
					
					|  |  |  | @ -3225,8 +3231,15 @@ static qse_awk_nde_t* parse_primary_nogetline (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	/* valid expression introducer is expected */ | 
		
	
		
			
				|  |  |  |  | 	SETERRLIN (awk, QSE_AWK_EEXPRES,  | 
		
	
		
			
				|  |  |  |  | 		(MATCH(awk,TOKEN_EOF)? awk->ptoken.line: line)); | 
		
	
		
			
				|  |  |  |  | 	if (MATCH(awk,TOKEN_NEWLINE)) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 			awk, QSE_AWK_EEXPRNR, awk->ptoken.line,  | 
		
	
		
			
				|  |  |  |  | 			QSE_STR_PTR(awk->ptoken.name),  | 
		
	
		
			
				|  |  |  |  | 			QSE_STR_LEN(awk->ptoken.name)); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	else SETERRTOK (awk, QSE_AWK_EEXPRNR); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3388,7 +3401,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 		if (MATCH(awk,TOKEN_LPAREN)) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			/* a local variable is not a function */ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EFUNNAME, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EFUNNAME, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 			QSE_AWK_FREE (awk, name_dup); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
	
		
			
				
					
					|  |  |  | @ -3422,7 +3435,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 		if (MATCH(awk,TOKEN_LPAREN)) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			/* a parameter is not a function */ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EFUNNAME, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EFUNNAME, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 			QSE_AWK_FREE (awk, name_dup); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
	
		
			
				
					
					|  |  |  | @ -3456,7 +3469,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 		if (MATCH(awk,TOKEN_LPAREN)) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			/* a global variable is not a function */ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EFUNNAME, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EFUNNAME, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 			QSE_AWK_FREE (awk, name_dup); | 
		
	
		
			
				|  |  |  |  | 			return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
	
		
			
				
					
					|  |  |  | @ -3492,7 +3505,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 				name_dup, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				/* a function call conflicts with a named variable */ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_EVARRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_EVARRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				QSE_AWK_FREE (awk, name_dup); | 
		
	
		
			
				|  |  |  |  | 				return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
	
		
			
				
					
					|  |  |  | @ -3524,7 +3537,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 			/* check if it is a builtin function */ | 
		
	
		
			
				|  |  |  |  | 			if (qse_awk_getfnc (awk, name_dup, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_EFNCRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_EFNCRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				goto exit_func; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3539,7 +3552,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 			if (iscur || qse_map_search (awk->tree.funs, name_dup, name_len) != QSE_NULL)  | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				/* the function is defined previously */ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_EFUNRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_EFUNRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				goto exit_func; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3547,7 +3560,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 				name_dup, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				/* is it one of the function calls found so far? */ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_EFUNRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_EFUNRED, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 				goto exit_func; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3572,7 +3585,7 @@ static qse_awk_nde_t* parse_primary_ident (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		/* undefined variable */ | 
		
	
		
			
				|  |  |  |  | 		SETERRARG (awk, QSE_AWK_EUNDEF, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  | 		SETERRARGL (awk, QSE_AWK_EUNDEF, line, name_dup, name_len); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	exit_func: | 
		
	
		
			
				|  |  |  |  | 		QSE_AWK_FREE (awk, name_dup); | 
		
	
	
		
			
				
					
					|  |  |  | @ -3705,7 +3718,7 @@ static qse_awk_nde_t* parse_hashidx ( | 
		
	
		
			
				|  |  |  |  | 		/* check if it is a builtin function */ | 
		
	
		
			
				|  |  |  |  | 		if (qse_awk_getfnc (awk, name, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EFNCRED, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EFNCRED, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 			goto exit_func; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3720,7 +3733,7 @@ static qse_awk_nde_t* parse_hashidx ( | 
		
	
		
			
				|  |  |  |  | 		if (iscur || qse_map_search (awk->tree.funs, name, name_len) != QSE_NULL)  | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			/* the function is defined previously */ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EFUNRED, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EFUNRED, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 			goto exit_func; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3728,7 +3741,7 @@ static qse_awk_nde_t* parse_hashidx ( | 
		
	
		
			
				|  |  |  |  | 			awk->parse.funs, name, name_len) != QSE_NULL) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			/* is it one of the function calls found so far? */ | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EFUNRED, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EFUNRED, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 			goto exit_func; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -3744,7 +3757,7 @@ static qse_awk_nde_t* parse_hashidx ( | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	/* undefined variable */ | 
		
	
		
			
				|  |  |  |  | 	SETERRARG (awk, QSE_AWK_EUNDEF, line, name, name_len); | 
		
	
		
			
				|  |  |  |  | 	SETERRARGL (awk, QSE_AWK_EUNDEF, line, name, name_len); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | exit_func: | 
		
	
	
		
			
				
					
					|  |  |  | @ -4243,7 +4256,7 @@ static qse_awk_nde_t* parse_dowhile (qse_awk_t* awk, qse_size_t line) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		qse_awk_clrpt (awk, body); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		SETERRTOK (awk, QSE_AWK_EWHILE); | 
		
	
		
			
				|  |  |  |  | 		SETERRTOK (awk, QSE_AWK_EKWWHL); | 
		
	
		
			
				|  |  |  |  | 		return QSE_NULL; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -4798,7 +4811,7 @@ static int get_number (qse_awk_t* awk, qse_awk_token_t* token) | 
		
	
		
			
				|  |  |  |  | 			if (c == QSE_T('8') || c == QSE_T('9')) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				qse_char_t cc = (qse_char_t)c; | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_ELXDIG, awk->token.line, &cc, 1); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_ELXDIG, awk->token.line, &cc, 1); | 
		
	
		
			
				|  |  |  |  | 				return -1; | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -5076,34 +5089,52 @@ retry: | 
		
	
		
			
				|  |  |  |  | 		if (n <= -1) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if (ISNOERR(awk)) | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_EREAD, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_EREAD, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 			return -1; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if (n == 0) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			/* EOF reached on an input script */ | 
		
	
		
			
				|  |  |  |  | 			if (awk->sio.inp != &awk->sio.arg) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				qse_awk_sio_arg_t* next; | 
		
	
		
			
				|  |  |  |  | 				int x; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				/* if it is an included file, close it and | 
		
	
		
			
				|  |  |  |  | 				 * retry to read a character from an outer file */ | 
		
	
		
			
				|  |  |  |  | 				qse_awk_sio_arg_t* cur; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				CLRERR (awk); | 
		
	
		
			
				|  |  |  |  | 				if (awk->sio.inf ( | 
		
	
		
			
				|  |  |  |  | 				x = awk->sio.inf ( | 
		
	
		
			
				|  |  |  |  | 					awk, QSE_AWK_SIO_CLOSE,  | 
		
	
		
			
				|  |  |  |  | 					awk->sio.inp, QSE_NULL, 0) != 0) | 
		
	
		
			
				|  |  |  |  | 					awk->sio.inp, QSE_NULL, 0); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				/* if closing has failed, still destroy the | 
		
	
		
			
				|  |  |  |  | 				 * sio structure first as normal and return | 
		
	
		
			
				|  |  |  |  | 				 * the failure below. this way, the caller  | 
		
	
		
			
				|  |  |  |  | 				 * does not call QSE_AWK_SIO_CLOSE on  | 
		
	
		
			
				|  |  |  |  | 				 * awk->sio.inp again. */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				cur = awk->sio.inp; | 
		
	
		
			
				|  |  |  |  | 				awk->sio.inp = awk->sio.inp->next; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				/* restore the previous line and column */ | 
		
	
		
			
				|  |  |  |  | 				awk->sio.lex.line = cur->saved.line; | 
		
	
		
			
				|  |  |  |  | 				awk->sio.lex.column = cur->saved.column; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				QSE_ASSERT (cur->name != QSE_NULL); | 
		
	
		
			
				|  |  |  |  | 				QSE_MMGR_FREE (awk->mmgr, cur->name); | 
		
	
		
			
				|  |  |  |  | 				QSE_MMGR_FREE (awk->mmgr, cur); | 
		
	
		
			
				|  |  |  |  | 				awk->parse.depth.cur.incl--; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				if (x != 0) | 
		
	
		
			
				|  |  |  |  | 				{ | 
		
	
		
			
				|  |  |  |  | 					/* the failure mentioned above is returned here */ | 
		
	
		
			
				|  |  |  |  | 					if (ISNOERR(awk)) | 
		
	
		
			
				|  |  |  |  | 						SETERRARG (awk, QSE_AWK_ECLOSE, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 						SETERRARGL (awk, QSE_AWK_ECLOSE, 0, QSE_T("<SIN>"), 5); | 
		
	
		
			
				|  |  |  |  | 					return -1; | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				next = awk->sio.inp->next;	 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				QSE_ASSERT (awk->sio.inp->name != QSE_NULL); | 
		
	
		
			
				|  |  |  |  | 				QSE_MMGR_FREE (awk->mmgr, awk->sio.inp->name); | 
		
	
		
			
				|  |  |  |  | 				QSE_MMGR_FREE (awk->mmgr, awk->sio.inp); | 
		
	
		
			
				|  |  |  |  | 				awk->parse.depth.cur.incl--; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 				awk->sio.inp = next; | 
		
	
		
			
				|  |  |  |  | 				goto retry; | 
		
	
		
			
				|  |  |  |  | 			}			 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -5438,7 +5469,7 @@ static int get_token_into (qse_awk_t* awk, qse_awk_token_t* token) | 
		
	
		
			
				|  |  |  |  | 			/* not handled yet */ | 
		
	
		
			
				|  |  |  |  | 			if (c == QSE_T('\0')) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 					awk, QSE_AWK_ELXCHR, token->line,  | 
		
	
		
			
				|  |  |  |  | 					QSE_T("<NUL>"), 5 | 
		
	
		
			
				|  |  |  |  | 				); | 
		
	
	
		
			
				
					
					|  |  |  | @ -5446,7 +5477,7 @@ static int get_token_into (qse_awk_t* awk, qse_awk_token_t* token) | 
		
	
		
			
				|  |  |  |  | 			else | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				qse_char_t cc = (qse_char_t)c; | 
		
	
		
			
				|  |  |  |  | 				SETERRARG ( | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL ( | 
		
	
		
			
				|  |  |  |  | 					awk, QSE_AWK_ELXCHR, token->line,  | 
		
	
		
			
				|  |  |  |  | 					&cc, 1 | 
		
	
		
			
				|  |  |  |  | 				); | 
		
	
	
		
			
				
					
					|  |  |  | @ -5463,6 +5494,7 @@ static int get_token (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	awk->ptoken.type = awk->token.type; | 
		
	
		
			
				|  |  |  |  | 	awk->ptoken.line = awk->token.line; | 
		
	
		
			
				|  |  |  |  | 	awk->ptoken.column = awk->token.column; | 
		
	
		
			
				|  |  |  |  | 	qse_str_swap (awk->ptoken.name, awk->token.name); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	if (QSE_STR_LEN(awk->ntoken.name) > 0) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
	
		
			
				
					
					|  |  |  | @ -5611,7 +5643,7 @@ static int deparse (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 	if (op <= -1) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		if (ISNOERR(awk))  | 
		
	
		
			
				|  |  |  |  | 			SETERRARG (awk, QSE_AWK_EOPEN, 0, QSE_T("<SOUT>"), 6); | 
		
	
		
			
				|  |  |  |  | 			SETERRARGL (awk, QSE_AWK_EOPEN, 0, QSE_T("<SOUT>"), 6); | 
		
	
		
			
				|  |  |  |  | 		return -1; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -5821,7 +5853,7 @@ exit_deparse: | 
		
	
		
			
				|  |  |  |  | 		if (n == 0) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if (ISNOERR(awk))  | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_ECLOSE, 0, QSE_T("<SOUT>"), 6); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_ECLOSE, 0, QSE_T("<SOUT>"), 6); | 
		
	
		
			
				|  |  |  |  | 			n = -1; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @ -5918,7 +5950,7 @@ static int flush_out (qse_awk_t* awk) | 
		
	
		
			
				|  |  |  |  | 		if (n <= 0)  | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if (ISNOERR(awk))  | 
		
	
		
			
				|  |  |  |  | 				SETERRARG (awk, QSE_AWK_EWRITE, 0, QSE_T("<SOUT>"), 6); | 
		
	
		
			
				|  |  |  |  | 				SETERRARGL (awk, QSE_AWK_EWRITE, 0, QSE_T("<SOUT>"), 6); | 
		
	
		
			
				|  |  |  |  | 			return -1; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | 
 |