| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  |  * $Id: tree.c,v 1.73 2006-09-02 14:58:28 bacon Exp $ | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-31 16:35:37 +00:00
										 |  |  | #include <xp/awk/awk_i.h>
 | 
					
						
							| 
									
										
										
										
											2006-01-18 15:16:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-16 04:31:38 +00:00
										 |  |  | #ifndef XP_AWK_STAND_ALONE
 | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | #include <xp/bas/memory.h>
 | 
					
						
							|  |  |  | #include <xp/bas/assert.h>
 | 
					
						
							|  |  |  | #include <xp/bas/stdio.h>
 | 
					
						
							| 
									
										
										
										
											2006-01-18 15:16:01 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-14 16:26:00 +00:00
										 |  |  | static const xp_char_t* __assop_str[] = | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2006-05-06 12:52:36 +00:00
										 |  |  | 	XP_T("="), | 
					
						
							|  |  |  | 	XP_T("+="), | 
					
						
							|  |  |  | 	XP_T("-="), | 
					
						
							|  |  |  | 	XP_T("*="), | 
					
						
							|  |  |  | 	XP_T("/="), | 
					
						
							|  |  |  | 	XP_T("%="), | 
					
						
							|  |  |  | 	XP_T("**=") | 
					
						
							| 
									
										
										
										
											2006-04-14 16:26:00 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-02-08 16:14:31 +00:00
										 |  |  | static const xp_char_t* __binop_str[] = | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-05-06 12:52:36 +00:00
										 |  |  | 	XP_T("||"), | 
					
						
							|  |  |  | 	XP_T("&&"), | 
					
						
							|  |  |  | 	XP_T("in"), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	XP_T("|"), | 
					
						
							|  |  |  | 	XP_T("^"), | 
					
						
							|  |  |  | 	XP_T("&"), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	XP_T("=="), | 
					
						
							|  |  |  | 	XP_T("!="), | 
					
						
							|  |  |  | 	XP_T(">"), | 
					
						
							|  |  |  | 	XP_T(">="), | 
					
						
							|  |  |  | 	XP_T("<"), | 
					
						
							|  |  |  | 	XP_T("<="), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	XP_T("<<"), | 
					
						
							|  |  |  | 	XP_T(">>"), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	XP_T("+"), | 
					
						
							|  |  |  | 	XP_T("-"), | 
					
						
							|  |  |  | 	XP_T("*"), | 
					
						
							|  |  |  | 	XP_T("/"), | 
					
						
							|  |  |  | 	XP_T("%"), | 
					
						
							|  |  |  | 	XP_T("**"), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-29 15:40:30 +00:00
										 |  |  | 	XP_T(" "), | 
					
						
							| 
									
										
										
										
											2006-05-06 12:52:36 +00:00
										 |  |  | 	XP_T("~"), | 
					
						
							|  |  |  | 	XP_T("!~") | 
					
						
							| 
									
										
										
										
											2006-03-31 12:04:14 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-02 12:45:04 +00:00
										 |  |  | static const xp_char_t* __unrop_str[] = | 
					
						
							| 
									
										
										
										
											2006-03-31 12:04:14 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-05-06 12:52:36 +00:00
										 |  |  | 	XP_T("+"), | 
					
						
							|  |  |  | 	XP_T("-"), | 
					
						
							|  |  |  | 	XP_T("!"), | 
					
						
							|  |  |  | 	XP_T("~") | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-02 12:45:04 +00:00
										 |  |  | static const xp_char_t* __incop_str[] = | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2006-05-06 12:52:36 +00:00
										 |  |  | 	XP_T("++"), | 
					
						
							|  |  |  | 	XP_T("--"), | 
					
						
							|  |  |  | 	XP_T("++"), | 
					
						
							|  |  |  | 	XP_T("--") | 
					
						
							| 
									
										
										
										
											2006-04-02 12:45:04 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 15:11:39 +00:00
										 |  |  | static const xp_char_t* __getline_inop_str[] = | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	XP_T("|"), | 
					
						
							| 
									
										
										
										
											2006-06-18 10:53:06 +00:00
										 |  |  | 	XP_T("|&"), | 
					
						
							| 
									
										
										
										
											2006-06-29 14:38:01 +00:00
										 |  |  | 	XP_T("<"), | 
					
						
							|  |  |  | 	XP_T("") | 
					
						
							| 
									
										
										
										
											2006-06-13 15:11:39 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | static const xp_char_t* __print_outop_str[] = | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	XP_T("|"), | 
					
						
							| 
									
										
										
										
											2006-06-18 10:53:06 +00:00
										 |  |  | 	XP_T("|&"), | 
					
						
							| 
									
										
										
										
											2006-06-22 14:15:02 +00:00
										 |  |  | 	XP_T(">"), | 
					
						
							| 
									
										
										
										
											2006-06-25 15:26:57 +00:00
										 |  |  | 	XP_T(">>"), | 
					
						
							|  |  |  | 	XP_T("") | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | #define PUT_SRCSTR(awk,str) \
 | 
					
						
							| 
									
										
										
										
											2006-08-21 14:51:32 +00:00
										 |  |  | 	do { if (xp_awk_putsrcstr (awk, str) == -1) return -1; } while (0) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | #define PUT_SRCSTRX(awk,str,len) \
 | 
					
						
							| 
									
										
										
										
											2006-08-21 14:51:32 +00:00
										 |  |  | 	do { if (xp_awk_putsrcstrx (awk, str, len) == -1) return -1; } while (0) | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define PRINT_TABS(awk,depth) \
 | 
					
						
							|  |  |  | 	do { if (__print_tabs(awk,depth) == -1) return -1; } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PRINT_EXPRESSION(awk,nde) \
 | 
					
						
							|  |  |  | 	do { if (__print_expression(awk,nde) == -1) return -1; } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PRINT_EXPRESSION_LIST(awk,nde) \
 | 
					
						
							|  |  |  | 	do { if (__print_expression_list(awk,nde) == -1) return -1; } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PRINT_STATEMENTS(awk,nde,depth) \
 | 
					
						
							|  |  |  | 	do { if (__print_statements(awk,nde,depth) == -1) return -1; } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int __print_tabs (xp_awk_t* awk, int depth); | 
					
						
							|  |  |  | static int __print_expression (xp_awk_t* awk, xp_awk_nde_t* nde); | 
					
						
							|  |  |  | static int __print_expression_list (xp_awk_t* awk, xp_awk_nde_t* tree); | 
					
						
							|  |  |  | static int __print_statements (xp_awk_t* awk, xp_awk_nde_t* tree, int depth); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int __print_tabs (xp_awk_t* awk, int depth) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-07-01 07:57:10 +00:00
										 |  |  | 	while (depth > 0)  | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 		PUT_SRCSTR (awk, XP_T("\t")); | 
					
						
							| 
									
										
										
										
											2006-07-01 07:57:10 +00:00
										 |  |  | 		depth--; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | static int __print_expression (xp_awk_t* awk, xp_awk_nde_t* nde) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-04-24 14:38:46 +00:00
										 |  |  | 	switch (nde->type)  | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 		case XP_AWK_NDE_GRP: | 
					
						
							| 
									
										
										
										
											2006-04-26 15:53:17 +00:00
										 |  |  | 		{	 | 
					
						
							|  |  |  | 			xp_awk_nde_t* p = ((xp_awk_nde_grp_t*)nde)->body; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							| 
									
										
										
										
											2006-07-01 07:57:10 +00:00
										 |  |  | 			while (p != XP_NULL)  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_EXPRESSION (awk, p); | 
					
						
							|  |  |  | 				if (p->next != XP_NULL)  | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T(",")); | 
					
						
							| 
									
										
										
										
											2006-04-26 15:53:17 +00:00
										 |  |  | 				p = p->next; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-04-26 15:53:17 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_ASS: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_ass_t* px = (xp_awk_nde_ass_t*)nde; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PRINT_EXPRESSION (awk, px->left); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, __assop_str[px->opcode]); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->right); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_assert (px->right->next == XP_NULL); | 
					
						
							|  |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 16:00:33 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_EXP_BIN: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_exp_t* px = (xp_awk_nde_exp_t*)nde; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->left); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_assert (px->left->next == XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, __binop_str[px->opcode]); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (px->right->type == XP_AWK_NDE_ASS)  | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->right); | 
					
						
							|  |  |  | 			if (px->right->type == XP_AWK_NDE_ASS)  | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_assert (px->right->next == XP_NULL);  | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 16:00:33 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 		case XP_AWK_NDE_EXP_UNR: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_exp_t* px = (xp_awk_nde_exp_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->right == XP_NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, __unrop_str[px->opcode]); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->left); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 16:00:33 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_EXP_INCPRE: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_exp_t* px = (xp_awk_nde_exp_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->right == XP_NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, __incop_str[px->opcode]); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->left); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 16:00:33 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 		case XP_AWK_NDE_EXP_INCPST: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_exp_t* px = (xp_awk_nde_exp_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->right == XP_NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->left); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, __incop_str[px->opcode]); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 13:45:59 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_CND: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_cnd_t* px = (xp_awk_nde_cnd_t*)nde; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("(")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->test); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(")?")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PRINT_EXPRESSION (awk, px->left); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(":")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, px->right); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_INT: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 				((xp_awk_nde_int_t*)nde)->val, | 
					
						
							|  |  |  | 				10, XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_REAL: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[128]; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 			xp_awk_sprintf ( | 
					
						
							|  |  |  | 				awk, tmp, xp_countof(tmp), XP_T("%Lf"),  | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				(long double)((xp_awk_nde_real_t*)nde)->val); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, tmp); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_STR: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			/* TODO: ESCAPING */ | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("\"")); | 
					
						
							|  |  |  | 			PUT_SRCSTRX (awk, | 
					
						
							|  |  |  | 				((xp_awk_nde_str_t*)nde)->buf,  | 
					
						
							|  |  |  | 				((xp_awk_nde_str_t*)nde)->len); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("\"")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 13:45:59 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 		case XP_AWK_NDE_REX: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-07-26 15:00:01 +00:00
										 |  |  | 			/* TODO: buf, len */ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("/")); | 
					
						
							|  |  |  | 			PUT_SRCSTRX (awk, | 
					
						
							|  |  |  | 				((xp_awk_nde_rex_t*)nde)->buf,  | 
					
						
							|  |  |  | 				((xp_awk_nde_rex_t*)nde)->len); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("/")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							| 
									
										
										
										
											2006-02-05 13:45:59 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_ARG: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->id.idxa != (xp_size_t)-1); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 				px->id.idxa, 10, XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("__param")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_assert (px->idx == XP_NULL); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_ARGIDX: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->id.idxa != (xp_size_t)-1); | 
					
						
							|  |  |  | 			xp_assert (px->idx != XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("__param")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 				px->id.idxa, 10, XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 			PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("[")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION_LIST (awk, px->idx); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("]")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_NAMED: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->id.idxa == (xp_size_t)-1); | 
					
						
							|  |  |  | 			xp_assert (px->idx == XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			PUT_SRCSTRX (awk, px->id.name, px->id.name_len); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_NAMEDIDX: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							|  |  |  | 			xp_assert (px->id.idxa == (xp_size_t)-1); | 
					
						
							|  |  |  | 			xp_assert (px->idx != XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			PUT_SRCSTRX (awk, px->id.name, px->id.name_len); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("[")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION_LIST (awk, px->idx); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("]")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_GLOBAL: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			if (px->id.idxa != (xp_size_t)-1)  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("__global")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 				n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 					px->id.idxa, 10,  | 
					
						
							|  |  |  | 					XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 				PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTRX (awk, px->id.name, px->id.name_len); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			xp_assert (px->idx == XP_NULL); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_GLOBALIDX: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			if (px->id.idxa != (xp_size_t)-1)  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("__global")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 				n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 					px->id.idxa, 10,  | 
					
						
							|  |  |  | 					XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 				PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("[")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTRX (awk, px->id.name, px->id.name_len); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("[")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			xp_assert (px->idx != XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PRINT_EXPRESSION_LIST (awk, px->idx); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("]")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_LOCAL: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			if (px->id.idxa != (xp_size_t)-1)  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("__local")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 				n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 					px->id.idxa, 10,  | 
					
						
							|  |  |  | 					XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 				PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTRX (awk, px->id.name, px->id.name_len); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			xp_assert (px->idx == XP_NULL); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_LOCALIDX: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 			xp_char_t tmp[xp_sizeof(xp_long_t)*8+2];  | 
					
						
							|  |  |  | 			xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			if (px->id.idxa != (xp_size_t)-1)  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("__local")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 				n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 					px->id.idxa, 10,  | 
					
						
							|  |  |  | 					XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 				PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("[")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else  | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTRX (awk, px->id.name, px->id.name_len); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("[")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			xp_assert (px->idx != XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PRINT_EXPRESSION_LIST (awk, px->idx); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T("]")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_POS: | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("$")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION (awk, ((xp_awk_nde_pos_t*)nde)->val); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-19 15:43:27 +00:00
										 |  |  | 		case XP_AWK_NDE_BFN: | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 			xp_awk_nde_call_t* px = (xp_awk_nde_call_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTRX (awk,  | 
					
						
							|  |  |  | 				px->what.bfn.name, px->what.bfn.name_len); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(" (")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION_LIST (awk, px->args); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-19 15:43:27 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-14 04:19:22 +00:00
										 |  |  | 		case XP_AWK_NDE_AFN: | 
					
						
							| 
									
										
										
										
											2006-06-19 15:43:27 +00:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-08-03 05:05:48 +00:00
										 |  |  | 			/* TODO: use px->what.afn.name_len */ | 
					
						
							| 
									
										
										
										
											2006-06-19 15:43:27 +00:00
										 |  |  | 			xp_awk_nde_call_t* px = (xp_awk_nde_call_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTRX (awk,  | 
					
						
							|  |  |  | 				px->what.afn.name, px->what.afn.name_len); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(" (")); | 
					
						
							|  |  |  | 			PRINT_EXPRESSION_LIST (awk, px->args); | 
					
						
							|  |  |  | 			PUT_SRCSTR (awk, XP_T(")")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case XP_AWK_NDE_GETLINE: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			xp_awk_nde_getline_t* px = (xp_awk_nde_getline_t*)nde; | 
					
						
							| 
									
										
										
										
											2006-06-13 15:11:39 +00:00
										 |  |  | 			if (px->in != XP_NULL && | 
					
						
							| 
									
										
										
										
											2006-06-28 10:40:24 +00:00
										 |  |  | 			    (px->in_type == XP_AWK_IN_PIPE || | 
					
						
							|  |  |  | 			     px->in_type == XP_AWK_IN_COPROC)) | 
					
						
							| 
									
										
										
										
											2006-06-13 15:11:39 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_EXPRESSION (awk, px->in); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, __getline_inop_str[px->in_type]); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 			PUT_SRCSTR (awk, XP_T("getline")); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			if (px->var != XP_NULL) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, px->var); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 15:11:39 +00:00
										 |  |  | 			if (px->in != XP_NULL && | 
					
						
							| 
									
										
										
										
											2006-06-28 10:40:24 +00:00
										 |  |  | 			    px->in_type == XP_AWK_IN_FILE) | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, __getline_inop_str[px->in_type]); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, px->in); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			}	   | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		default: | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			return -1; | 
					
						
							| 
									
										
										
										
											2006-02-05 13:45:59 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | static int __print_expression_list (xp_awk_t* awk, xp_awk_nde_t* tree) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-03-03 11:45:45 +00:00
										 |  |  | 	xp_awk_nde_t* p = tree; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 	while (p != XP_NULL)  | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 		PRINT_EXPRESSION (awk, p); | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 		p = p->next; | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 		if (p != XP_NULL) PUT_SRCSTR (awk, XP_T(",")); | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | static int __print_statements (xp_awk_t* awk, xp_awk_nde_t* tree, int depth) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-03-03 11:45:45 +00:00
										 |  |  | 	xp_awk_nde_t* p = tree; | 
					
						
							| 
									
										
										
										
											2006-02-05 06:10:43 +00:00
										 |  |  | 	xp_size_t i; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 	while (p != XP_NULL)  | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		switch (p->type)  | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_NULL: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(";\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-02-05 06:10:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_BLK: | 
					
						
							| 
									
										
										
										
											2006-04-24 14:38:46 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 				xp_char_t tmp[xp_sizeof(xp_long_t)*8+2]; | 
					
						
							|  |  |  | 				xp_size_t n; | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_blk_t* px = (xp_awk_nde_blk_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("{\n")); | 
					
						
							| 
									
										
										
										
											2006-02-05 06:10:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->nlocals > 0)  | 
					
						
							| 
									
										
										
										
											2006-04-24 14:38:46 +00:00
										 |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_TABS (awk, depth + 1); | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T("local ")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					for (i = 0; i < px->nlocals - 1; i++)  | 
					
						
							|  |  |  | 					{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 						PUT_SRCSTR (awk, XP_T("__local")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 						n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 							i, 10, XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 						PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 						PUT_SRCSTR (awk, XP_T(", ")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T("__local")); | 
					
						
							| 
									
										
										
										
											2006-09-02 14:59:15 +00:00
										 |  |  | 					n = xp_awk_longtostr ( | 
					
						
							|  |  |  | 						i, 10, XP_NULL, tmp, xp_countof(tmp)); | 
					
						
							|  |  |  | 					PUT_SRCSTRX (awk, tmp, n); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T(";\n")); | 
					
						
							| 
									
										
										
										
											2006-02-05 06:10:43 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_STATEMENTS (awk, px->body, depth + 1);	 | 
					
						
							|  |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("}\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 16:09:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_IF:  | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_if_t* px = (xp_awk_nde_if_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("if ("));	 | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, px->test); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(")\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				xp_assert (px->then_part != XP_NULL); | 
					
						
							|  |  |  | 				if (px->then_part->type == XP_AWK_NDE_BLK) | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->then_part, depth); | 
					
						
							| 
									
										
										
										
											2006-01-19 10:56:35 +00:00
										 |  |  | 				else | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->then_part, depth + 1); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if (px->else_part != XP_NULL)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T("else\n"));	 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 					if (px->else_part->type == XP_AWK_NDE_BLK) | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 						PRINT_STATEMENTS (awk, px->else_part, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 					else | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 						PRINT_STATEMENTS (awk, px->else_part, depth + 1); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-19 10:56:35 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_WHILE:  | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_while_t* px = (xp_awk_nde_while_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("while ("));	 | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, px->test); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(")\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->body->type == XP_AWK_NDE_BLK)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				else  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth + 1); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-19 10:56:35 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			case XP_AWK_NDE_DOWHILE:  | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_while_t* px = (xp_awk_nde_while_t*)p; | 
					
						
							| 
									
										
										
										
											2006-01-19 10:56:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("do\n"));	 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->body->type == XP_AWK_NDE_BLK)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				else  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth + 1); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-01-14 16:09:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("while ("));	 | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, px->test); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(");\n"));	 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-19 13:28:29 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_FOR: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_for_t* px = (xp_awk_nde_for_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("for (")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->init != XP_NULL)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_EXPRESSION (awk, px->init); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("; ")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->test != XP_NULL)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_EXPRESSION (awk, px->test); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("; ")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->incr != XP_NULL)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_EXPRESSION (awk, px->incr); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T(")\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if (px->body->type == XP_AWK_NDE_BLK)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				else  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth + 1); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-19 13:28:29 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_FOREACH: | 
					
						
							| 
									
										
										
										
											2006-04-30 17:12:51 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_foreach_t* px = (xp_awk_nde_foreach_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("for ")); | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, px->test); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->body->type == XP_AWK_NDE_BLK)  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				else  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_STATEMENTS (awk, px->body, depth + 1); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-04-30 17:12:51 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			case XP_AWK_NDE_BREAK: | 
					
						
							| 
									
										
										
										
											2006-04-30 17:12:51 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("break;\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-04-30 17:12:51 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_CONTINUE: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("continue;\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			case XP_AWK_NDE_RETURN: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (((xp_awk_nde_return_t*)p)->val == XP_NULL)  | 
					
						
							| 
									
										
										
										
											2006-04-24 14:38:46 +00:00
										 |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T("return;\n")); | 
					
						
							| 
									
										
										
										
											2006-01-28 06:38:01 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 				else  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T("return ")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 					xp_assert (((xp_awk_nde_return_t*)p)->val->next == XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					PRINT_EXPRESSION (awk, ((xp_awk_nde_return_t*)p)->val); | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T(";\n")); | 
					
						
							| 
									
										
										
										
											2006-01-28 06:38:01 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-28 06:38:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_EXIT: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_exit_t* px = (xp_awk_nde_exit_t*)p; | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if (px->val == XP_NULL)  | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T("exit;\n")); | 
					
						
							| 
									
										
										
										
											2006-01-28 06:38:01 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 				else  | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T("exit ")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 					xp_assert (px->val->next == XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PRINT_EXPRESSION (awk, px->val); | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T(";\n")); | 
					
						
							| 
									
										
										
										
											2006-01-28 06:38:01 +00:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_NEXT: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("next;\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-20 07:33:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_NEXTFILE: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("nextfile;\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-20 07:33:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-27 14:18:19 +00:00
										 |  |  | 			case XP_AWK_NDE_DELETE: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T("delete ")); | 
					
						
							|  |  |  | 		/* TODO: can't use __print_expression??? */ | 
					
						
							|  |  |  | 				xp_awk_prnpt (awk, ((xp_awk_nde_delete_t*)p)->var); | 
					
						
							| 
									
										
										
										
											2006-06-27 14:18:19 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 			case XP_AWK_NDE_PRINT: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				xp_awk_nde_print_t* px = (xp_awk_nde_print_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T("print")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				if (px->args != XP_NULL) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 					PRINT_EXPRESSION_LIST (awk, px->args); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (px->out != XP_NULL) | 
					
						
							|  |  |  | 				{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 					PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, __print_outop_str[px->out_type]); | 
					
						
							|  |  |  | 					PUT_SRCSTR (awk, XP_T(" ")); | 
					
						
							|  |  |  | 					PRINT_EXPRESSION (awk, px->out); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PUT_SRCSTR (awk, XP_T(";\n")); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			default: | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 				PRINT_TABS (awk, depth); | 
					
						
							|  |  |  | 				PRINT_EXPRESSION (awk, p); | 
					
						
							|  |  |  | 				PUT_SRCSTR (awk, XP_T(";\n")); | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		p = p->next; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | int xp_awk_prnpt (xp_awk_t* awk, xp_awk_nde_t* tree) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 	return __print_statements (awk, tree, 0); | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | int xp_awk_prnptnpt (xp_awk_t* awk, xp_awk_nde_t* tree) | 
					
						
							| 
									
										
										
										
											2006-05-07 17:45:08 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	xp_awk_nde_t* nde = tree; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	while (nde != XP_NULL) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 		if (__print_expression (awk, nde) == -1) return -1; | 
					
						
							| 
									
										
										
										
											2006-05-07 17:45:08 +00:00
										 |  |  | 		if (nde->next == XP_NULL) break; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 		PUT_SRCSTR (awk, XP_T(",")); | 
					
						
							| 
									
										
										
										
											2006-05-07 17:45:08 +00:00
										 |  |  | 		nde = nde->next; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2006-08-06 15:03:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2006-05-07 17:45:08 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | void xp_awk_clrpt (xp_awk_t* awk, xp_awk_nde_t* tree) | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-03-03 11:45:45 +00:00
										 |  |  | 	xp_awk_nde_t* p = tree; | 
					
						
							|  |  |  | 	xp_awk_nde_t* next; | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 	while (p != XP_NULL)  | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 		next = p->next; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 		switch (p->type)  | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_NULL: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_BLK: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_blk_t*)p)->body); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_IF: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_if_t* px = (xp_awk_nde_if_t*)p; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, px->test); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, px->then_part); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if (px->else_part != XP_NULL) | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					xp_awk_clrpt (awk, px->else_part); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-19 13:28:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_WHILE: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_DOWHILE: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_while_t*)p)->test); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_while_t*)p)->body); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 16:09:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_FOR: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_for_t* px = (xp_awk_nde_for_t*)p; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (px->init != XP_NULL) | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					xp_awk_clrpt (awk, px->init); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				if (px->test != XP_NULL) | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					xp_awk_clrpt (awk, px->test); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				if (px->incr != XP_NULL) | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					xp_awk_clrpt (awk, px->incr); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, px->body); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-19 13:28:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_FOREACH: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_foreach_t*)p)->test); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_foreach_t*)p)->body); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-18 16:12:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_BREAK: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-04-29 12:09:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_CONTINUE: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_RETURN: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_return_t* px = | 
					
						
							|  |  |  | 					(xp_awk_nde_return_t*)p; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				if (px->val != XP_NULL)  | 
					
						
							|  |  |  | 					xp_awk_clrpt (awk, px->val); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-03-04 15:54:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_EXIT: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				if (((xp_awk_nde_exit_t*)p)->val != XP_NULL)  | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					xp_awk_clrpt (awk, ((xp_awk_nde_exit_t*)p)->val); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-27 14:18:19 +00:00
										 |  |  | 			case XP_AWK_NDE_NEXT: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_NEXTFILE: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-27 14:18:19 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			case XP_AWK_NDE_DELETE: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_delete_t*)p)->var); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-27 14:18:19 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			case XP_AWK_NDE_PRINT: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_print_t* px =  | 
					
						
							|  |  |  | 					(xp_awk_nde_print_t*)p; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				if (px->args != XP_NULL)  | 
					
						
							|  |  |  | 					xp_awk_clrpt (awk, px->args); | 
					
						
							|  |  |  | 				if (px->out != XP_NULL)  | 
					
						
							|  |  |  | 					xp_awk_clrpt (awk, px->out); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-27 14:18:19 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_GRP: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_grp_t*)p)->body); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-04-26 15:53:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_ASS: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_ass_t*)p)->left); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_ass_t*)p)->right); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_EXP_BIN: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_exp_t* px = (xp_awk_nde_exp_t*)p; | 
					
						
							|  |  |  | 				xp_assert (px->left->next == XP_NULL); | 
					
						
							|  |  |  | 				xp_assert (px->right->next == XP_NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, px->left); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, px->right); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_EXP_UNR: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_EXP_INCPRE: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_EXP_INCPST: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_exp_t* px = (xp_awk_nde_exp_t*)p; | 
					
						
							|  |  |  | 				xp_assert (px->right == XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, px->left); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_CND: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_cnd_t*)p)->test); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_cnd_t*)p)->left); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_cnd_t*)p)->right); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_INT: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-04-11 09:16:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_REAL: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-03-05 17:07:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_STR: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, ((xp_awk_nde_str_t*)p)->buf); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-03-28 16:33:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_REX: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, ((xp_awk_nde_rex_t*)p)->buf); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, ((xp_awk_nde_rex_t*)p)->code); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_NAMED: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_GLOBAL: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_LOCAL: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_ARG: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)p; | 
					
						
							|  |  |  | 				xp_assert (px->idx == XP_NULL); | 
					
						
							|  |  |  | 				if (px->id.name != XP_NULL) | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					XP_AWK_FREE (awk, px->id.name); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-04-24 11:26:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_NAMEDIDX: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_GLOBALIDX: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_LOCALIDX: | 
					
						
							|  |  |  | 			case XP_AWK_NDE_ARGIDX: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_var_t* px = (xp_awk_nde_var_t*)p; | 
					
						
							|  |  |  | 				xp_assert (px->idx != XP_NULL); | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, px->idx); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				if (px->id.name != XP_NULL) | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 					XP_AWK_FREE (awk, px->id.name); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-31 16:57:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_POS: | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				xp_awk_clrpt (awk, ((xp_awk_nde_pos_t*)p)->val); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-31 16:57:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-19 15:43:27 +00:00
										 |  |  | 			case XP_AWK_NDE_BFN: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_call_t* px = (xp_awk_nde_call_t*)p; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				/* XP_AWK_FREE (awk, px->what.bfn); */ | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, px->args); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-19 15:43:27 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-14 04:19:22 +00:00
										 |  |  | 			case XP_AWK_NDE_AFN: | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_call_t* px = (xp_awk_nde_call_t*)p; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, px->what.afn.name); | 
					
						
							|  |  |  | 				xp_awk_clrpt (awk, px->args); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-25 14:50:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			case XP_AWK_NDE_GETLINE: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_awk_nde_getline_t* px =  | 
					
						
							|  |  |  | 					(xp_awk_nde_getline_t*)p; | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				if (px->var != XP_NULL)  | 
					
						
							|  |  |  | 					xp_awk_clrpt (awk, px->var); | 
					
						
							|  |  |  | 				if (px->in != XP_NULL)  | 
					
						
							|  |  |  | 					xp_awk_clrpt (awk, px->in); | 
					
						
							|  |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-13 08:35:53 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 			default: | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				xp_assert (!"should never happen - invalid node type"); | 
					
						
							| 
									
										
										
										
											2006-09-01 03:44:51 +00:00
										 |  |  | 				XP_AWK_FREE (awk, p); | 
					
						
							| 
									
										
										
										
											2006-06-12 15:11:02 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2006-01-14 14:09:52 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		p = next; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |