| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2020-04-16 03:42:30 +00:00
										 |  |  |     Copyright (c) 2006-2020 Chung, Hyung-Hwan. All rights reserved. | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Redistribution and use in source and binary forms, with or without | 
					
						
							|  |  |  |     modification, are permitted provided that the following conditions | 
					
						
							|  |  |  |     are met: | 
					
						
							|  |  |  |     1. Redistributions of source code must retain the above copyright | 
					
						
							|  |  |  |        notice, this list of conditions and the following disclaimer. | 
					
						
							|  |  |  |     2. Redistributions in binary form must reproduce the above copyright | 
					
						
							|  |  |  |        notice, this list of conditions and the following disclaimer in the | 
					
						
							|  |  |  |        documentation and/or other materials provided with the distribution. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR | 
					
						
							|  |  |  |     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | 
					
						
							|  |  |  |     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | 
					
						
							|  |  |  |     IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | 
					
						
							|  |  |  |     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | 
					
						
							|  |  |  |     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
					
						
							|  |  |  |     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
					
						
							|  |  |  |     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
					
						
							|  |  |  |     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 
					
						
							|  |  |  |     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _HAWK_TREE_PRV_H_
 | 
					
						
							|  |  |  | #define _HAWK_TREE_PRV_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-28 07:10:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | enum hawk_in_type_t | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 	/* the order of these values match
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	 * __in_type_map and __in_opt_map in rio.c */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HAWK_IN_PIPE, | 
					
						
							|  |  |  | 	HAWK_IN_RWPIPE, | 
					
						
							|  |  |  | 	HAWK_IN_FILE, | 
					
						
							|  |  |  | 	HAWK_IN_CONSOLE | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2020-12-28 07:10:17 +00:00
										 |  |  | typedef enum hawk_in_type_t hawk_in_type_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | enum hawk_out_type_t | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 	/* the order of these values match
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	 * __out_type_map and __out_opt_map in rio.c */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HAWK_OUT_PIPE, | 
					
						
							|  |  |  | 	HAWK_OUT_RWPIPE, /* dual direction pipe */ | 
					
						
							|  |  |  | 	HAWK_OUT_FILE, | 
					
						
							|  |  |  | 	HAWK_OUT_APFILE, /* file for appending */ | 
					
						
							|  |  |  | 	HAWK_OUT_CONSOLE | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2020-12-28 07:10:17 +00:00
										 |  |  | typedef enum hawk_out_type_t hawk_out_type_t; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct hawk_nde_blk_t       hawk_nde_blk_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_grp_t       hawk_nde_grp_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_ass_t       hawk_nde_ass_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_exp_t       hawk_nde_exp_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_cnd_t       hawk_nde_cnd_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_pos_t       hawk_nde_pos_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-04 16:19:01 +00:00
										 |  |  | typedef struct hawk_nde_char_t      hawk_nde_char_t; | 
					
						
							| 
									
										
										
										
											2020-12-09 18:07:20 +00:00
										 |  |  | typedef struct hawk_nde_bchr_t      hawk_nde_bchr_t; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | typedef struct hawk_nde_int_t       hawk_nde_int_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_flt_t       hawk_nde_flt_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_str_t       hawk_nde_str_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_mbs_t       hawk_nde_mbs_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_rex_t       hawk_nde_rex_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_fun_t       hawk_nde_fun_t; | 
					
						
							| 
									
										
										
										
											2020-11-10 02:56:29 +00:00
										 |  |  | typedef struct hawk_nde_xnil_t      hawk_nde_xnil_t; | 
					
						
							| 
									
										
										
										
											2024-05-03 14:04:03 +09:00
										 |  |  | typedef struct hawk_nde_xargvidx_t  hawk_nde_xargvidx_t; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct hawk_nde_var_t       hawk_nde_var_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_fncall_t    hawk_nde_fncall_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_getline_t   hawk_nde_getline_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct hawk_nde_if_t        hawk_nde_if_t; | 
					
						
							| 
									
										
										
										
											2025-06-18 23:45:34 +09:00
										 |  |  | typedef struct hawk_nde_switch_t    hawk_nde_switch_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_case_t      hawk_nde_case_t; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | typedef struct hawk_nde_while_t     hawk_nde_while_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_for_t       hawk_nde_for_t; | 
					
						
							| 
									
										
										
										
											2020-12-28 07:10:17 +00:00
										 |  |  | typedef struct hawk_nde_forin_t     hawk_nde_forin_t; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | typedef struct hawk_nde_break_t     hawk_nde_break_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_continue_t  hawk_nde_continue_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_return_t    hawk_nde_return_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_exit_t      hawk_nde_exit_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_next_t      hawk_nde_next_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_nextfile_t  hawk_nde_nextfile_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_delete_t    hawk_nde_delete_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_reset_t     hawk_nde_reset_t; | 
					
						
							|  |  |  | typedef struct hawk_nde_print_t     hawk_nde_print_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_BLK - block statement including top-level blocks */ | 
					
						
							|  |  |  | struct hawk_nde_blk_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_oow_t nlcls; /* number of local variables */ | 
					
						
							| 
									
										
										
										
											2020-11-12 08:02:36 +00:00
										 |  |  | 	hawk_oow_t org_nlcls; /* the original number of local variables before pushing to the top-level block  */ | 
					
						
							|  |  |  | 	hawk_oow_t outer_nlcls; /* the number of local variables in the outer blocks accumulated */ | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	hawk_nde_t* body; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_GRP - expression group */ | 
					
						
							|  |  |  | struct hawk_nde_grp_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* body; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_ASS - assignment */ | 
					
						
							|  |  |  | struct hawk_nde_ass_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	int opcode; | 
					
						
							|  |  |  | 	hawk_nde_t* left; | 
					
						
							|  |  |  | 	hawk_nde_t* right; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | /* HAWK_NDE_EXP_BIN, HAWK_NDE_EXP_UNR,
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  |  * HAWK_NDE_EXP_INCPRE, HAWK_AW_NDE_EXP_INCPST */ | 
					
						
							|  |  |  | struct hawk_nde_exp_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	int opcode; | 
					
						
							|  |  |  | 	hawk_nde_t* left; | 
					
						
							|  |  |  | 	hawk_nde_t* right; /* HAWK_NULL for UNR, INCPRE, INCPST */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_CND */ | 
					
						
							|  |  |  | struct hawk_nde_cnd_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* test; | 
					
						
							|  |  |  | 	hawk_nde_t* left; | 
					
						
							|  |  |  | 	hawk_nde_t* right; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_POS - positional - $1, $2, $x, etc */ | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | struct hawk_nde_pos_t | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							| 
									
										
										
										
											2020-03-05 06:33:58 +00:00
										 |  |  | 	hawk_nde_t* val; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-04 16:19:01 +00:00
										 |  |  | /* HAWK_NDE_CHAR */ | 
					
						
							|  |  |  | struct hawk_nde_char_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_ooch_t val; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-09 18:07:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_BCHR */ | 
					
						
							|  |  |  | struct hawk_nde_bchr_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_bch_t val; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | /* HAWK_NDE_INT */ | 
					
						
							|  |  |  | struct hawk_nde_int_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_int_t val; | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 	hawk_ooch_t* str; | 
					
						
							| 
									
										
										
										
											2020-12-04 16:19:01 +00:00
										 |  |  | 	hawk_oow_t len; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_FLT */ | 
					
						
							|  |  |  | struct hawk_nde_flt_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_flt_t val; | 
					
						
							| 
									
										
										
										
											2020-12-04 16:19:01 +00:00
										 |  |  | 	hawk_ooch_t* str; | 
					
						
							|  |  |  | 	hawk_oow_t len; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_STR */ | 
					
						
							|  |  |  | struct hawk_nde_str_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_ooch_t* ptr; | 
					
						
							| 
									
										
										
										
											2024-05-03 14:04:03 +09:00
										 |  |  | 	hawk_oow_t   len; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_MBS */ | 
					
						
							|  |  |  | struct hawk_nde_mbs_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_bch_t* ptr; | 
					
						
							| 
									
										
										
										
											2024-05-03 14:04:03 +09:00
										 |  |  | 	hawk_oow_t  len; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_REX */ | 
					
						
							|  |  |  | struct hawk_nde_rex_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							| 
									
										
										
										
											2024-05-03 14:04:03 +09:00
										 |  |  | 	hawk_oocs_t str; | 
					
						
							|  |  |  | 	hawk_tre_t* code[2]; /* [0]: case sensitive, [1]: case insensitive */ | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-10 02:56:29 +00:00
										 |  |  | struct hawk_nde_xnil_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-03 14:04:03 +09:00
										 |  |  | struct hawk_nde_xargvidx_t | 
					
						
							| 
									
										
										
										
											2024-05-02 22:36:50 +09:00
										 |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* pos; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | /* HAWK_NDE_FUN - function as a value */ | 
					
						
							|  |  |  | struct hawk_nde_fun_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_oocs_t name; /* function name */ | 
					
						
							|  |  |  | 	hawk_fun_t* funptr; /* HAWK_NULL or actual pointer */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | /* HAWK_NDE_NAMED, HAWK_NDE_GBL,
 | 
					
						
							|  |  |  |  * HAWK_NDE_LCL, HAWK_NDE_ARG | 
					
						
							|  |  |  |  * HAWK_NDE_NAMEDIDX, HAWK_NDE_GBLIDX, | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  |  * HAWK_NDE_LCLIDX, HAWK_NDE_ARGIDX */ | 
					
						
							|  |  |  | struct hawk_nde_var_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 	struct | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		hawk_oocs_t name; | 
					
						
							|  |  |  | 		hawk_oow_t idxa; | 
					
						
							|  |  |  | 	} id; | 
					
						
							|  |  |  | 	hawk_nde_t* idx; /* HAWK_NULL for non-XXXXIDX */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_FNCALL_FNC, HAWK_NDE_FNCALL_FUN, HAWK_NDE_FNCALL_VAR */ | 
					
						
							|  |  |  | struct hawk_nde_fncall_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	union | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		struct | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			hawk_oocs_t name; | 
					
						
							|  |  |  | 			hawk_fun_t* fun; /* cache it */ | 
					
						
							|  |  |  | 		} fun; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 		/* minimum information of an intrinsic function
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 		 * needed during run-time. */ | 
					
						
							|  |  |  | 		struct | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			hawk_fnc_info_t info; | 
					
						
							|  |  |  | 			hawk_fnc_spec_t spec; | 
					
						
							|  |  |  | 		} fnc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		struct | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			hawk_nde_var_t* var; | 
					
						
							|  |  |  | 		} var; | 
					
						
							|  |  |  | 	} u; | 
					
						
							|  |  |  | 	hawk_nde_t* args; | 
					
						
							|  |  |  | 	hawk_oow_t nargs; | 
					
						
							| 
									
										
										
										
											2020-04-12 18:23:44 +00:00
										 |  |  | 	hawk_oow_t arg_base; /* special field set by hawk::call() and handled by hawk_rtx_evalcall() */ | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_GETLINE */ | 
					
						
							|  |  |  | struct hawk_nde_getline_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* var; | 
					
						
							| 
									
										
										
										
											2020-01-16 09:22:59 +00:00
										 |  |  | 	int mbs; | 
					
						
							| 
									
										
										
										
											2020-12-28 07:10:17 +00:00
										 |  |  | 	hawk_in_type_t in_type; /* HAWK_IN_CONSOLE, HAWK_IN_FILE, etc */ | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	hawk_nde_t* in; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_IF */ | 
					
						
							|  |  |  | struct hawk_nde_if_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* test; | 
					
						
							|  |  |  | 	hawk_nde_t* then_part; | 
					
						
							|  |  |  | 	hawk_nde_t* else_part; /* optional */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-18 23:45:34 +09:00
										 |  |  | /* HAWK_NDE_SWITCH */ | 
					
						
							|  |  |  | struct hawk_nde_switch_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* test; | 
					
						
							|  |  |  | 	hawk_nde_t* case_part; /* optional */ | 
					
						
							|  |  |  | 	hawk_nde_t* default_part; /* optional */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_CASE */ | 
					
						
							|  |  |  | struct hawk_nde_case_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* val; | 
					
						
							|  |  |  | 	hawk_nde_t* action; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | /* HAWK_NDE_WHILE, HAWK_NDE_DOWHILE */ | 
					
						
							|  |  |  | struct hawk_nde_while_t | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 	HAWK_NDE_HDR; | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	hawk_nde_t* test; | 
					
						
							|  |  |  | 	hawk_nde_t* body; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_FOR */ | 
					
						
							|  |  |  | struct hawk_nde_for_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* init; /* optional */ | 
					
						
							|  |  |  | 	hawk_nde_t* test; /* optional */ | 
					
						
							|  |  |  | 	hawk_nde_t* incr; /* optional */ | 
					
						
							|  |  |  | 	hawk_nde_t* body; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-22 18:01:05 +00:00
										 |  |  | /* HAWK_NDE_FORIN */ | 
					
						
							|  |  |  | struct hawk_nde_forin_t | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* test; | 
					
						
							|  |  |  | 	hawk_nde_t* body; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_BREAK */ | 
					
						
							|  |  |  | struct hawk_nde_break_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_CONTINUE */ | 
					
						
							|  |  |  | struct hawk_nde_continue_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_RETURN */ | 
					
						
							|  |  |  | struct hawk_nde_return_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | 	hawk_nde_t* val; /* optional (no return code if HAWK_NULL) */ | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_EXIT */ | 
					
						
							|  |  |  | struct hawk_nde_exit_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* val; /* optional (no exit code if HAWK_NULL) */ | 
					
						
							|  |  |  | 	int abort; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_NEXT */ | 
					
						
							|  |  |  | struct hawk_nde_next_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_NEXTFILE */ | 
					
						
							|  |  |  | struct hawk_nde_nextfile_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	int out; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_DELETE */ | 
					
						
							|  |  |  | struct hawk_nde_delete_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* var; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_RESET */ | 
					
						
							|  |  |  | struct hawk_nde_reset_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* var; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HAWK_NDE_PRINT */ | 
					
						
							|  |  |  | struct hawk_nde_print_t | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	HAWK_NDE_HDR; | 
					
						
							|  |  |  | 	hawk_nde_t* args; | 
					
						
							| 
									
										
										
										
											2020-12-28 07:10:17 +00:00
										 |  |  | 	hawk_out_type_t out_type; /* HAWK_OUT_XXX */ | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 	hawk_nde_t* out; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(__cplusplus)
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* print the entire tree */ | 
					
						
							| 
									
										
										
										
											2020-04-16 03:42:30 +00:00
										 |  |  | int hawk_prnpt (hawk_t* hawk, hawk_nde_t* tree); | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | /* print a single top-level node */ | 
					
						
							| 
									
										
										
										
											2024-05-02 22:47:30 +09:00
										 |  |  | int hawk_prnnde (hawk_t* hawk, hawk_nde_t* node); | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | /* print the pattern part */ | 
					
						
							| 
									
										
										
										
											2020-04-16 03:42:30 +00:00
										 |  |  | int hawk_prnptnpt (hawk_t* hawk, hawk_nde_t* tree); | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-16 03:42:30 +00:00
										 |  |  | void hawk_clrpt (hawk_t* hawk, hawk_nde_t* tree); | 
					
						
							| 
									
										
										
										
											2019-12-13 04:29:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #if defined(__cplusplus)
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |