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_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);
|
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
|
/* due to the expression evaluation rule, the
|
||||||
* regular expression can not be an assigned value */
|
* 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);
|
fs_ptr = hawk_rtx_getvaloocstr(rtx, val, &fs_len);
|
||||||
if (HAWK_UNLIKELY(!fs_ptr)) return -1;
|
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
|
/* due to the expression evaluation rule, the
|
||||||
* regular expression can not be an assigned
|
* regular expression can not be an assigned
|
||||||
* value */
|
* value */
|
||||||
HAWK_ASSERT (vtype != HAWK_VAL_REX);
|
HAWK_ASSERT(vtype != HAWK_VAL_REX);
|
||||||
|
|
||||||
rss.ptr = hawk_rtx_getvaloocstr(rtx, val, &rss.len);
|
rss.ptr = hawk_rtx_getvaloocstr(rtx, val, &rss.len);
|
||||||
if (!rss.ptr) return -1;
|
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_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);
|
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;
|
int id, n;
|
||||||
hawk_val_t* v;
|
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);
|
id = hawk_findgblwithoocstr(hawk_rtx_gethawk(rtx), name, 1);
|
||||||
v = hawk_rtx_makestrvalwithoocstr(rtx, val);
|
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);
|
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:
|
/* NOTE:
|
||||||
* the close callbacks are called before data in rtx
|
* 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 */
|
/* close all pending io's */
|
||||||
/* TODO: what if this operation fails? */
|
/* TODO: what if this operation fails? */
|
||||||
hawk_rtx_clearallios (rtx);
|
hawk_rtx_clearallios (rtx);
|
||||||
HAWK_ASSERT (rtx->rio.chain == HAWK_NULL);
|
HAWK_ASSERT(rtx->rio.chain == HAWK_NULL);
|
||||||
|
|
||||||
if (rtx->gbl.rs[0])
|
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 */
|
/* destroy the stack if necessary */
|
||||||
if (rtx->stack)
|
if (rtx->stack)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (rtx->stack_top == 0);
|
HAWK_ASSERT(rtx->stack_top == 0);
|
||||||
|
|
||||||
hawk_rtx_freemem(rtx, rtx->stack);
|
hawk_rtx_freemem(rtx, rtx->stack);
|
||||||
rtx->stack = HAWK_NULL;
|
rtx->stack = HAWK_NULL;
|
||||||
@ -1455,7 +1455,7 @@ static int defaultify_globals (hawk_rtx_t* rtx)
|
|||||||
|
|
||||||
hawk_rtx_refupval(rtx, tmp);
|
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)
|
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)
|
static int init_globals (hawk_rtx_t* rtx)
|
||||||
{
|
{
|
||||||
/* the stack must be clean when this function is invoked */
|
/* the stack must be clean when this function is invoked */
|
||||||
HAWK_ASSERT (rtx->stack_base == 0);
|
HAWK_ASSERT(rtx->stack_base == 0);
|
||||||
HAWK_ASSERT (rtx->stack_top == 0);
|
HAWK_ASSERT(rtx->stack_top == 0);
|
||||||
|
|
||||||
if (prepare_globals(rtx) <= -1) return -1;
|
if (prepare_globals(rtx) <= -1) return -1;
|
||||||
if (update_fnr(rtx, 0, 0) <= -1 || defaultify_globals(rtx) <= -1) goto oops;
|
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;
|
hawk_nde_blk_t* blk;
|
||||||
|
|
||||||
blk = (hawk_nde_blk_t*)nde;
|
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->active_block = blk;
|
||||||
rtx->exit_level = EXIT_NONE;
|
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;
|
hawk_nde_blk_t* blk;
|
||||||
|
|
||||||
blk = (hawk_nde_blk_t*)nde;
|
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->active_block = blk;
|
||||||
rtx->exit_level = EXIT_NONE;
|
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
|
* pushed to the stack as asserted below. we didn't push any arguments
|
||||||
* for BEGIN/pattern action/END block execution.*/
|
* for BEGIN/pattern action/END block execution.*/
|
||||||
nargs = (hawk_oow_t)HAWK_RTX_STACK_NARGS(rtx);
|
nargs = (hawk_oow_t)HAWK_RTX_STACK_NARGS(rtx);
|
||||||
HAWK_ASSERT (nargs == 0);
|
HAWK_ASSERT(nargs == 0);
|
||||||
for (i = 0; i < nargs; i++)
|
for (i = 0; i < nargs; i++)
|
||||||
hawk_rtx_refdownval(rtx, HAWK_RTX_STACK_ARG(rtx,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);
|
retv = run_bpae_loop(rtx);
|
||||||
|
|
||||||
/* exit the stack frame */
|
/* 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_top = (hawk_oow_t)rtx->stack[rtx->stack_base + 1];
|
||||||
rtx->stack_base = (hawk_oow_t)rtx->stack[rtx->stack_base + 0];
|
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 }*/;
|
struct pafv_t pafv/*= { args, nargs }*/;
|
||||||
hawk_nde_fncall_t call;
|
hawk_nde_fncall_t call;
|
||||||
|
|
||||||
HAWK_ASSERT (fun != HAWK_NULL);
|
HAWK_ASSERT(fun != HAWK_NULL);
|
||||||
|
|
||||||
pafv.args = args;
|
pafv.args = args;
|
||||||
pafv.nargs = nargs;
|
pafv.nargs = nargs;
|
||||||
@ -2082,8 +2082,8 @@ static int run_pblock (hawk_rtx_t* rtx, hawk_chain_t* cha, hawk_oow_t bno)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* pattern, pattern { ... } */
|
/* pattern, pattern { ... } */
|
||||||
HAWK_ASSERT (ptn->next->next == HAWK_NULL);
|
HAWK_ASSERT(ptn->next->next == HAWK_NULL);
|
||||||
HAWK_ASSERT (rtx->pattern_range_state != HAWK_NULL);
|
HAWK_ASSERT(rtx->pattern_range_state != HAWK_NULL);
|
||||||
|
|
||||||
if (rtx->pattern_range_state[bno] == 0)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAWK_ASSERT (nde->type == HAWK_NDE_BLK);
|
HAWK_ASSERT(nde->type == HAWK_NDE_BLK);
|
||||||
/*saved_stack_top = rtx->stack_top;*/
|
/*saved_stack_top = rtx->stack_top;*/
|
||||||
|
|
||||||
#if defined(DEBUG_RUN)
|
#if defined(DEBUG_RUN)
|
||||||
@ -2286,7 +2286,7 @@ static int run_statement (hawk_rtx_t* rtx, hawk_nde_t* nde)
|
|||||||
|
|
||||||
case HAWK_NDE_CASE:
|
case HAWK_NDE_CASE:
|
||||||
/* this must never happen - run_swtich must handle this part */
|
/* 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);
|
hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
|
||||||
xret = -1;
|
xret = -1;
|
||||||
break;
|
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
|
/* the test expression for the if statement cannot have
|
||||||
* chained expressions. this should not be allowed by the
|
* chained expressions. this should not be allowed by the
|
||||||
* parser first of all */
|
* parser first of all */
|
||||||
HAWK_ASSERT (nde->test->next == HAWK_NULL);
|
HAWK_ASSERT(nde->test->next == HAWK_NULL);
|
||||||
|
|
||||||
test = eval_expression(rtx, nde->test);
|
test = eval_expression(rtx, nde->test);
|
||||||
if (HAWK_UNLIKELY(!test)) return -1;
|
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 eval_true = 0;
|
||||||
int ret = 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
|
* chained expressions. this should not be allowed by the
|
||||||
* parser first of all */
|
* 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);
|
test = eval_expression(rtx, nde->test);
|
||||||
if (HAWK_UNLIKELY(!test)) return -1;
|
if (HAWK_UNLIKELY(!test)) return -1;
|
||||||
|
|
||||||
hawk_rtx_refupval(rtx, test);
|
hawk_rtx_refupval(rtx, test);
|
||||||
|
|
||||||
HAWK_ASSERT(nde->type == HAWK_NDE_CASE);
|
|
||||||
case_part = (hawk_nde_case_t*)nde->case_part;
|
case_part = (hawk_nde_case_t*)nde->case_part;
|
||||||
default_part = (hawk_nde_case_t*)nde->default_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)
|
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
|
/* no chained expressions are allowed for the test
|
||||||
* expression of the while statement */
|
* expression of the while statement */
|
||||||
HAWK_ASSERT (nde->test->next == HAWK_NULL);
|
HAWK_ASSERT(nde->test->next == HAWK_NULL);
|
||||||
|
|
||||||
while (1)
|
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
|
/* no chained expressions are allowed for the test
|
||||||
* expression of the while statement */
|
* expression of the while statement */
|
||||||
HAWK_ASSERT (nde->test->next == HAWK_NULL);
|
HAWK_ASSERT(nde->test->next == HAWK_NULL);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -2598,7 +2600,7 @@ static int run_for (hawk_rtx_t* rtx, hawk_nde_for_t* nde)
|
|||||||
|
|
||||||
if (nde->init)
|
if (nde->init)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (nde->init->next == HAWK_NULL);
|
HAWK_ASSERT(nde->init->next == HAWK_NULL);
|
||||||
|
|
||||||
ON_STATEMENT (rtx, nde->init);
|
ON_STATEMENT (rtx, nde->init);
|
||||||
val = eval_expression(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
|
/* no chained expressions for the test expression of
|
||||||
* the for statement are allowed */
|
* the for statement are allowed */
|
||||||
HAWK_ASSERT (nde->test->next == HAWK_NULL);
|
HAWK_ASSERT(nde->test->next == HAWK_NULL);
|
||||||
|
|
||||||
ON_STATEMENT (rtx, nde->test);
|
ON_STATEMENT (rtx, nde->test);
|
||||||
test = eval_expression(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)
|
if (nde->incr != HAWK_NULL)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (nde->incr->next == HAWK_NULL);
|
HAWK_ASSERT(nde->incr->next == HAWK_NULL);
|
||||||
|
|
||||||
ON_STATEMENT (rtx, nde->incr);
|
ON_STATEMENT (rtx, nde->incr);
|
||||||
val = eval_expression(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;
|
int ret;
|
||||||
|
|
||||||
test = (hawk_nde_exp_t*)nde->test;
|
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 */
|
/* 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);
|
rv = eval_expression(rtx, test->right);
|
||||||
if (HAWK_UNLIKELY(!rv)) return -1;
|
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
|
/* chained expressions should not be allowed
|
||||||
* by the parser first of all */
|
* 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);
|
val = eval_expression(rtx, nde->val);
|
||||||
if (HAWK_UNLIKELY(!val)) return -1;
|
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
|
/* chained expressions should not be allowed
|
||||||
* by the parser first of all */
|
* 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);
|
val = eval_expression(rtx, nde->val);
|
||||||
if (HAWK_UNLIKELY(!val)) return -1;
|
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;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAWK_ASSERT (tmp == HAWK_MAP_VPTR(pair));
|
HAWK_ASSERT(tmp == HAWK_MAP_VPTR(pair));
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3106,7 +3108,7 @@ static hawk_val_t* fetch_topval_from_var (hawk_rtx_t* rtx, hawk_nde_var_t* var)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
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);
|
val = HAWK_RTX_STACK_ARG(rtx, var->id.idxa);
|
||||||
break;
|
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_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);
|
tmp = hawk_rtx_makemapval(rtx);
|
||||||
if (HAWK_UNLIKELY(!tmp))
|
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_nde_t* remidx;
|
||||||
hawk_val_type_t vtype;
|
hawk_val_type_t vtype;
|
||||||
|
|
||||||
HAWK_ASSERT (var->idx != HAWK_NULL);
|
HAWK_ASSERT(var->idx != HAWK_NULL);
|
||||||
|
|
||||||
/* delete x["abc"];
|
/* delete x["abc"];
|
||||||
* delete x[20,"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
|
else
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (vtype == HAWK_VAL_ARR);
|
HAWK_ASSERT(vtype == HAWK_VAL_ARR);
|
||||||
idx = idxnde_to_int(rtx, var->idx, &remidx);
|
idx = idxnde_to_int(rtx, var->idx, &remidx);
|
||||||
if (HAWK_UNLIKELY(idx <= -1)) goto oops;
|
if (HAWK_UNLIKELY(idx <= -1)) goto oops;
|
||||||
arr = ((hawk_val_arr_t*)vv)->arr;
|
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;
|
var = (hawk_nde_var_t*)nde->var;
|
||||||
|
|
||||||
val = fetch_topval_from_var(rtx, var);
|
val = fetch_topval_from_var(rtx, var);
|
||||||
HAWK_ASSERT (val != HAWK_NULL);
|
HAWK_ASSERT(val != HAWK_NULL);
|
||||||
|
|
||||||
vtype = HAWK_RTX_GETVALTYPE(rtx, val);
|
vtype = HAWK_RTX_GETVALTYPE(rtx, val);
|
||||||
switch (vtype)
|
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;
|
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)
|
switch (var->type)
|
||||||
{
|
{
|
||||||
case HAWK_NDE_NAMED:
|
case HAWK_NDE_NAMED:
|
||||||
/* if a named variable has an index part, something is definitely wrong */
|
/* 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 */
|
/* 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);
|
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_val_t* val;
|
||||||
|
|
||||||
HAWK_ASSERT (var->idx == HAWK_NULL);
|
HAWK_ASSERT(var->idx == HAWK_NULL);
|
||||||
|
|
||||||
val = fetch_topval_from_var(rtx, var);
|
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)
|
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:
|
default:
|
||||||
/* the reset statement can only be called with plain variables */
|
/* 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);
|
hawk_rtx_seterrnum(rtx, &var->loc, HAWK_EBADARG);
|
||||||
return -1;
|
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;
|
hawk_val_t* out_v = HAWK_NULL;
|
||||||
int n, xret = 0;
|
int n, xret = 0;
|
||||||
|
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
(nde->out_type == HAWK_OUT_PIPE && nde->out != HAWK_NULL) ||
|
(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_RWPIPE && nde->out != HAWK_NULL) ||
|
||||||
(nde->out_type == HAWK_OUT_FILE && 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)
|
if (nde->args->type == HAWK_NDE_GRP)
|
||||||
{
|
{
|
||||||
/* parenthesized print */
|
/* parenthesized print */
|
||||||
HAWK_ASSERT (nde->args->next == HAWK_NULL);
|
HAWK_ASSERT(nde->args->next == HAWK_NULL);
|
||||||
head = ((hawk_nde_grp_t*)nde->args)->body;
|
head = ((hawk_nde_grp_t*)nde->args)->body;
|
||||||
}
|
}
|
||||||
else head = nde->args;
|
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;
|
hawk_nde_t* head;
|
||||||
int n, xret = 0;
|
int n, xret = 0;
|
||||||
|
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
(nde->out_type == HAWK_OUT_PIPE && nde->out != HAWK_NULL) ||
|
(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_RWPIPE && nde->out != HAWK_NULL) ||
|
||||||
(nde->out_type == HAWK_OUT_FILE && 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. */
|
/*( 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)
|
if (nde->args->type == HAWK_NDE_GRP)
|
||||||
{
|
{
|
||||||
/* parenthesized print */
|
/* parenthesized print */
|
||||||
HAWK_ASSERT (nde->args->next == HAWK_NULL);
|
HAWK_ASSERT(nde->args->next == HAWK_NULL);
|
||||||
head = ((hawk_nde_grp_t*)nde->args)->body;
|
head = ((hawk_nde_grp_t*)nde->args)->body;
|
||||||
}
|
}
|
||||||
else head = nde->args;
|
else head = nde->args;
|
||||||
|
|
||||||
/* valid printf statement should have at least one argument. the parser must ensure this */
|
/* 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);
|
v = eval_expression(rtx, head);
|
||||||
if (HAWK_UNLIKELY(!v)) goto oops_1;
|
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
|
#if 0
|
||||||
/* the internal value representing $0 should always be of the string type
|
/* the internal value representing $0 should always be of the string type
|
||||||
* once it has been set/updated. it is nil initially. */
|
* 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.ptr = ((hawk_val_str_t*)rtx->inrec.d0)->val.ptr;
|
||||||
vs.len = ((hawk_val_str_t*)rtx->inrec.d0)->val.len;
|
vs.len = ((hawk_val_str_t*)rtx->inrec.d0)->val.len;
|
||||||
#else
|
#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));
|
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;
|
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_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);
|
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
|
#if 0
|
||||||
/* eval_binop_in evaluates the HAWK_NDE_GRP specially.
|
/* eval_binop_in evaluates the HAWK_NDE_GRP specially.
|
||||||
* so this function should never be reached. */
|
* 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);
|
hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
#endif
|
#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;
|
np = ((hawk_nde_grp_t*)nde)->body;
|
||||||
|
|
||||||
HAWK_ASSERT (np != HAWK_NULL);
|
HAWK_ASSERT(np != HAWK_NULL);
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
val = eval_expression(rtx, np);
|
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_val_t* val, * ret;
|
||||||
hawk_nde_ass_t* ass = (hawk_nde_ass_t*)nde;
|
hawk_nde_ass_t* ass = (hawk_nde_ass_t*)nde;
|
||||||
|
|
||||||
HAWK_ASSERT (ass->left != HAWK_NULL);
|
HAWK_ASSERT(ass->left != HAWK_NULL);
|
||||||
HAWK_ASSERT (ass->right != 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);
|
val = eval_expression(rtx, ass->right);
|
||||||
if (HAWK_UNLIKELY(!val)) return HAWK_NULL;
|
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
|
eval_binop_bor
|
||||||
};
|
};
|
||||||
|
|
||||||
HAWK_ASSERT (ass->left->next == HAWK_NULL);
|
HAWK_ASSERT(ass->left->next == HAWK_NULL);
|
||||||
val2 = eval_expression(rtx, ass->left);
|
val2 = eval_expression(rtx, ass->left);
|
||||||
if (HAWK_UNLIKELY(!val2))
|
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_rtx_refupval(rtx, val2);
|
||||||
|
|
||||||
HAWK_ASSERT (ass->opcode >= 0);
|
HAWK_ASSERT(ass->opcode >= 0);
|
||||||
HAWK_ASSERT (ass->opcode < HAWK_COUNTOF(binop_func));
|
HAWK_ASSERT(ass->opcode < HAWK_COUNTOF(binop_func));
|
||||||
HAWK_ASSERT (binop_func[ass->opcode] != HAWK_NULL);
|
HAWK_ASSERT(binop_func[ass->opcode] != HAWK_NULL);
|
||||||
|
|
||||||
tmp = binop_func[ass->opcode](rtx, val2, val);
|
tmp = binop_func[ass->opcode](rtx, val2, val);
|
||||||
if (HAWK_UNLIKELY(!tmp))
|
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:
|
default:
|
||||||
HAWK_ASSERT (!"should never happen - invalid variable type");
|
HAWK_ASSERT(!"should never happen - invalid variable type");
|
||||||
errnum = HAWK_EINTERN;
|
errnum = HAWK_EINTERN;
|
||||||
goto exit_on_error;
|
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_val_type_t vtype;
|
||||||
|
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
var->type == HAWK_NDE_NAMED ||
|
var->type == HAWK_NDE_NAMED ||
|
||||||
var->type == HAWK_NDE_GBL ||
|
var->type == HAWK_NDE_GBL ||
|
||||||
var->type == HAWK_NDE_LCL ||
|
var->type == HAWK_NDE_LCL ||
|
||||||
var->type == HAWK_NDE_ARG
|
var->type == HAWK_NDE_ARG
|
||||||
);
|
);
|
||||||
|
|
||||||
HAWK_ASSERT (var->idx == HAWK_NULL);
|
HAWK_ASSERT(var->idx == HAWK_NULL);
|
||||||
vtype = HAWK_RTX_GETVALTYPE (rtx, val);
|
vtype = HAWK_RTX_GETVALTYPE (rtx, val);
|
||||||
|
|
||||||
switch (var->type)
|
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_t* vv; /* existing value pointed to by var */
|
||||||
hawk_val_type_t vtype;
|
hawk_val_type_t vtype;
|
||||||
|
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
(var->type == HAWK_NDE_NAMEDIDX ||
|
(var->type == HAWK_NDE_NAMEDIDX ||
|
||||||
var->type == HAWK_NDE_GBLIDX ||
|
var->type == HAWK_NDE_GBLIDX ||
|
||||||
var->type == HAWK_NDE_LCLIDX ||
|
var->type == HAWK_NDE_LCLIDX ||
|
||||||
var->type == HAWK_NDE_ARGIDX) && var->idx != HAWK_NULL);
|
var->type == HAWK_NDE_ARGIDX) && var->idx != HAWK_NULL);
|
||||||
#if !defined(HAWK_ENABLE_GC)
|
#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);
|
HAWK_RTX_GETVALTYPE(rtx, val) != HAWK_VAL_ARR);
|
||||||
#endif
|
#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_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
|
||||||
hawk_val_t* left, * right, * res;
|
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)
|
switch (exp->opcode)
|
||||||
{
|
{
|
||||||
@ -4481,13 +4483,13 @@ static hawk_val_t* eval_binary (hawk_rtx_t* rtx, hawk_nde_t* nde)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
HAWK_ASSERT (exp->left->next == HAWK_NULL);
|
HAWK_ASSERT(exp->left->next == HAWK_NULL);
|
||||||
left = eval_expression(rtx, exp->left);
|
left = eval_expression(rtx, exp->left);
|
||||||
if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
|
if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
|
||||||
|
|
||||||
hawk_rtx_refupval(rtx, left);
|
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);
|
right = eval_expression(rtx, exp->right);
|
||||||
if (HAWK_UNLIKELY(!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_rtx_refupval(rtx, right);
|
||||||
|
|
||||||
HAWK_ASSERT (exp->opcode >= 0 && exp->opcode < HAWK_COUNTOF(binop_func));
|
HAWK_ASSERT(exp->opcode >= 0 && exp->opcode < HAWK_COUNTOF(binop_func));
|
||||||
HAWK_ASSERT (binop_func[exp->opcode] != HAWK_NULL);
|
HAWK_ASSERT(binop_func[exp->opcode] != HAWK_NULL);
|
||||||
|
|
||||||
res = binop_func[exp->opcode](rtx, left, right);
|
res = binop_func[exp->opcode](rtx, left, right);
|
||||||
if (HAWK_UNLIKELY(!res)) ADJERR_LOC(rtx, &nde->loc);
|
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 */
|
/* short-circuit evaluation required special treatment */
|
||||||
hawk_val_t* lv, * rv, * res;
|
hawk_val_t* lv, * rv, * res;
|
||||||
|
|
||||||
HAWK_ASSERT (left->next == HAWK_NULL);
|
HAWK_ASSERT(left->next == HAWK_NULL);
|
||||||
lv = eval_expression(rtx, left);
|
lv = eval_expression(rtx, left);
|
||||||
if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
|
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
|
else
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (right->next == HAWK_NULL);
|
HAWK_ASSERT(right->next == HAWK_NULL);
|
||||||
rv = eval_expression(rtx, right);
|
rv = eval_expression(rtx, right);
|
||||||
if (HAWK_UNLIKELY(!rv))
|
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 */
|
/* short-circuit evaluation required special treatment */
|
||||||
hawk_val_t* lv, * rv, * res;
|
hawk_val_t* lv, * rv, * res;
|
||||||
|
|
||||||
HAWK_ASSERT (left->next == HAWK_NULL);
|
HAWK_ASSERT(left->next == HAWK_NULL);
|
||||||
lv = eval_expression(rtx, left);
|
lv = eval_expression(rtx, left);
|
||||||
if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
|
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
|
else
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (right->next == HAWK_NULL);
|
HAWK_ASSERT(right->next == HAWK_NULL);
|
||||||
rv = eval_expression(rtx, right);
|
rv = eval_expression(rtx, right);
|
||||||
if (HAWK_UNLIKELY(!rv))
|
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
|
#endif
|
||||||
{
|
{
|
||||||
/* the compiler should have handled this case */
|
/* 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);
|
hawk_rtx_seterrnum(rtx, &right->loc, HAWK_EINTERN);
|
||||||
return HAWK_NULL;
|
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.
|
* '(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 */
|
/* 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);
|
ropv = eval_expression(rtx, right);
|
||||||
if (HAWK_UNLIKELY(!ropv))
|
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_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);
|
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_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);
|
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_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);
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAWK_ASSERT (lvtype >= HAWK_VAL_NIL && lvtype <= HAWK_VAL_ARR);
|
HAWK_ASSERT(lvtype >= HAWK_VAL_NIL && lvtype <= HAWK_VAL_ARR);
|
||||||
HAWK_ASSERT (rvtype >= HAWK_VAL_NIL && rvtype <= HAWK_VAL_ARR);
|
HAWK_ASSERT(rvtype >= HAWK_VAL_NIL && rvtype <= HAWK_VAL_ARR);
|
||||||
|
|
||||||
/* mapping fomula and table layout assume:
|
/* mapping fomula and table layout assume:
|
||||||
* HAWK_VAL_NIL = 0
|
* 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
|
1 1 = 3
|
||||||
*/
|
*/
|
||||||
n3 = n1 + (n2 << 1);
|
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):
|
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 == 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);
|
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):
|
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 == 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):
|
(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);
|
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):
|
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 == 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):
|
(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;
|
hawk_val_t* res;
|
||||||
|
|
||||||
/* the mod function must be provided when the hawk object is created to be able to calculate floating-pointer remainder */
|
/* 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);
|
n1 = hawk_rtx_valtonum(rtx, left, &l1, &r1);
|
||||||
n2 = hawk_rtx_valtonum(rtx, right, &l2, &r2);
|
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_val_t* lv, * rv, * res;
|
||||||
|
|
||||||
HAWK_ASSERT (left->next == HAWK_NULL);
|
HAWK_ASSERT(left->next == HAWK_NULL);
|
||||||
HAWK_ASSERT (right->next == HAWK_NULL);
|
HAWK_ASSERT(right->next == HAWK_NULL);
|
||||||
|
|
||||||
lv = eval_expression(rtx, left);
|
lv = eval_expression(rtx, left);
|
||||||
if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
|
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_val_t* lv, * rv, * res;
|
||||||
|
|
||||||
HAWK_ASSERT (left->next == HAWK_NULL);
|
HAWK_ASSERT(left->next == HAWK_NULL);
|
||||||
HAWK_ASSERT (right->next == HAWK_NULL);
|
HAWK_ASSERT(right->next == HAWK_NULL);
|
||||||
|
|
||||||
lv = eval_expression(rtx, left);
|
lv = eval_expression(rtx, left);
|
||||||
if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
|
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_int_t l;
|
||||||
hawk_flt_t r;
|
hawk_flt_t r;
|
||||||
|
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
exp->type == HAWK_NDE_EXP_UNR);
|
exp->type == HAWK_NDE_EXP_UNR);
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
exp->left != HAWK_NULL && exp->right == HAWK_NULL);
|
exp->left != HAWK_NULL && exp->right == HAWK_NULL);
|
||||||
HAWK_ASSERT (
|
HAWK_ASSERT(
|
||||||
exp->opcode == HAWK_UNROP_PLUS ||
|
exp->opcode == HAWK_UNROP_PLUS ||
|
||||||
exp->opcode == HAWK_UNROP_MINUS ||
|
exp->opcode == HAWK_UNROP_MINUS ||
|
||||||
exp->opcode == HAWK_UNROP_LNOT ||
|
exp->opcode == HAWK_UNROP_LNOT ||
|
||||||
exp->opcode == HAWK_UNROP_BNOT);
|
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);
|
left = eval_expression(rtx, exp->left);
|
||||||
if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
|
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_flt_t inc_val_flt;
|
||||||
hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
|
hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
|
||||||
|
|
||||||
HAWK_ASSERT (exp->type == HAWK_NDE_EXP_INCPRE);
|
HAWK_ASSERT(exp->type == HAWK_NDE_EXP_INCPRE);
|
||||||
HAWK_ASSERT (exp->left != HAWK_NULL && exp->right == HAWK_NULL);
|
HAWK_ASSERT(exp->left != HAWK_NULL && exp->right == HAWK_NULL);
|
||||||
|
|
||||||
/* this way of checking if the l-value is assignable is
|
/* this way of checking if the l-value is assignable is
|
||||||
* ugly as it is dependent on the node types defined in hawk.h
|
* 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
|
else
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (!"should never happen - invalid opcode");
|
HAWK_ASSERT(!"should never happen - invalid opcode");
|
||||||
hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
|
hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAWK_ASSERT (exp->left->next == HAWK_NULL);
|
HAWK_ASSERT(exp->left->next == HAWK_NULL);
|
||||||
left = eval_expression(rtx, exp->left);
|
left = eval_expression(rtx, exp->left);
|
||||||
if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
|
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) */
|
else /* if (n == 1) */
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (n == 1);
|
HAWK_ASSERT(n == 1);
|
||||||
res = hawk_rtx_makefltval (rtx, v2 + inc_val_flt);
|
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_flt_t inc_val_flt;
|
||||||
hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
|
hawk_nde_exp_t* exp = (hawk_nde_exp_t*)nde;
|
||||||
|
|
||||||
HAWK_ASSERT (exp->type == HAWK_NDE_EXP_INCPST);
|
HAWK_ASSERT(exp->type == HAWK_NDE_EXP_INCPST);
|
||||||
HAWK_ASSERT (exp->left != HAWK_NULL && exp->right == HAWK_NULL);
|
HAWK_ASSERT(exp->left != HAWK_NULL && exp->right == HAWK_NULL);
|
||||||
|
|
||||||
/* this way of checking if the l-value is assignable is
|
/* this way of checking if the l-value is assignable is
|
||||||
* ugly as it is dependent on the node types defined in hawk.h.
|
* 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
|
else
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (!"should never happen - invalid opcode");
|
HAWK_ASSERT(!"should never happen - invalid opcode");
|
||||||
hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
|
hawk_rtx_seterrnum(rtx, &nde->loc, HAWK_EINTERN);
|
||||||
return HAWK_NULL;
|
return HAWK_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAWK_ASSERT (exp->left->next == HAWK_NULL);
|
HAWK_ASSERT(exp->left->next == HAWK_NULL);
|
||||||
left = eval_expression(rtx, exp->left);
|
left = eval_expression(rtx, exp->left);
|
||||||
if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
|
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) */
|
else /* if (n == 1) */
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (n == 1);
|
HAWK_ASSERT(n == 1);
|
||||||
res = hawk_rtx_makefltval(rtx, v2);
|
res = hawk_rtx_makefltval(rtx, v2);
|
||||||
if (HAWK_UNLIKELY(!res))
|
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_val_t* tv, * v;
|
||||||
hawk_nde_cnd_t* cnd = (hawk_nde_cnd_t*)nde;
|
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);
|
tv = eval_expression(rtx, cnd->test);
|
||||||
if (HAWK_UNLIKELY(!tv)) return HAWK_NULL;
|
if (HAWK_UNLIKELY(!tv)) return HAWK_NULL;
|
||||||
|
|
||||||
hawk_rtx_refupval(rtx, tv);
|
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);
|
v = (hawk_rtx_valtobool(rtx, tv))? eval_expression(rtx, cnd->left): eval_expression(rtx, cnd->right);
|
||||||
|
|
||||||
hawk_rtx_refdownval(rtx, tv);
|
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 */
|
/* intrinsic function */
|
||||||
hawk_nde_fncall_t* call = (hawk_nde_fncall_t*)nde;
|
hawk_nde_fncall_t* call = (hawk_nde_fncall_t*)nde;
|
||||||
/* the parser must make sure that the number of arguments is proper */
|
/* 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);
|
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);
|
fun = (hawk_fun_t*)HAWK_HTB_VPTR(pair);
|
||||||
HAWK_ASSERT (fun != HAWK_NULL);
|
HAWK_ASSERT(fun != HAWK_NULL);
|
||||||
|
|
||||||
/* cache the search result */
|
/* cache the search result */
|
||||||
call->u.fun.fun = fun;
|
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_top));
|
||||||
HAWK_ASSERT (HAWK_SIZEOF(void*) >= HAWK_SIZEOF(rtx->stack_base));
|
HAWK_ASSERT(HAWK_SIZEOF(void*) >= HAWK_SIZEOF(rtx->stack_base));
|
||||||
|
|
||||||
saved_stack_top = rtx->stack_top;
|
saved_stack_top = rtx->stack_top;
|
||||||
|
|
||||||
@ -6944,7 +6946,7 @@ hawk_val_t* hawk_rtx_evalcall (
|
|||||||
nargs = argpusher(rtx, call, apdata);
|
nargs = argpusher(rtx, call, apdata);
|
||||||
if (nargs == (hawk_oow_t)-1) goto oops_making_stack_frame;
|
if (nargs == (hawk_oow_t)-1) goto oops_making_stack_frame;
|
||||||
|
|
||||||
HAWK_ASSERT (nargs == call->nargs);
|
HAWK_ASSERT(nargs == call->nargs);
|
||||||
|
|
||||||
if (fun)
|
if (fun)
|
||||||
{
|
{
|
||||||
@ -6968,7 +6970,7 @@ hawk_val_t* hawk_rtx_evalcall (
|
|||||||
if (fun)
|
if (fun)
|
||||||
{
|
{
|
||||||
/* normal hawk function */
|
/* 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);
|
n = run_block(rtx, (hawk_nde_blk_t*)fun->body);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -6976,7 +6978,7 @@ hawk_val_t* hawk_rtx_evalcall (
|
|||||||
n = 0;
|
n = 0;
|
||||||
|
|
||||||
/* intrinsic function */
|
/* 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)
|
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_refdownval(rtx, rtx->stack[rtx->stack_top - 1]);
|
||||||
HAWK_RTX_STACK_POP (rtx);
|
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)
|
while (rtx->stack_top > saved_stack_top)
|
||||||
{
|
{
|
||||||
/* the stack frame prologue does not have a reference-counted value
|
/* 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_rtx_refupval(rtx, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
HAWK_ASSERT (call->nargs == nargs);
|
HAWK_ASSERT(call->nargs == nargs);
|
||||||
return 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_val_type_t vtype;
|
||||||
hawk_nde_t* remidx;
|
hawk_nde_t* remidx;
|
||||||
|
|
||||||
HAWK_ASSERT (var->idx != HAWK_NULL);
|
HAWK_ASSERT(var->idx != HAWK_NULL);
|
||||||
|
|
||||||
v = fetch_topval_from_var(rtx, var);
|
v = fetch_topval_from_var(rtx, var);
|
||||||
vtype = HAWK_RTX_GETVALTYPE(rtx, v);
|
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 */
|
/* 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);
|
pair = hawk_map_upsert(map, str, len, hawk_val_nil, 0);
|
||||||
if (HAWK_UNLIKELY(!pair)) { ADJERR_LOC(rtx, &var->loc); goto oops; }
|
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
|
/* no reference count increment as hawk_val_nil is upserted
|
||||||
hawk_rtx_refupval(rtx, HAWK_MAP_VPTR(pair)); */
|
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);
|
fun = (hawk_fun_t*)HAWK_HTB_VPTR(pair);
|
||||||
HAWK_ASSERT (fun != HAWK_NULL);
|
HAWK_ASSERT(fun != HAWK_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
val = hawk_rtx_makefunval(rtx, fun);
|
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);
|
v = fetch_topval_from_var(rtx, var);
|
||||||
vtype = HAWK_RTX_GETVALTYPE(rtx, v);
|
vtype = HAWK_RTX_GETVALTYPE(rtx, v);
|
||||||
|
|
||||||
HAWK_ASSERT (var->idx != HAWK_NULL);
|
HAWK_ASSERT(var->idx != HAWK_NULL);
|
||||||
|
|
||||||
switch (vtype)
|
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;
|
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_PIPE && p->in != HAWK_NULL) ||
|
||||||
(p->in_type == HAWK_IN_RWPIPE && p->in != HAWK_NULL) ||
|
(p->in_type == HAWK_IN_RWPIPE && p->in != HAWK_NULL) ||
|
||||||
(p->in_type == HAWK_IN_FILE && 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)
|
if (p->in_type == HAWK_IN_CONSOLE)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (p->in == HAWK_NULL);
|
HAWK_ASSERT(p->in == HAWK_NULL);
|
||||||
if (rtx->nrflt.limit > 0)
|
if (rtx->nrflt.limit > 0)
|
||||||
{
|
{
|
||||||
/* record filter based on record number(NR) */
|
/* 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;
|
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_PIPE && p->in != HAWK_NULL) ||
|
||||||
(p->in_type == HAWK_IN_RWPIPE && p->in != HAWK_NULL) ||
|
(p->in_type == HAWK_IN_RWPIPE && p->in != HAWK_NULL) ||
|
||||||
(p->in_type == HAWK_IN_FILE && 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)
|
if (p->in_type == HAWK_IN_CONSOLE)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (p->in == HAWK_NULL);
|
HAWK_ASSERT(p->in == HAWK_NULL);
|
||||||
if (rtx->nrflt.limit > 0)
|
if (rtx->nrflt.limit > 0)
|
||||||
{
|
{
|
||||||
/* record filter based on record number(NR) */
|
/* record filter based on record number(NR) */
|
||||||
@ -8146,7 +8148,7 @@ read_again:
|
|||||||
#endif
|
#endif
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (HAWK_OOECS_LEN(buf) == 0);
|
HAWK_ASSERT(HAWK_OOECS_LEN(buf) == 0);
|
||||||
return 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_val_t* idx;
|
||||||
hawk_int_t idxint;
|
hawk_int_t idxint;
|
||||||
|
|
||||||
HAWK_ASSERT (nde != HAWK_NULL);
|
HAWK_ASSERT(nde != HAWK_NULL);
|
||||||
|
|
||||||
if (!nde->next)
|
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;
|
str = out.u.cplcpy.ptr;
|
||||||
*len = out.u.cplcpy.len;
|
*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)
|
} while(0)
|
||||||
|
|
||||||
/* run->format.tmp.ptr should have been assigned a pointer to a block of memory before this function has been called */
|
/* 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)
|
if (nargs_on_stack == (hawk_oow_t)-1)
|
||||||
{
|
{
|
||||||
@ -9019,7 +9021,7 @@ wp_mod_main:
|
|||||||
hawk_flt_t r;
|
hawk_flt_t r;
|
||||||
int n;
|
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);
|
hawk_rtx_refupval(rtx, v);
|
||||||
n = hawk_rtx_valtoflt(rtx, v, &r);
|
n = hawk_rtx_valtoflt(rtx, v, &r);
|
||||||
@ -9272,7 +9274,7 @@ hawk_bch_t* hawk_rtx_formatmbs (
|
|||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
/* run->format.tmp.ptr should have been assigned a pointer to a block of memory before this function has been called */
|
/* 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)
|
if (nargs_on_stack == (hawk_oow_t)-1)
|
||||||
{
|
{
|
||||||
@ -9903,7 +9905,7 @@ wp_mod_main:
|
|||||||
hawk_flt_t r;
|
hawk_flt_t r;
|
||||||
int n;
|
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);
|
hawk_rtx_refupval(rtx, v);
|
||||||
n = hawk_rtx_valtoflt(rtx, v, &r);
|
n = hawk_rtx_valtoflt(rtx, v, &r);
|
||||||
|
Reference in New Issue
Block a user