fixed assertion expressions in run_switch()
This commit is contained in:
		
							
								
								
									
										266
									
								
								lib/run.c
									
									
									
									
									
								
							
							
						
						
									
										266
									
								
								lib/run.c
									
									
									
									
									
								
							@ -206,7 +206,7 @@ HAWK_INLINE hawk_val_t* hawk_rtx_getarg (hawk_rtx_t* rtx, hawk_oow_t idx)
 | 
			
		||||
 | 
			
		||||
HAWK_INLINE hawk_val_t* hawk_rtx_getgbl (hawk_rtx_t* rtx, int id)
 | 
			
		||||
{
 | 
			
		||||
	HAWK_ASSERT (id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->hawk->parse.gbls));
 | 
			
		||||
	HAWK_ASSERT(id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->hawk->parse.gbls));
 | 
			
		||||
	return HAWK_RTX_STACK_GBL(rtx, id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -370,7 +370,7 @@ static int set_global (hawk_rtx_t* rtx, int idx, hawk_nde_var_t* var, hawk_val_t
 | 
			
		||||
 | 
			
		||||
			/* due to the expression evaluation rule, the
 | 
			
		||||
			 * regular expression can not be an assigned value */
 | 
			
		||||
			HAWK_ASSERT (vtype != HAWK_VAL_REX);
 | 
			
		||||
			HAWK_ASSERT(vtype != HAWK_VAL_REX);
 | 
			
		||||
 | 
			
		||||
			fs_ptr = hawk_rtx_getvaloocstr(rtx, val, &fs_len);
 | 
			
		||||
			if (HAWK_UNLIKELY(!fs_ptr)) return -1;
 | 
			
		||||
@ -550,7 +550,7 @@ static int set_global (hawk_rtx_t* rtx, int idx, hawk_nde_var_t* var, hawk_val_t
 | 
			
		||||
			/* due to the expression evaluation rule, the
 | 
			
		||||
			 * regular expression can not be an assigned
 | 
			
		||||
			 * value */
 | 
			
		||||
			HAWK_ASSERT (vtype != HAWK_VAL_REX);
 | 
			
		||||
			HAWK_ASSERT(vtype != HAWK_VAL_REX);
 | 
			
		||||
 | 
			
		||||
			rss.ptr = hawk_rtx_getvaloocstr(rtx, val, &rss.len);
 | 
			
		||||
			if (!rss.ptr) return -1;
 | 
			
		||||
@ -651,7 +651,7 @@ HAWK_INLINE void hawk_rtx_setretval (hawk_rtx_t* rtx, hawk_val_t* val)
 | 
			
		||||
 | 
			
		||||
HAWK_INLINE int hawk_rtx_setgbl (hawk_rtx_t* rtx, int id, hawk_val_t* val)
 | 
			
		||||
{
 | 
			
		||||
	HAWK_ASSERT (id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->hawk->parse.gbls));
 | 
			
		||||
	HAWK_ASSERT(id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->hawk->parse.gbls));
 | 
			
		||||
	return set_global(rtx, id, HAWK_NULL, val, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -660,7 +660,7 @@ int hawk_rtx_setgbltostrbyname (hawk_rtx_t* rtx, const hawk_ooch_t* name, const
 | 
			
		||||
	int id, n;
 | 
			
		||||
	hawk_val_t* v;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (hawk_isvalidident(hawk_rtx_gethawk(rtx), name));
 | 
			
		||||
	HAWK_ASSERT(hawk_isvalidident(hawk_rtx_gethawk(rtx), name));
 | 
			
		||||
 | 
			
		||||
	id = hawk_findgblwithoocstr(hawk_rtx_gethawk(rtx), name, 1);
 | 
			
		||||
	v = hawk_rtx_makestrvalwithoocstr(rtx, val);
 | 
			
		||||
@ -949,7 +949,7 @@ void hawk_rtx_close (hawk_rtx_t* rtx)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	do { ecb = hawk_rtx_popecb(rtx); } while (ecb);
 | 
			
		||||
	HAWK_ASSERT (rtx->ecb == (hawk_rtx_ecb_t*)rtx);
 | 
			
		||||
	HAWK_ASSERT(rtx->ecb == (hawk_rtx_ecb_t*)rtx);
 | 
			
		||||
 | 
			
		||||
	/* NOTE:
 | 
			
		||||
	 *  the close callbacks are called before data in rtx
 | 
			
		||||
@ -1193,7 +1193,7 @@ static void fini_rtx (hawk_rtx_t* rtx, int fini_globals)
 | 
			
		||||
	/* close all pending io's */
 | 
			
		||||
	/* TODO: what if this operation fails? */
 | 
			
		||||
	hawk_rtx_clearallios (rtx);
 | 
			
		||||
	HAWK_ASSERT (rtx->rio.chain == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(rtx->rio.chain == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	if (rtx->gbl.rs[0])
 | 
			
		||||
	{
 | 
			
		||||
@ -1284,7 +1284,7 @@ static void fini_rtx (hawk_rtx_t* rtx, int fini_globals)
 | 
			
		||||
	/* destroy the stack if necessary */
 | 
			
		||||
	if (rtx->stack)
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (rtx->stack_top == 0);
 | 
			
		||||
		HAWK_ASSERT(rtx->stack_top == 0);
 | 
			
		||||
 | 
			
		||||
		hawk_rtx_freemem(rtx, rtx->stack);
 | 
			
		||||
		rtx->stack = HAWK_NULL;
 | 
			
		||||
@ -1455,7 +1455,7 @@ static int defaultify_globals (hawk_rtx_t* rtx)
 | 
			
		||||
 | 
			
		||||
		hawk_rtx_refupval(rtx, tmp);
 | 
			
		||||
 | 
			
		||||
		HAWK_ASSERT (HAWK_RTX_STACK_GBL(rtx,gtab[i].idx) == hawk_val_nil);
 | 
			
		||||
		HAWK_ASSERT(HAWK_RTX_STACK_GBL(rtx,gtab[i].idx) == hawk_val_nil);
 | 
			
		||||
 | 
			
		||||
		if (hawk_rtx_setgbl(rtx, gtab[i].idx, tmp) == -1)
 | 
			
		||||
		{
 | 
			
		||||
@ -1491,8 +1491,8 @@ static void refdown_globals (hawk_rtx_t* rtx, int pop)
 | 
			
		||||
static int init_globals (hawk_rtx_t* rtx)
 | 
			
		||||
{
 | 
			
		||||
	/* the stack must be clean when this function is invoked */
 | 
			
		||||
	HAWK_ASSERT (rtx->stack_base == 0);
 | 
			
		||||
	HAWK_ASSERT (rtx->stack_top == 0);
 | 
			
		||||
	HAWK_ASSERT(rtx->stack_base == 0);
 | 
			
		||||
	HAWK_ASSERT(rtx->stack_top == 0);
 | 
			
		||||
 | 
			
		||||
	if (prepare_globals(rtx) <= -1) return -1;
 | 
			
		||||
	if (update_fnr(rtx, 0, 0) <= -1 || defaultify_globals(rtx) <= -1) goto oops;
 | 
			
		||||
@ -1537,7 +1537,7 @@ static hawk_val_t* run_bpae_loop (hawk_rtx_t* rtx)
 | 
			
		||||
		hawk_nde_blk_t* blk;
 | 
			
		||||
 | 
			
		||||
		blk = (hawk_nde_blk_t*)nde;
 | 
			
		||||
		HAWK_ASSERT (blk->type == HAWK_NDE_BLK);
 | 
			
		||||
		HAWK_ASSERT(blk->type == HAWK_NDE_BLK);
 | 
			
		||||
 | 
			
		||||
		rtx->active_block = blk;
 | 
			
		||||
		rtx->exit_level = EXIT_NONE;
 | 
			
		||||
@ -1582,7 +1582,7 @@ static hawk_val_t* run_bpae_loop (hawk_rtx_t* rtx)
 | 
			
		||||
		hawk_nde_blk_t* blk;
 | 
			
		||||
 | 
			
		||||
		blk = (hawk_nde_blk_t*)nde;
 | 
			
		||||
		HAWK_ASSERT (blk->type == HAWK_NDE_BLK);
 | 
			
		||||
		HAWK_ASSERT(blk->type == HAWK_NDE_BLK);
 | 
			
		||||
 | 
			
		||||
		rtx->active_block = blk;
 | 
			
		||||
		rtx->exit_level = EXIT_NONE;
 | 
			
		||||
@ -1609,7 +1609,7 @@ static hawk_val_t* run_bpae_loop (hawk_rtx_t* rtx)
 | 
			
		||||
	 * pushed to the stack as asserted below. we didn't push any arguments
 | 
			
		||||
	 * for BEGIN/pattern action/END block execution.*/
 | 
			
		||||
	nargs = (hawk_oow_t)HAWK_RTX_STACK_NARGS(rtx);
 | 
			
		||||
	HAWK_ASSERT (nargs == 0);
 | 
			
		||||
	HAWK_ASSERT(nargs == 0);
 | 
			
		||||
	for (i = 0; i < nargs; i++)
 | 
			
		||||
		hawk_rtx_refdownval(rtx, HAWK_RTX_STACK_ARG(rtx,i));
 | 
			
		||||
 | 
			
		||||
@ -1658,7 +1658,7 @@ hawk_val_t* hawk_rtx_loop (hawk_rtx_t* rtx)
 | 
			
		||||
	retv = run_bpae_loop(rtx);
 | 
			
		||||
 | 
			
		||||
	/* exit the stack frame */
 | 
			
		||||
	HAWK_ASSERT ((rtx->stack_top - rtx->stack_base) == 4); /* at this point, the current stack frame should have the 4 entries pushed above */
 | 
			
		||||
	HAWK_ASSERT((rtx->stack_top - rtx->stack_base) == 4); /* at this point, the current stack frame should have the 4 entries pushed above */
 | 
			
		||||
	rtx->stack_top = (hawk_oow_t)rtx->stack[rtx->stack_base + 1];
 | 
			
		||||
	rtx->stack_base = (hawk_oow_t)rtx->stack[rtx->stack_base + 0];
 | 
			
		||||
 | 
			
		||||
@ -1758,7 +1758,7 @@ hawk_val_t* hawk_rtx_callfun (hawk_rtx_t* rtx, hawk_fun_t* fun, hawk_val_t* args
 | 
			
		||||
	struct pafv_t pafv/*= { args, nargs }*/;
 | 
			
		||||
	hawk_nde_fncall_t call;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (fun != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(fun != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	pafv.args = args;
 | 
			
		||||
	pafv.nargs = nargs;
 | 
			
		||||
@ -2082,8 +2082,8 @@ static int run_pblock (hawk_rtx_t* rtx, hawk_chain_t* cha, hawk_oow_t bno)
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			/* pattern, pattern { ... } */
 | 
			
		||||
			HAWK_ASSERT (ptn->next->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT (rtx->pattern_range_state != HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(ptn->next->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(rtx->pattern_range_state != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			if (rtx->pattern_range_state[bno] == 0)
 | 
			
		||||
			{
 | 
			
		||||
@ -2146,7 +2146,7 @@ static HAWK_INLINE int run_block0 (hawk_rtx_t* rtx, hawk_nde_blk_t* nde)
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (nde->type == HAWK_NDE_BLK);
 | 
			
		||||
	HAWK_ASSERT(nde->type == HAWK_NDE_BLK);
 | 
			
		||||
	/*saved_stack_top = rtx->stack_top;*/
 | 
			
		||||
 | 
			
		||||
#if defined(DEBUG_RUN)
 | 
			
		||||
@ -2286,7 +2286,7 @@ static int run_statement (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
		case HAWK_NDE_CASE:
 | 
			
		||||
			/* this must never happen - run_swtich must handle this part */
 | 
			
		||||
			HAWK_ASSERT (!"should never happen - HAWK_NDE_CASE must not be fed to run_statement");
 | 
			
		||||
			HAWK_ASSERT(!"should never happen - HAWK_NDE_CASE must not be fed to run_statement");
 | 
			
		||||
			hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
 | 
			
		||||
			xret = -1;
 | 
			
		||||
			break;
 | 
			
		||||
@ -2371,7 +2371,7 @@ static int run_if (hawk_rtx_t* rtx, hawk_nde_if_t* nde)
 | 
			
		||||
	/* the test expression for the if statement cannot have
 | 
			
		||||
	 * chained expressions. this should not be allowed by the
 | 
			
		||||
	 * parser first of all */
 | 
			
		||||
	HAWK_ASSERT (nde->test->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(nde->test->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	test = eval_expression(rtx, nde->test);
 | 
			
		||||
	if (HAWK_UNLIKELY(!test)) return -1;
 | 
			
		||||
@ -2399,19 +2399,21 @@ static int run_switch (hawk_rtx_t* rtx, hawk_nde_switch_t* nde)
 | 
			
		||||
	int eval_true = 0;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
 | 
			
		||||
	/* the test expression for the if statement cannot have
 | 
			
		||||
	/* the expression for the switch statement cannot have
 | 
			
		||||
	 * chained expressions. this should not be allowed by the
 | 
			
		||||
	 * parser first of all */
 | 
			
		||||
	HAWK_ASSERT (nde->test->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(nde->type == HAWK_NDE_SWITCH);
 | 
			
		||||
	HAWK_ASSERT(nde->test->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	test = eval_expression(rtx, nde->test);
 | 
			
		||||
	if (HAWK_UNLIKELY(!test)) return -1;
 | 
			
		||||
 | 
			
		||||
	hawk_rtx_refupval(rtx, test);
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT(nde->type == HAWK_NDE_CASE);
 | 
			
		||||
	case_part = (hawk_nde_case_t*)nde->case_part;
 | 
			
		||||
	default_part = (hawk_nde_case_t*)nde->default_part;
 | 
			
		||||
	HAWK_ASSERT(case_part->type == HAWK_NDE_CASE);
 | 
			
		||||
	HAWK_ASSERT(default_part->type == HAWK_NDE_CASE);
 | 
			
		||||
 | 
			
		||||
	while (case_part)
 | 
			
		||||
	{
 | 
			
		||||
@ -2511,7 +2513,7 @@ static int run_while (hawk_rtx_t* rtx, hawk_nde_while_t* nde)
 | 
			
		||||
	{
 | 
			
		||||
		/* no chained expressions are allowed for the test
 | 
			
		||||
		 * expression of the while statement */
 | 
			
		||||
		HAWK_ASSERT (nde->test->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(nde->test->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		while (1)
 | 
			
		||||
		{
 | 
			
		||||
@ -2554,7 +2556,7 @@ static int run_while (hawk_rtx_t* rtx, hawk_nde_while_t* nde)
 | 
			
		||||
	{
 | 
			
		||||
		/* no chained expressions are allowed for the test
 | 
			
		||||
		 * expression of the while statement */
 | 
			
		||||
		HAWK_ASSERT (nde->test->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(nde->test->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		do
 | 
			
		||||
		{
 | 
			
		||||
@ -2598,7 +2600,7 @@ static int run_for (hawk_rtx_t* rtx, hawk_nde_for_t* nde)
 | 
			
		||||
 | 
			
		||||
	if (nde->init)
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (nde->init->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(nde->init->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		ON_STATEMENT (rtx, nde->init);
 | 
			
		||||
		val = eval_expression(rtx,nde->init);
 | 
			
		||||
@ -2616,7 +2618,7 @@ static int run_for (hawk_rtx_t* rtx, hawk_nde_for_t* nde)
 | 
			
		||||
 | 
			
		||||
			/* no chained expressions for the test expression of
 | 
			
		||||
			 * the for statement are allowed */
 | 
			
		||||
			HAWK_ASSERT (nde->test->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(nde->test->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			ON_STATEMENT (rtx, nde->test);
 | 
			
		||||
			test = eval_expression(rtx, nde->test);
 | 
			
		||||
@ -2657,7 +2659,7 @@ static int run_for (hawk_rtx_t* rtx, hawk_nde_for_t* nde)
 | 
			
		||||
 | 
			
		||||
		if (nde->incr != HAWK_NULL)
 | 
			
		||||
		{
 | 
			
		||||
			HAWK_ASSERT (nde->incr->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(nde->incr->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			ON_STATEMENT (rtx, nde->incr);
 | 
			
		||||
			val = eval_expression(rtx, nde->incr);
 | 
			
		||||
@ -2680,10 +2682,10 @@ static int run_forin (hawk_rtx_t* rtx, hawk_nde_forin_t* nde)
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	test = (hawk_nde_exp_t*)nde->test;
 | 
			
		||||
	HAWK_ASSERT (test->type == HAWK_NDE_EXP_BIN && test->opcode == HAWK_BINOP_IN);
 | 
			
		||||
	HAWK_ASSERT(test->type == HAWK_NDE_EXP_BIN && test->opcode == HAWK_BINOP_IN);
 | 
			
		||||
 | 
			
		||||
	/* chained expressions should not be allowed by the parser first of all */
 | 
			
		||||
	HAWK_ASSERT (test->right->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(test->right->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	rv = eval_expression(rtx, test->right);
 | 
			
		||||
	if (HAWK_UNLIKELY(!rv)) return -1;
 | 
			
		||||
@ -2894,7 +2896,7 @@ static int run_return (hawk_rtx_t* rtx, hawk_nde_return_t* nde)
 | 
			
		||||
 | 
			
		||||
		/* chained expressions should not be allowed
 | 
			
		||||
		 * by the parser first of all */
 | 
			
		||||
		HAWK_ASSERT (nde->val->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(nde->val->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		val = eval_expression(rtx, nde->val);
 | 
			
		||||
		if (HAWK_UNLIKELY(!val)) return -1;
 | 
			
		||||
@ -2932,7 +2934,7 @@ static int run_exit (hawk_rtx_t* rtx, hawk_nde_exit_t* nde)
 | 
			
		||||
 | 
			
		||||
		/* chained expressions should not be allowed
 | 
			
		||||
		 * by the parser first of all */
 | 
			
		||||
		HAWK_ASSERT (nde->val->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(nde->val->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		val = eval_expression(rtx, nde->val);
 | 
			
		||||
		if (HAWK_UNLIKELY(!val)) return -1;
 | 
			
		||||
@ -3058,7 +3060,7 @@ static hawk_val_t* assign_newmapval_in_map (hawk_rtx_t* rtx, hawk_map_t* contain
 | 
			
		||||
		return HAWK_NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (tmp == HAWK_MAP_VPTR(pair));
 | 
			
		||||
	HAWK_ASSERT(tmp == HAWK_MAP_VPTR(pair));
 | 
			
		||||
	return tmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3106,7 +3108,7 @@ static hawk_val_t* fetch_topval_from_var (hawk_rtx_t* rtx, hawk_nde_var_t* var)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			HAWK_ASSERT (var->type == HAWK_NDE_ARG || var->type == HAWK_NDE_ARGIDX);
 | 
			
		||||
			HAWK_ASSERT(var->type == HAWK_NDE_ARG || var->type == HAWK_NDE_ARGIDX);
 | 
			
		||||
			val = HAWK_RTX_STACK_ARG(rtx, var->id.idxa);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
@ -3179,7 +3181,7 @@ static hawk_val_t* assign_newmapval_to_var (hawk_rtx_t* rtx, hawk_nde_var_t* var
 | 
			
		||||
{
 | 
			
		||||
	hawk_val_t* tmp;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (var->type >= HAWK_NDE_NAMED && var->type <= HAWK_NDE_ARGIDX);
 | 
			
		||||
	HAWK_ASSERT(var->type >= HAWK_NDE_NAMED && var->type <= HAWK_NDE_ARGIDX);
 | 
			
		||||
 | 
			
		||||
	tmp = hawk_rtx_makemapval(rtx);
 | 
			
		||||
	if (HAWK_UNLIKELY(!tmp))
 | 
			
		||||
@ -3205,7 +3207,7 @@ static HAWK_INLINE int delete_indexed (hawk_rtx_t* rtx, hawk_val_t* vv, hawk_nde
 | 
			
		||||
	hawk_nde_t* remidx;
 | 
			
		||||
	hawk_val_type_t vtype;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (var->idx != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(var->idx != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	/* delete x["abc"];
 | 
			
		||||
	 * delete x[20,"abc"]; */
 | 
			
		||||
@ -3220,7 +3222,7 @@ static HAWK_INLINE int delete_indexed (hawk_rtx_t* rtx, hawk_val_t* vv, hawk_nde
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (vtype == HAWK_VAL_ARR);
 | 
			
		||||
		HAWK_ASSERT(vtype == HAWK_VAL_ARR);
 | 
			
		||||
		idx = idxnde_to_int(rtx, var->idx, &remidx);
 | 
			
		||||
		if (HAWK_UNLIKELY(idx <= -1)) goto oops;
 | 
			
		||||
		arr = ((hawk_val_arr_t*)vv)->arr;
 | 
			
		||||
@ -3311,7 +3313,7 @@ static int run_delete (hawk_rtx_t* rtx, hawk_nde_delete_t* nde)
 | 
			
		||||
	var = (hawk_nde_var_t*)nde->var;
 | 
			
		||||
 | 
			
		||||
	val = fetch_topval_from_var(rtx, var);
 | 
			
		||||
	HAWK_ASSERT (val != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(val != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	vtype = HAWK_RTX_GETVALTYPE(rtx, val);
 | 
			
		||||
	switch (vtype)
 | 
			
		||||
@ -3373,13 +3375,13 @@ static int run_reset (hawk_rtx_t* rtx, hawk_nde_reset_t* nde)
 | 
			
		||||
 | 
			
		||||
	var = (hawk_nde_var_t*)nde->var;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (var->type >= HAWK_NDE_NAMED && var->type <= HAWK_NDE_ARG);
 | 
			
		||||
	HAWK_ASSERT(var->type >= HAWK_NDE_NAMED && var->type <= HAWK_NDE_ARG);
 | 
			
		||||
 | 
			
		||||
	switch (var->type)
 | 
			
		||||
	{
 | 
			
		||||
		case HAWK_NDE_NAMED:
 | 
			
		||||
			/* if a named variable has an index part, something is definitely wrong */
 | 
			
		||||
			HAWK_ASSERT (var->idx == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(var->idx == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			/* a named variable can be reset if removed from the internal map to manage it */
 | 
			
		||||
			hawk_htb_delete (rtx->named, var->id.name.ptr, var->id.name.len);
 | 
			
		||||
@ -3391,10 +3393,10 @@ static int run_reset (hawk_rtx_t* rtx, hawk_nde_reset_t* nde)
 | 
			
		||||
		{
 | 
			
		||||
			hawk_val_t* val;
 | 
			
		||||
 | 
			
		||||
			HAWK_ASSERT (var->idx == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(var->idx == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			val = fetch_topval_from_var(rtx, var);
 | 
			
		||||
			HAWK_ASSERT (val != HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(val != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			if (HAWK_RTX_GETVALTYPE(rtx, val) != HAWK_VAL_NIL)
 | 
			
		||||
			{
 | 
			
		||||
@ -3405,7 +3407,7 @@ static int run_reset (hawk_rtx_t* rtx, hawk_nde_reset_t* nde)
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			/* the reset statement can only be called with plain variables */
 | 
			
		||||
			HAWK_ASSERT (!"should never happen - wrong target for @reset");
 | 
			
		||||
			HAWK_ASSERT(!"should never happen - wrong target for @reset");
 | 
			
		||||
			hawk_rtx_seterrnum(rtx, &var->loc, HAWK_EBADARG);
 | 
			
		||||
			return -1;
 | 
			
		||||
	}
 | 
			
		||||
@ -3455,7 +3457,7 @@ static int run_print (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
 | 
			
		||||
	hawk_val_t* out_v = HAWK_NULL;
 | 
			
		||||
	int n, xret = 0;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		(nde->out_type == HAWK_OUT_PIPE && nde->out != HAWK_NULL) ||
 | 
			
		||||
		(nde->out_type == HAWK_OUT_RWPIPE && nde->out != HAWK_NULL) ||
 | 
			
		||||
		(nde->out_type == HAWK_OUT_FILE && nde->out != HAWK_NULL) ||
 | 
			
		||||
@ -3501,7 +3503,7 @@ static int run_print (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
 | 
			
		||||
		if (nde->args->type == HAWK_NDE_GRP)
 | 
			
		||||
		{
 | 
			
		||||
			/* parenthesized print */
 | 
			
		||||
			HAWK_ASSERT (nde->args->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(nde->args->next == HAWK_NULL);
 | 
			
		||||
			head = ((hawk_nde_grp_t*)nde->args)->body;
 | 
			
		||||
		}
 | 
			
		||||
		else head = nde->args;
 | 
			
		||||
@ -3591,7 +3593,7 @@ static int run_printf (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
 | 
			
		||||
	hawk_nde_t* head;
 | 
			
		||||
	int n, xret = 0;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		(nde->out_type == HAWK_OUT_PIPE && nde->out != HAWK_NULL) ||
 | 
			
		||||
		(nde->out_type == HAWK_OUT_RWPIPE && nde->out != HAWK_NULL) ||
 | 
			
		||||
		(nde->out_type == HAWK_OUT_FILE && nde->out != HAWK_NULL) ||
 | 
			
		||||
@ -3610,18 +3612,18 @@ static int run_printf (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*( valid printf statement should have at least one argument. the parser must ensure this. */
 | 
			
		||||
	HAWK_ASSERT (nde->args != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(nde->args != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	if (nde->args->type == HAWK_NDE_GRP)
 | 
			
		||||
	{
 | 
			
		||||
		/* parenthesized print */
 | 
			
		||||
		HAWK_ASSERT (nde->args->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(nde->args->next == HAWK_NULL);
 | 
			
		||||
		head = ((hawk_nde_grp_t*)nde->args)->body;
 | 
			
		||||
	}
 | 
			
		||||
	else head = nde->args;
 | 
			
		||||
 | 
			
		||||
	/* valid printf statement should have at least one argument. the parser must ensure this */
 | 
			
		||||
	HAWK_ASSERT (head != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(head != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	v = eval_expression(rtx, head);
 | 
			
		||||
	if (HAWK_UNLIKELY(!v)) goto oops_1;
 | 
			
		||||
@ -3778,7 +3780,7 @@ static hawk_val_t* eval_expression (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
		#if 0
 | 
			
		||||
			/* the internal value representing $0 should always be of the string type
 | 
			
		||||
			 * once it has been set/updated. it is nil initially. */
 | 
			
		||||
			HAWK_ASSERT (HAWK_RTX_GETVALTYPE(rtx, rtx->inrec.d0) == HAWK_VAL_STR);
 | 
			
		||||
			HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, rtx->inrec.d0) == HAWK_VAL_STR);
 | 
			
		||||
			vs.ptr = ((hawk_val_str_t*)rtx->inrec.d0)->val.ptr;
 | 
			
		||||
			vs.len = ((hawk_val_str_t*)rtx->inrec.d0)->val.len;
 | 
			
		||||
		#else
 | 
			
		||||
@ -3804,7 +3806,7 @@ static hawk_val_t* eval_expression (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		v = hawk_rtx_makeintval(rtx, (n != 0));
 | 
			
		||||
		HAWK_ASSERT (v != HAWK_NULL); /* this will never fail as the value is 0 or 1 */
 | 
			
		||||
		HAWK_ASSERT(v != HAWK_NULL); /* this will never fail as the value is 0 or 1 */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return v;
 | 
			
		||||
@ -3854,7 +3856,7 @@ static hawk_val_t* eval_expression0 (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
	hawk_val_t* v;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (nde->type >= HAWK_NDE_GRP && (nde->type - HAWK_NDE_GRP) < HAWK_COUNTOF(__evaluator));
 | 
			
		||||
	HAWK_ASSERT(nde->type >= HAWK_NDE_GRP && (nde->type - HAWK_NDE_GRP) < HAWK_COUNTOF(__evaluator));
 | 
			
		||||
 | 
			
		||||
	v = __evaluator[nde->type - HAWK_NDE_GRP](rtx, nde);
 | 
			
		||||
 | 
			
		||||
@ -3881,7 +3883,7 @@ static hawk_val_t* eval_group (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
#if 0
 | 
			
		||||
	/* eval_binop_in evaluates the HAWK_NDE_GRP specially.
 | 
			
		||||
	 * so this function should never be reached. */
 | 
			
		||||
	HAWK_ASSERT (!"should never happen - NDE_GRP only for in");
 | 
			
		||||
	HAWK_ASSERT(!"should never happen - NDE_GRP only for in");
 | 
			
		||||
	hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
 | 
			
		||||
	return HAWK_NULL;
 | 
			
		||||
#endif
 | 
			
		||||
@ -3901,7 +3903,7 @@ static hawk_val_t* eval_group (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
	np = ((hawk_nde_grp_t*)nde)->body;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (np != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(np != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
loop:
 | 
			
		||||
	val = eval_expression(rtx, np);
 | 
			
		||||
@ -3923,10 +3925,10 @@ static hawk_val_t* eval_assignment (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	hawk_val_t* val, * ret;
 | 
			
		||||
	hawk_nde_ass_t* ass = (hawk_nde_ass_t*)nde;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (ass->left != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT (ass->right != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(ass->left != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(ass->right != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (ass->right->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(ass->right->next == HAWK_NULL);
 | 
			
		||||
	val = eval_expression(rtx, ass->right);
 | 
			
		||||
	if (HAWK_UNLIKELY(!val)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
@ -3954,7 +3956,7 @@ static hawk_val_t* eval_assignment (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
			eval_binop_bor
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		HAWK_ASSERT (ass->left->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(ass->left->next == HAWK_NULL);
 | 
			
		||||
		val2 = eval_expression(rtx, ass->left);
 | 
			
		||||
		if (HAWK_UNLIKELY(!val2))
 | 
			
		||||
		{
 | 
			
		||||
@ -3964,9 +3966,9 @@ static hawk_val_t* eval_assignment (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
		hawk_rtx_refupval(rtx, val2);
 | 
			
		||||
 | 
			
		||||
		HAWK_ASSERT (ass->opcode >= 0);
 | 
			
		||||
		HAWK_ASSERT (ass->opcode < HAWK_COUNTOF(binop_func));
 | 
			
		||||
		HAWK_ASSERT (binop_func[ass->opcode] != HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(ass->opcode >= 0);
 | 
			
		||||
		HAWK_ASSERT(ass->opcode < HAWK_COUNTOF(binop_func));
 | 
			
		||||
		HAWK_ASSERT(binop_func[ass->opcode] != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		tmp = binop_func[ass->opcode](rtx, val2, val);
 | 
			
		||||
		if (HAWK_UNLIKELY(!tmp))
 | 
			
		||||
@ -4037,7 +4039,7 @@ static hawk_val_t* do_assignment (hawk_rtx_t* rtx, hawk_nde_t* var, hawk_val_t*
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			HAWK_ASSERT (!"should never happen - invalid variable type");
 | 
			
		||||
			HAWK_ASSERT(!"should never happen - invalid variable type");
 | 
			
		||||
			errnum = HAWK_EINTERN;
 | 
			
		||||
			goto exit_on_error;
 | 
			
		||||
	}
 | 
			
		||||
@ -4053,14 +4055,14 @@ static hawk_val_t* do_assignment_nonindexed (hawk_rtx_t* rtx, hawk_nde_var_t* va
 | 
			
		||||
{
 | 
			
		||||
	hawk_val_type_t vtype;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		var->type == HAWK_NDE_NAMED ||
 | 
			
		||||
		var->type == HAWK_NDE_GBL ||
 | 
			
		||||
		var->type == HAWK_NDE_LCL ||
 | 
			
		||||
		var->type == HAWK_NDE_ARG
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (var->idx == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(var->idx == HAWK_NULL);
 | 
			
		||||
	vtype = HAWK_RTX_GETVALTYPE (rtx, val);
 | 
			
		||||
 | 
			
		||||
	switch (var->type)
 | 
			
		||||
@ -4198,13 +4200,13 @@ static hawk_val_t* do_assignment_indexed (hawk_rtx_t* rtx, hawk_nde_var_t* var,
 | 
			
		||||
	hawk_val_t* vv; /* existing value pointed to by var */
 | 
			
		||||
	hawk_val_type_t vtype;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		(var->type == HAWK_NDE_NAMEDIDX ||
 | 
			
		||||
		 var->type == HAWK_NDE_GBLIDX ||
 | 
			
		||||
		 var->type == HAWK_NDE_LCLIDX ||
 | 
			
		||||
		 var->type == HAWK_NDE_ARGIDX) && var->idx != HAWK_NULL);
 | 
			
		||||
#if !defined(HAWK_ENABLE_GC)
 | 
			
		||||
	HAWK_ASSERT (HAWK_RTX_GETVALTYPE(rtx, val) != HAWK_VAL_MAP &&
 | 
			
		||||
	HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, val) != HAWK_VAL_MAP &&
 | 
			
		||||
	             HAWK_RTX_GETVALTYPE(rtx, val) != HAWK_VAL_ARR);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -4455,7 +4457,7 @@ static hawk_val_t* eval_binary (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
 | 
			
		||||
	hawk_val_t* left, * right, * res;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (exp->type == HAWK_NDE_EXP_BIN);
 | 
			
		||||
	HAWK_ASSERT(exp->type == HAWK_NDE_EXP_BIN);
 | 
			
		||||
 | 
			
		||||
	switch (exp->opcode)
 | 
			
		||||
	{
 | 
			
		||||
@ -4481,13 +4483,13 @@ static hawk_val_t* eval_binary (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			HAWK_ASSERT (exp->left->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(exp->left->next == HAWK_NULL);
 | 
			
		||||
			left = eval_expression(rtx, exp->left);
 | 
			
		||||
			if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
			hawk_rtx_refupval(rtx, left);
 | 
			
		||||
 | 
			
		||||
			HAWK_ASSERT (exp->right->next == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(exp->right->next == HAWK_NULL);
 | 
			
		||||
			right = eval_expression(rtx, exp->right);
 | 
			
		||||
			if (HAWK_UNLIKELY(!right))
 | 
			
		||||
			{
 | 
			
		||||
@ -4497,8 +4499,8 @@ static hawk_val_t* eval_binary (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
			hawk_rtx_refupval(rtx, right);
 | 
			
		||||
 | 
			
		||||
			HAWK_ASSERT (exp->opcode >= 0 && exp->opcode < HAWK_COUNTOF(binop_func));
 | 
			
		||||
			HAWK_ASSERT (binop_func[exp->opcode] != HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(exp->opcode >= 0 && exp->opcode < HAWK_COUNTOF(binop_func));
 | 
			
		||||
			HAWK_ASSERT(binop_func[exp->opcode] != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
			res = binop_func[exp->opcode](rtx, left, right);
 | 
			
		||||
			if (HAWK_UNLIKELY(!res)) ADJERR_LOC(rtx, &nde->loc);
 | 
			
		||||
@ -4532,7 +4534,7 @@ static hawk_val_t* eval_binop_lor (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_t
 | 
			
		||||
	/* short-circuit evaluation required special treatment */
 | 
			
		||||
	hawk_val_t* lv, * rv, * res;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(left->next == HAWK_NULL);
 | 
			
		||||
	lv = eval_expression(rtx, left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
@ -4543,7 +4545,7 @@ static hawk_val_t* eval_binop_lor (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_t
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (right->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(right->next == HAWK_NULL);
 | 
			
		||||
		rv = eval_expression(rtx, right);
 | 
			
		||||
		if (HAWK_UNLIKELY(!rv))
 | 
			
		||||
		{
 | 
			
		||||
@ -4584,7 +4586,7 @@ static hawk_val_t* eval_binop_land (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_
 | 
			
		||||
	/* short-circuit evaluation required special treatment */
 | 
			
		||||
	hawk_val_t* lv, * rv, * res;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(left->next == HAWK_NULL);
 | 
			
		||||
	lv = eval_expression(rtx, left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
@ -4595,7 +4597,7 @@ static hawk_val_t* eval_binop_land (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (right->next == HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(right->next == HAWK_NULL);
 | 
			
		||||
		rv = eval_expression(rtx, right);
 | 
			
		||||
		if (HAWK_UNLIKELY(!rv))
 | 
			
		||||
		{
 | 
			
		||||
@ -4633,7 +4635,7 @@ static hawk_val_t* eval_binop_in (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_t*
 | 
			
		||||
#endif
 | 
			
		||||
	{
 | 
			
		||||
		/* the compiler should have handled this case */
 | 
			
		||||
		HAWK_ASSERT (!"should never happen - it needs a plain variable");
 | 
			
		||||
		HAWK_ASSERT(!"should never happen - it needs a plain variable");
 | 
			
		||||
		hawk_rtx_seterrnum(rtx, &right->loc, HAWK_EINTERN);
 | 
			
		||||
		return HAWK_NULL;
 | 
			
		||||
	}
 | 
			
		||||
@ -4654,10 +4656,10 @@ rvalue_ok:
 | 
			
		||||
	 *
 | 
			
		||||
	 *  '(10, 20) in a' is to test for a[10,20] if 'a' is a map.
 | 
			
		||||
	 */
 | 
			
		||||
	HAWK_ASSERT (remidx == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(remidx == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	/* evaluate the right-hand side of the operator */
 | 
			
		||||
	HAWK_ASSERT (right->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(right->next == HAWK_NULL);
 | 
			
		||||
	ropv = eval_expression(rtx, right);
 | 
			
		||||
	if (HAWK_UNLIKELY(!ropv))
 | 
			
		||||
	{
 | 
			
		||||
@ -5362,7 +5364,7 @@ static HAWK_INLINE int __cmp_str_str (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
 | 
			
		||||
		{
 | 
			
		||||
			hawk_flt_t rr;
 | 
			
		||||
 | 
			
		||||
			HAWK_ASSERT (rs->v_nstr == 2);
 | 
			
		||||
			HAWK_ASSERT(rs->v_nstr == 2);
 | 
			
		||||
 | 
			
		||||
			rr = hawk_oochars_to_flt(rs->val.ptr, rs->val.len, HAWK_NULL, stripspc);
 | 
			
		||||
 | 
			
		||||
@ -5374,7 +5376,7 @@ static HAWK_INLINE int __cmp_str_str (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
 | 
			
		||||
	{
 | 
			
		||||
		hawk_flt_t ll;
 | 
			
		||||
 | 
			
		||||
		HAWK_ASSERT (ls->v_nstr == 2);
 | 
			
		||||
		HAWK_ASSERT(ls->v_nstr == 2);
 | 
			
		||||
 | 
			
		||||
		ll = hawk_oochars_to_flt(ls->val.ptr, ls->val.len, HAWK_NULL, stripspc);
 | 
			
		||||
 | 
			
		||||
@ -5391,7 +5393,7 @@ static HAWK_INLINE int __cmp_str_str (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
 | 
			
		||||
		{
 | 
			
		||||
			hawk_flt_t rr;
 | 
			
		||||
 | 
			
		||||
			HAWK_ASSERT (rs->v_nstr == 2);
 | 
			
		||||
			HAWK_ASSERT(rs->v_nstr == 2);
 | 
			
		||||
 | 
			
		||||
			rr = hawk_oochars_to_flt(rs->val.ptr, rs->val.len, HAWK_NULL, stripspc);
 | 
			
		||||
 | 
			
		||||
@ -5743,8 +5745,8 @@ static HAWK_INLINE int __cmp_val (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t*
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (lvtype >= HAWK_VAL_NIL && lvtype <= HAWK_VAL_ARR);
 | 
			
		||||
	HAWK_ASSERT (rvtype >= HAWK_VAL_NIL && rvtype <= HAWK_VAL_ARR);
 | 
			
		||||
	HAWK_ASSERT(lvtype >= HAWK_VAL_NIL && lvtype <= HAWK_VAL_ARR);
 | 
			
		||||
	HAWK_ASSERT(rvtype >= HAWK_VAL_NIL && rvtype <= HAWK_VAL_ARR);
 | 
			
		||||
 | 
			
		||||
	/* mapping fomula and table layout assume:
 | 
			
		||||
	 *  HAWK_VAL_NIL  = 0
 | 
			
		||||
@ -5953,7 +5955,7 @@ static hawk_val_t* eval_binop_plus (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_
 | 
			
		||||
	1   1   = 3
 | 
			
		||||
	*/
 | 
			
		||||
	n3 = n1 + (n2 << 1);
 | 
			
		||||
	HAWK_ASSERT (n3 >= 0 && n3 <= 3);
 | 
			
		||||
	HAWK_ASSERT(n3 >= 0 && n3 <= 3);
 | 
			
		||||
 | 
			
		||||
	return (n3 == 0)? hawk_rtx_makeintval(rtx,(hawk_int_t)l1+(hawk_int_t)l2):
 | 
			
		||||
	       (n3 == 1)? hawk_rtx_makefltval(rtx,(hawk_flt_t)r1+(hawk_flt_t)l2):
 | 
			
		||||
@ -5977,7 +5979,7 @@ static hawk_val_t* eval_binop_minus (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n3 = n1 + (n2 << 1);
 | 
			
		||||
	HAWK_ASSERT (n3 >= 0 && n3 <= 3);
 | 
			
		||||
	HAWK_ASSERT(n3 >= 0 && n3 <= 3);
 | 
			
		||||
	return (n3 == 0)? hawk_rtx_makeintval(rtx,(hawk_int_t)l1-(hawk_int_t)l2):
 | 
			
		||||
	       (n3 == 1)? hawk_rtx_makefltval(rtx,(hawk_flt_t)r1-(hawk_flt_t)l2):
 | 
			
		||||
	       (n3 == 2)? hawk_rtx_makefltval(rtx,(hawk_flt_t)l1-(hawk_flt_t)r2):
 | 
			
		||||
@ -6000,7 +6002,7 @@ static hawk_val_t* eval_binop_mul (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n3 = n1 + (n2 << 1);
 | 
			
		||||
	HAWK_ASSERT (n3 >= 0 && n3 <= 3);
 | 
			
		||||
	HAWK_ASSERT(n3 >= 0 && n3 <= 3);
 | 
			
		||||
	return (n3 == 0)? hawk_rtx_makeintval(rtx,(hawk_int_t)l1*(hawk_int_t)l2):
 | 
			
		||||
	       (n3 == 1)? hawk_rtx_makefltval(rtx,(hawk_flt_t)r1*(hawk_flt_t)l2):
 | 
			
		||||
	       (n3 == 2)? hawk_rtx_makefltval(rtx,(hawk_flt_t)l1*(hawk_flt_t)r2):
 | 
			
		||||
@ -6120,7 +6122,7 @@ static hawk_val_t* eval_binop_mod (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
 | 
			
		||||
	hawk_val_t* res;
 | 
			
		||||
 | 
			
		||||
	/* the mod function must be provided when the hawk object is created to be able to calculate floating-pointer remainder */
 | 
			
		||||
	HAWK_ASSERT (rtx->hawk->prm.math.mod != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(rtx->hawk->prm.math.mod != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	n1 = hawk_rtx_valtonum(rtx, left, &l1, &r1);
 | 
			
		||||
	n2 = hawk_rtx_valtonum(rtx, right, &l2, &r2);
 | 
			
		||||
@ -6329,8 +6331,8 @@ static hawk_val_t* eval_binop_ma (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_t*
 | 
			
		||||
{
 | 
			
		||||
	hawk_val_t* lv, * rv, * res;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT (right->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(right->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	lv = eval_expression(rtx, left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
 | 
			
		||||
@ -6358,8 +6360,8 @@ static hawk_val_t* eval_binop_nm (hawk_rtx_t* rtx, hawk_nde_t* left, hawk_nde_t*
 | 
			
		||||
{
 | 
			
		||||
	hawk_val_t* lv, * rv, * res;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT (right->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(right->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	lv = eval_expression(rtx, left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
 | 
			
		||||
@ -6391,17 +6393,17 @@ static hawk_val_t* eval_unary (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	hawk_int_t l;
 | 
			
		||||
	hawk_flt_t r;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		exp->type == HAWK_NDE_EXP_UNR);
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		exp->left != HAWK_NULL && exp->right == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		exp->opcode == HAWK_UNROP_PLUS ||
 | 
			
		||||
		exp->opcode == HAWK_UNROP_MINUS ||
 | 
			
		||||
		exp->opcode == HAWK_UNROP_LNOT ||
 | 
			
		||||
		exp->opcode == HAWK_UNROP_BNOT);
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (exp->left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(exp->left->next == HAWK_NULL);
 | 
			
		||||
	left = eval_expression(rtx, exp->left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
@ -6464,8 +6466,8 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	hawk_flt_t inc_val_flt;
 | 
			
		||||
	hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (exp->type == HAWK_NDE_EXP_INCPRE);
 | 
			
		||||
	HAWK_ASSERT (exp->left != HAWK_NULL && exp->right == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(exp->type == HAWK_NDE_EXP_INCPRE);
 | 
			
		||||
	HAWK_ASSERT(exp->left != HAWK_NULL && exp->right == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	/* this way of checking if the l-value is assignable is
 | 
			
		||||
	 * ugly as it is dependent on the node types defined in hawk.h
 | 
			
		||||
@ -6490,12 +6492,12 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (!"should never happen - invalid opcode");
 | 
			
		||||
		HAWK_ASSERT(!"should never happen - invalid opcode");
 | 
			
		||||
		hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
 | 
			
		||||
		return HAWK_NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (exp->left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(exp->left->next == HAWK_NULL);
 | 
			
		||||
	left = eval_expression(rtx, exp->left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
@ -6550,7 +6552,7 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
			}
 | 
			
		||||
			else /* if (n == 1) */
 | 
			
		||||
			{
 | 
			
		||||
				HAWK_ASSERT (n == 1);
 | 
			
		||||
				HAWK_ASSERT(n == 1);
 | 
			
		||||
				res = hawk_rtx_makefltval (rtx, v2 + inc_val_flt);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@ -6583,8 +6585,8 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	hawk_flt_t inc_val_flt;
 | 
			
		||||
	hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (exp->type == HAWK_NDE_EXP_INCPST);
 | 
			
		||||
	HAWK_ASSERT (exp->left != HAWK_NULL && exp->right == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(exp->type == HAWK_NDE_EXP_INCPST);
 | 
			
		||||
	HAWK_ASSERT(exp->left != HAWK_NULL && exp->right == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	/* this way of checking if the l-value is assignable is
 | 
			
		||||
	 * ugly as it is dependent on the node types defined in hawk.h.
 | 
			
		||||
@ -6609,12 +6611,12 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (!"should never happen - invalid opcode");
 | 
			
		||||
		HAWK_ASSERT(!"should never happen - invalid opcode");
 | 
			
		||||
		hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
 | 
			
		||||
		return HAWK_NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (exp->left->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(exp->left->next == HAWK_NULL);
 | 
			
		||||
	left = eval_expression(rtx, exp->left);
 | 
			
		||||
	if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
@ -6705,7 +6707,7 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
			}
 | 
			
		||||
			else /* if (n == 1) */
 | 
			
		||||
			{
 | 
			
		||||
				HAWK_ASSERT (n == 1);
 | 
			
		||||
				HAWK_ASSERT(n == 1);
 | 
			
		||||
				res = hawk_rtx_makefltval(rtx, v2);
 | 
			
		||||
				if (HAWK_UNLIKELY(!res))
 | 
			
		||||
				{
 | 
			
		||||
@ -6743,14 +6745,14 @@ static hawk_val_t* eval_cnd (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	hawk_val_t* tv, * v;
 | 
			
		||||
	hawk_nde_cnd_t* cnd = (hawk_nde_cnd_t*)nde;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (cnd->test->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(cnd->test->next == HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	tv = eval_expression(rtx, cnd->test);
 | 
			
		||||
	if (HAWK_UNLIKELY(!tv)) return HAWK_NULL;
 | 
			
		||||
 | 
			
		||||
	hawk_rtx_refupval(rtx, tv);
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (cnd->left->next == HAWK_NULL && cnd->right->next == HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(cnd->left->next == HAWK_NULL && cnd->right->next == HAWK_NULL);
 | 
			
		||||
	v = (hawk_rtx_valtobool(rtx, tv))? eval_expression(rtx, cnd->left): eval_expression(rtx, cnd->right);
 | 
			
		||||
 | 
			
		||||
	hawk_rtx_refdownval(rtx, tv);
 | 
			
		||||
@ -6762,7 +6764,7 @@ static hawk_val_t* eval_fncall_fnc (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
	/* intrinsic function */
 | 
			
		||||
	hawk_nde_fncall_t* call = (hawk_nde_fncall_t*)nde;
 | 
			
		||||
	/* the parser must make sure that the number of arguments is proper */
 | 
			
		||||
	HAWK_ASSERT (call->nargs >= call->u.fnc.spec.arg.min && call->nargs <= call->u.fnc.spec.arg.max);
 | 
			
		||||
	HAWK_ASSERT(call->nargs >= call->u.fnc.spec.arg.min && call->nargs <= call->u.fnc.spec.arg.max);
 | 
			
		||||
	return hawk_rtx_evalcall(rtx, call, HAWK_NULL, push_arg_from_nde, (void*)call->u.fnc.spec.arg.spec, HAWK_NULL, HAWK_NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -6789,7 +6791,7 @@ static HAWK_INLINE hawk_val_t* eval_fncall_fun (hawk_rtx_t* rtx, hawk_nde_t* nde
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fun = (hawk_fun_t*)HAWK_HTB_VPTR(pair);
 | 
			
		||||
		HAWK_ASSERT (fun != HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(fun != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
		/* cache the search result */
 | 
			
		||||
		call->u.fun.fun = fun;
 | 
			
		||||
@ -6906,8 +6908,8 @@ hawk_val_t* hawk_rtx_evalcall (
 | 
			
		||||
	 * ---------------------
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (HAWK_SIZEOF(void*) >= HAWK_SIZEOF(rtx->stack_top));
 | 
			
		||||
	HAWK_ASSERT (HAWK_SIZEOF(void*) >= HAWK_SIZEOF(rtx->stack_base));
 | 
			
		||||
	HAWK_ASSERT(HAWK_SIZEOF(void*) >= HAWK_SIZEOF(rtx->stack_top));
 | 
			
		||||
	HAWK_ASSERT(HAWK_SIZEOF(void*) >= HAWK_SIZEOF(rtx->stack_base));
 | 
			
		||||
 | 
			
		||||
	saved_stack_top = rtx->stack_top;
 | 
			
		||||
 | 
			
		||||
@ -6944,7 +6946,7 @@ hawk_val_t* hawk_rtx_evalcall (
 | 
			
		||||
	nargs = argpusher(rtx, call, apdata);
 | 
			
		||||
	if (nargs == (hawk_oow_t)-1) goto oops_making_stack_frame;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (nargs == call->nargs);
 | 
			
		||||
	HAWK_ASSERT(nargs == call->nargs);
 | 
			
		||||
 | 
			
		||||
	if (fun)
 | 
			
		||||
	{
 | 
			
		||||
@ -6968,7 +6970,7 @@ hawk_val_t* hawk_rtx_evalcall (
 | 
			
		||||
	if (fun)
 | 
			
		||||
	{
 | 
			
		||||
		/* normal hawk function */
 | 
			
		||||
		HAWK_ASSERT (fun->body->type == HAWK_NDE_BLK);
 | 
			
		||||
		HAWK_ASSERT(fun->body->type == HAWK_NDE_BLK);
 | 
			
		||||
		n = run_block(rtx, (hawk_nde_blk_t*)fun->body);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
@ -6976,7 +6978,7 @@ hawk_val_t* hawk_rtx_evalcall (
 | 
			
		||||
		n = 0;
 | 
			
		||||
 | 
			
		||||
		/* intrinsic function */
 | 
			
		||||
		HAWK_ASSERT (call->nargs >= call->u.fnc.spec.arg.min && call->nargs <= call->u.fnc.spec.arg.max);
 | 
			
		||||
		HAWK_ASSERT(call->nargs >= call->u.fnc.spec.arg.min && call->nargs <= call->u.fnc.spec.arg.max);
 | 
			
		||||
 | 
			
		||||
		if (call->u.fnc.spec.impl)
 | 
			
		||||
		{
 | 
			
		||||
@ -7182,7 +7184,7 @@ oops_making_stack_frame:
 | 
			
		||||
		hawk_rtx_refdownval(rtx, rtx->stack[rtx->stack_top - 1]);
 | 
			
		||||
		HAWK_RTX_STACK_POP (rtx);
 | 
			
		||||
	}
 | 
			
		||||
	HAWK_ASSERT (rtx->stack_top - saved_stack_top == 4);
 | 
			
		||||
	HAWK_ASSERT(rtx->stack_top - saved_stack_top == 4);
 | 
			
		||||
	while (rtx->stack_top > saved_stack_top)
 | 
			
		||||
	{
 | 
			
		||||
		/* the stack frame prologue does not have a reference-counted value
 | 
			
		||||
@ -7296,7 +7298,7 @@ static hawk_oow_t push_arg_from_nde (hawk_rtx_t* rtx, hawk_nde_fncall_t* call, v
 | 
			
		||||
		hawk_rtx_refupval(rtx, v);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (call->nargs == nargs);
 | 
			
		||||
	HAWK_ASSERT(call->nargs == nargs);
 | 
			
		||||
	return nargs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -7403,7 +7405,7 @@ static hawk_val_t** get_reference_indexed (hawk_rtx_t* rtx, hawk_nde_var_t* var)
 | 
			
		||||
	hawk_val_type_t vtype;
 | 
			
		||||
	hawk_nde_t* remidx;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (var->idx != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(var->idx != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	v = fetch_topval_from_var(rtx, var);
 | 
			
		||||
	vtype = HAWK_RTX_GETVALTYPE(rtx, v);
 | 
			
		||||
@ -7505,7 +7507,7 @@ static hawk_val_t** get_reference_indexed (hawk_rtx_t* rtx, hawk_nde_var_t* var)
 | 
			
		||||
			/* if the value doesn't exist for the given key, insert a nil for it to create a placeholder for the reference */
 | 
			
		||||
			pair = hawk_map_upsert(map, str, len, hawk_val_nil, 0);
 | 
			
		||||
			if (HAWK_UNLIKELY(!pair)) { ADJERR_LOC(rtx, &var->loc); goto oops; }
 | 
			
		||||
			HAWK_ASSERT (HAWK_MAP_VPTR(pair) == hawk_val_nil);
 | 
			
		||||
			HAWK_ASSERT(HAWK_MAP_VPTR(pair) == hawk_val_nil);
 | 
			
		||||
			/* no reference count increment as hawk_val_nil is upserted
 | 
			
		||||
			hawk_rtx_refupval(rtx, HAWK_MAP_VPTR(pair)); */
 | 
			
		||||
		}
 | 
			
		||||
@ -7671,7 +7673,7 @@ static hawk_val_t* eval_fun (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fun = (hawk_fun_t*)HAWK_HTB_VPTR(pair);
 | 
			
		||||
		HAWK_ASSERT (fun != HAWK_NULL);
 | 
			
		||||
		HAWK_ASSERT(fun != HAWK_NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	val = hawk_rtx_makefunval(rtx, fun);
 | 
			
		||||
@ -7719,7 +7721,7 @@ static hawk_val_t* eval_indexed (hawk_rtx_t* rtx, hawk_nde_var_t* var)
 | 
			
		||||
	v = fetch_topval_from_var(rtx, var);
 | 
			
		||||
	vtype = HAWK_RTX_GETVALTYPE(rtx, v);
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (var->idx != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(var->idx != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	switch (vtype)
 | 
			
		||||
	{
 | 
			
		||||
@ -7897,7 +7899,7 @@ static hawk_val_t* __eval_getline (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
	p = (hawk_nde_getline_t*)nde;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		(p->in_type == HAWK_IN_PIPE && p->in != HAWK_NULL) ||
 | 
			
		||||
		(p->in_type == HAWK_IN_RWPIPE && p->in != HAWK_NULL) ||
 | 
			
		||||
		(p->in_type == HAWK_IN_FILE && p->in != HAWK_NULL) ||
 | 
			
		||||
@ -7941,7 +7943,7 @@ read_console_again:
 | 
			
		||||
	{
 | 
			
		||||
		if (p->in_type == HAWK_IN_CONSOLE)
 | 
			
		||||
		{
 | 
			
		||||
			HAWK_ASSERT (p->in == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(p->in == HAWK_NULL);
 | 
			
		||||
			if (rtx->nrflt.limit > 0)
 | 
			
		||||
			{
 | 
			
		||||
				/* record filter based on record number(NR) */
 | 
			
		||||
@ -8004,7 +8006,7 @@ static hawk_val_t* __eval_getbline (hawk_rtx_t* rtx, hawk_nde_t* nde)
 | 
			
		||||
 | 
			
		||||
	p = (hawk_nde_getline_t*)nde;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (
 | 
			
		||||
	HAWK_ASSERT(
 | 
			
		||||
		(p->in_type == HAWK_IN_PIPE && p->in != HAWK_NULL) ||
 | 
			
		||||
		(p->in_type == HAWK_IN_RWPIPE && p->in != HAWK_NULL) ||
 | 
			
		||||
		(p->in_type == HAWK_IN_FILE && p->in != HAWK_NULL) ||
 | 
			
		||||
@ -8048,7 +8050,7 @@ read_console_again:
 | 
			
		||||
	{
 | 
			
		||||
		if (p->in_type == HAWK_IN_CONSOLE)
 | 
			
		||||
		{
 | 
			
		||||
			HAWK_ASSERT (p->in == HAWK_NULL);
 | 
			
		||||
			HAWK_ASSERT(p->in == HAWK_NULL);
 | 
			
		||||
			if (rtx->nrflt.limit > 0)
 | 
			
		||||
			{
 | 
			
		||||
				/* record filter based on record number(NR) */
 | 
			
		||||
@ -8146,7 +8148,7 @@ read_again:
 | 
			
		||||
#endif
 | 
			
		||||
	if (n == 0)
 | 
			
		||||
	{
 | 
			
		||||
		HAWK_ASSERT (HAWK_OOECS_LEN(buf) == 0);
 | 
			
		||||
		HAWK_ASSERT(HAWK_OOECS_LEN(buf) == 0);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -8171,7 +8173,7 @@ static hawk_ooch_t* idxnde_to_str (hawk_rtx_t* rtx, hawk_nde_t* nde, hawk_ooch_t
 | 
			
		||||
	hawk_val_t* idx;
 | 
			
		||||
	hawk_int_t idxint;
 | 
			
		||||
 | 
			
		||||
	HAWK_ASSERT (nde != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(nde != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	if (!nde->next)
 | 
			
		||||
	{
 | 
			
		||||
@ -8206,7 +8208,7 @@ static hawk_ooch_t* idxnde_to_str (hawk_rtx_t* rtx, hawk_nde_t* nde, hawk_ooch_t
 | 
			
		||||
			{
 | 
			
		||||
				str = out.u.cplcpy.ptr;
 | 
			
		||||
				*len = out.u.cplcpy.len;
 | 
			
		||||
				HAWK_ASSERT (str == buf);
 | 
			
		||||
				HAWK_ASSERT(str == buf);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -8396,7 +8398,7 @@ hawk_ooch_t* hawk_rtx_format (
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
	/* run->format.tmp.ptr should have been assigned a pointer to a block of memory before this function has been called */
 | 
			
		||||
	HAWK_ASSERT (rtx->format.tmp.ptr != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(rtx->format.tmp.ptr != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	if (nargs_on_stack == (hawk_oow_t)-1)
 | 
			
		||||
	{
 | 
			
		||||
@ -9019,7 +9021,7 @@ wp_mod_main:
 | 
			
		||||
				hawk_flt_t r;
 | 
			
		||||
				int n;
 | 
			
		||||
 | 
			
		||||
				HAWK_ASSERT (HAWK_RTX_GETVALTYPE(rtx, val) == HAWK_VAL_FLT);
 | 
			
		||||
				HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, val) == HAWK_VAL_FLT);
 | 
			
		||||
 | 
			
		||||
				hawk_rtx_refupval(rtx, v);
 | 
			
		||||
				n = hawk_rtx_valtoflt(rtx, v, &r);
 | 
			
		||||
@ -9272,7 +9274,7 @@ hawk_bch_t* hawk_rtx_formatmbs (
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
	/* run->format.tmp.ptr should have been assigned a pointer to a block of memory before this function has been called */
 | 
			
		||||
	HAWK_ASSERT (rtx->formatmbs.tmp.ptr != HAWK_NULL);
 | 
			
		||||
	HAWK_ASSERT(rtx->formatmbs.tmp.ptr != HAWK_NULL);
 | 
			
		||||
 | 
			
		||||
	if (nargs_on_stack == (hawk_oow_t)-1)
 | 
			
		||||
	{
 | 
			
		||||
@ -9903,7 +9905,7 @@ wp_mod_main:
 | 
			
		||||
				hawk_flt_t r;
 | 
			
		||||
				int n;
 | 
			
		||||
 | 
			
		||||
				HAWK_ASSERT (HAWK_RTX_GETVALTYPE(rtx, val) == HAWK_VAL_FLT);
 | 
			
		||||
				HAWK_ASSERT(HAWK_RTX_GETVALTYPE(rtx, val) == HAWK_VAL_FLT);
 | 
			
		||||
 | 
			
		||||
				hawk_rtx_refupval(rtx, v);
 | 
			
		||||
				n = hawk_rtx_valtoflt(rtx, v, &r);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user