Compare commits
2
Commits
79296debb1
..
xstack
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
158865a866 | ||
|
|
d516cd2e4b |
+2
-2
@@ -69,7 +69,7 @@ typedef struct hawk_tree_t hawk_tree_t;
|
|||||||
#define HAWK_ENABLE_ATOMIC_SIG
|
#define HAWK_ENABLE_ATOMIC_SIG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/* this part is kept for preservation of experiment only.
|
||||||
#if defined(HAVE_UCONTEXT_H)
|
#if defined(HAVE_UCONTEXT_H)
|
||||||
#include <ucontext.h>
|
#include <ucontext.h>
|
||||||
#define HAWK_ENABLE_UCONTEXT
|
#define HAWK_ENABLE_UCONTEXT
|
||||||
@@ -538,7 +538,7 @@ struct hawk_rtx_t
|
|||||||
hawk_val_t* driver_eval_result;
|
hawk_val_t* driver_eval_result;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_UCONTEXT_H)
|
#if defined(HAWK_ENABLE_UCONTEXT)
|
||||||
/* pool of reusable C stacks for coroutine-based function calls */
|
/* pool of reusable C stacks for coroutine-based function calls */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ hawk_val_t* hawk_rtx_evalcall (
|
|||||||
void* eharg
|
void* eharg
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#if 0
|
||||||
hawk_val_t* hawk_rtx_evalcall_xstack (
|
hawk_val_t* hawk_rtx_evalcall_xstack (
|
||||||
hawk_rtx_t* rtx,
|
hawk_rtx_t* rtx,
|
||||||
hawk_nde_fncall_t* call,
|
hawk_nde_fncall_t* call,
|
||||||
@@ -159,6 +160,7 @@ hawk_val_t* hawk_rtx_evalcall_xstack (
|
|||||||
void(*errhandler)(void*),
|
void(*errhandler)(void*),
|
||||||
void* eharg
|
void* eharg
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
int hawk_rtx_setsighandler (
|
int hawk_rtx_setsighandler (
|
||||||
hawk_rtx_t* rtx,
|
hawk_rtx_t* rtx,
|
||||||
|
|||||||
@@ -50,8 +50,7 @@ static int run_block (hawk_rtx_t* rtx, hawk_nde_blk_t* nde); /* forward */
|
|||||||
static char* hawk_co_get_stack (hawk_rtx_t* rtx)
|
static char* hawk_co_get_stack (hawk_rtx_t* rtx)
|
||||||
{
|
{
|
||||||
/* get a stack from the free list */
|
/* get a stack from the free list */
|
||||||
if (rtx->co.pool_size > 0)
|
if (rtx->co.pool_size > 0) return rtx->co.pool[--rtx->co.pool_size];
|
||||||
return rtx->co.pool[--rtx->co.pool_size];
|
|
||||||
return (char*)hawk_rtx_allocmem(rtx, HAWK_CO_STACK_SIZE);
|
return (char*)hawk_rtx_allocmem(rtx, HAWK_CO_STACK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2693,7 +2692,7 @@ oops:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HAWK_INLINE int run_block0 (hawk_rtx_t* rtx, hawk_nde_blk_t* nde)
|
static HAWK_INLINE_ALWAYS int run_block0 (hawk_rtx_t* rtx, hawk_nde_blk_t* nde)
|
||||||
{
|
{
|
||||||
hawk_nde_t* p;
|
hawk_nde_t* p;
|
||||||
/*hawk_oow_t saved_stack_top;*/
|
/*hawk_oow_t saved_stack_top;*/
|
||||||
@@ -3807,23 +3806,20 @@ static int run_while (hawk_rtx_t* rtx, int state, hawk_nde_while_t* nde)
|
|||||||
if (push_exec_stack(rtx, EXEC_STATE_WHILE_TEST_AFTER_EVAL, (hawk_nde_t*)nde) <= -1) return -1;
|
if (push_exec_stack(rtx, EXEC_STATE_WHILE_TEST_AFTER_EVAL, (hawk_nde_t*)nde) <= -1) return -1;
|
||||||
return push_eframe(rtx, HAWK_EF_EVAL, nde->test);
|
return push_eframe(rtx, HAWK_EF_EVAL, nde->test);
|
||||||
#else
|
#else
|
||||||
{
|
test = eval_expression(rtx, nde->test);
|
||||||
hawk_val_t* test;
|
if (HAWK_UNLIKELY(!test)) return -1;
|
||||||
test = eval_expression(rtx, nde->test);
|
|
||||||
if (HAWK_UNLIKELY(!test)) return -1;
|
|
||||||
|
|
||||||
hawk_rtx_refupval_inline(rtx, test);
|
hawk_rtx_refupval_inline(rtx, test);
|
||||||
if (hawk_rtx_valtobool(rtx, test))
|
if (hawk_rtx_valtobool(rtx, test))
|
||||||
|
{
|
||||||
|
if (push_exec_stack(rtx, EXEC_STATE_WHILE_BODY_DONE, (hawk_nde_t*)nde) <= -1 ||
|
||||||
|
push_exec_stack(rtx, EXEC_STATE_ENTER, nde->body) <= -1)
|
||||||
{
|
{
|
||||||
if (push_exec_stack(rtx, EXEC_STATE_WHILE_BODY_DONE, (hawk_nde_t*)nde) <= -1 ||
|
hawk_rtx_refdownval_inline(rtx, test);
|
||||||
push_exec_stack(rtx, EXEC_STATE_ENTER, nde->body) <= -1)
|
return -1;
|
||||||
{
|
|
||||||
hawk_rtx_refdownval_inline(rtx, test);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hawk_rtx_refdownval_inline(rtx, test);
|
|
||||||
}
|
}
|
||||||
|
hawk_rtx_refdownval_inline(rtx, test);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (nde->type == HAWK_NDE_DOWHILE)
|
else if (nde->type == HAWK_NDE_DOWHILE)
|
||||||
@@ -3856,25 +3852,22 @@ static int run_while (hawk_rtx_t* rtx, int state, hawk_nde_while_t* nde)
|
|||||||
if (push_exec_stack(rtx, EXEC_STATE_DOWHILE_TEST_AFTER_EVAL, (hawk_nde_t*)nde) <= -1) return -1;
|
if (push_exec_stack(rtx, EXEC_STATE_DOWHILE_TEST_AFTER_EVAL, (hawk_nde_t*)nde) <= -1) return -1;
|
||||||
return push_eframe(rtx, HAWK_EF_EVAL, nde->test);
|
return push_eframe(rtx, HAWK_EF_EVAL, nde->test);
|
||||||
#else
|
#else
|
||||||
|
test = eval_expression(rtx, nde->test);
|
||||||
|
if (HAWK_UNLIKELY(!test)) return -1;
|
||||||
|
|
||||||
|
hawk_rtx_refupval_inline(rtx, test);
|
||||||
|
|
||||||
|
if (hawk_rtx_valtobool(rtx, test))
|
||||||
{
|
{
|
||||||
hawk_val_t* test;
|
if (push_exec_stack(rtx, EXEC_STATE_DOWHILE_TEST, (hawk_nde_t*)nde) <= -1 ||
|
||||||
test = eval_expression(rtx, nde->test);
|
push_exec_stack(rtx, EXEC_STATE_ENTER, nde->body) <= -1)
|
||||||
if (HAWK_UNLIKELY(!test)) return -1;
|
|
||||||
|
|
||||||
hawk_rtx_refupval_inline(rtx, test);
|
|
||||||
|
|
||||||
if (hawk_rtx_valtobool(rtx, test))
|
|
||||||
{
|
{
|
||||||
if (push_exec_stack(rtx, EXEC_STATE_DOWHILE_TEST, (hawk_nde_t*)nde) <= -1 ||
|
hawk_rtx_refdownval_inline(rtx, test);
|
||||||
push_exec_stack(rtx, EXEC_STATE_ENTER, nde->body) <= -1)
|
return -1;
|
||||||
{
|
|
||||||
hawk_rtx_refdownval_inline(rtx, test);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hawk_rtx_refdownval_inline(rtx, test);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hawk_rtx_refdownval_inline(rtx, test);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4480,7 +4473,6 @@ static hawk_val_t* assign_newmapval_to_var (hawk_rtx_t* rtx, hawk_nde_var_t* var
|
|||||||
return assign_topval_to_var(rtx, var, tmp);
|
return assign_topval_to_var(rtx, var, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static HAWK_INLINE int delete_indexed (hawk_rtx_t* rtx, hawk_val_t* vv, hawk_nde_var_t* var)
|
static HAWK_INLINE int delete_indexed (hawk_rtx_t* rtx, hawk_val_t* vv, hawk_nde_var_t* var)
|
||||||
{
|
{
|
||||||
hawk_map_t* map;
|
hawk_map_t* map;
|
||||||
@@ -5400,7 +5392,7 @@ static hawk_val_t* eval_group (hawk_rtx_t* rtx, hawk_nde_t* nde)
|
|||||||
* before the introduction of this option, the grouped
|
* before the introduction of this option, the grouped
|
||||||
* expression was valid only coerced with the 'in'
|
* expression was valid only coerced with the 'in'
|
||||||
* operator.
|
* operator.
|
||||||
* */
|
*/
|
||||||
|
|
||||||
/* when a group is evaluated in a normal context,
|
/* when a group is evaluated in a normal context,
|
||||||
* we return the last expression as a value. */
|
* we return the last expression as a value. */
|
||||||
@@ -5497,8 +5489,9 @@ static hawk_val_t* eval_assignment (hawk_rtx_t* rtx, hawk_nde_t* nde)
|
|||||||
case HAWK_ASSOP_BXOR: tmp = eval_binop_bxor(rtx, val2, val); break;
|
case HAWK_ASSOP_BXOR: tmp = eval_binop_bxor(rtx, val2, val); break;
|
||||||
case HAWK_ASSOP_BOR: tmp = eval_binop_bor(rtx, val2, val); break;
|
case HAWK_ASSOP_BOR: tmp = eval_binop_bor(rtx, val2, val); break;
|
||||||
default:
|
default:
|
||||||
HAWK_ASSERT (!"should never happen - invalid assigment opcode detected");
|
HAWK_ASSERT(!"should never happen - invalid assigment opcode detected");
|
||||||
hawk_rtx_seterrbfmt(rtx, &nde->loc, HAWK_EINTERN, "internal error - invalid assignment(%d) opcode detected", (int)ass->opcode);
|
hawk_rtx_seterrbfmt(rtx, &nde->loc, HAWK_EINTERN, "internal error - invalid assignment(%d) opcode detected", (int)ass->opcode);
|
||||||
|
tmp = HAWK_NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -7788,6 +7781,12 @@ static hawk_val_t* eval_binop_div (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
|||||||
case 3:
|
case 3:
|
||||||
res = hawk_rtx_makefltval(rtx, r1 / r2);
|
res = hawk_rtx_makefltval(rtx, r1 / r2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
HAWK_ASSERT(!"should never happen - invalid intermediate state in handling div");
|
||||||
|
hawk_rtx_seterrbfmt(rtx, HAWK_NULL, HAWK_EINTERN, "internal error in handling div");
|
||||||
|
res = HAWK_NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@@ -7835,6 +7834,12 @@ static hawk_val_t* eval_binop_idiv (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_
|
|||||||
quo = r1 / r2;
|
quo = r1 / r2;
|
||||||
res = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)quo);
|
res = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)quo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
HAWK_ASSERT(!"should never happen - invalid intermediate state in handling idiv");
|
||||||
|
hawk_rtx_seterrbfmt(rtx, HAWK_NULL, HAWK_EINTERN, "internal error in handling idiv");
|
||||||
|
res = HAWK_NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@@ -7882,6 +7887,12 @@ static hawk_val_t* eval_binop_mod (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
|||||||
case 3:
|
case 3:
|
||||||
res = hawk_rtx_makefltval(rtx, rtx->hawk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1, (hawk_flt_t)r2));
|
res = hawk_rtx_makefltval(rtx, rtx->hawk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1, (hawk_flt_t)r2));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
HAWK_ASSERT(!"should never happen - invalid intermediate state in handling mod");
|
||||||
|
hawk_rtx_seterrbfmt(rtx, HAWK_NULL, HAWK_EINTERN, "internal error in handling mod");
|
||||||
|
res = HAWK_NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@@ -7965,6 +7976,12 @@ static hawk_val_t* eval_binop_exp (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
|||||||
rtx->hawk->prm.math.pow(hawk_rtx_gethawk(rtx), r1, r2)
|
rtx->hawk->prm.math.pow(hawk_rtx_gethawk(rtx), r1, r2)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
HAWK_ASSERT(!"should never happen - invalid intermediate state in handling exp");
|
||||||
|
hawk_rtx_seterrbfmt(rtx, HAWK_NULL, HAWK_EINTERN, "internal error in handling exp");
|
||||||
|
res = HAWK_NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@@ -8856,7 +8873,7 @@ hawk_val_t* hawk_rtx_evalcall (
|
|||||||
HAWK_CO_COROUTINE_DEPTH_THRESHOLD : HAWK_CO_MAIN_DEPTH_THRESHOLD;
|
HAWK_CO_COROUTINE_DEPTH_THRESHOLD : HAWK_CO_MAIN_DEPTH_THRESHOLD;
|
||||||
if (rtx->depth.block - rtx->co.stack_base >= co_threshold)
|
if (rtx->depth.block - rtx->co.stack_base >= co_threshold)
|
||||||
{
|
{
|
||||||
/* approaching the C stack limit of the current segment —
|
/* approaching the C stack limit of the current segment -
|
||||||
* run this call on a fresh heap-allocated stack */
|
* run this call on a fresh heap-allocated stack */
|
||||||
char* costack;
|
char* costack;
|
||||||
ucontext_t caller_ctx, coctx;
|
ucontext_t caller_ctx, coctx;
|
||||||
@@ -8965,14 +8982,14 @@ hawk_val_t* hawk_rtx_evalcall (
|
|||||||
av = HAWK_RTX_STACK_ARG(rtx, i);
|
av = HAWK_RTX_STACK_ARG(rtx, i);
|
||||||
if (HAWK_RTX_GETVALTYPE(rtx, av) == HAWK_VAL_REF)
|
if (HAWK_RTX_GETVALTYPE(rtx, av) == HAWK_VAL_REF)
|
||||||
{
|
{
|
||||||
/* the argument still has the reference type.
|
/* the argument still has the reference type.
|
||||||
* this means, the argument has not been set.
|
* this means, the argument has not been set.
|
||||||
*
|
*
|
||||||
* function f1(&a, &b) { b = 20 }
|
* function f1(&a, &b) { b = 20 }
|
||||||
*
|
*
|
||||||
* since a is not set in f1, the value for a is still the pushed value which is a reference
|
* since a is not set in f1, the value for a is still the pushed
|
||||||
|
* value which is a reference.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ---- DO NOTHING ---- */
|
/* ---- DO NOTHING ---- */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -13847,8 +13864,9 @@ static HAWK_INLINE_ALWAYS hawk_val_t* eval_expression0_xstack (hawk_rtx_t* rtx,
|
|||||||
case HAWK_ASSOP_BXOR: tmp = eval_binop_bxor(rtx, lhs, rhs); break;
|
case HAWK_ASSOP_BXOR: tmp = eval_binop_bxor(rtx, lhs, rhs); break;
|
||||||
case HAWK_ASSOP_BOR: tmp = eval_binop_bor(rtx, lhs, rhs); break;
|
case HAWK_ASSOP_BOR: tmp = eval_binop_bor(rtx, lhs, rhs); break;
|
||||||
default:
|
default:
|
||||||
HAWK_ASSERT (!"should never happen - invalid assigment opcode detected");
|
HAWK_ASSERT(!"should never happen - invalid assigment opcode detected");
|
||||||
hawk_rtx_seterrbfmt(rtx, &f->nde->loc, HAWK_EINTERN, "internal error - invalid assignment(%d) opcode detected", (int)ass->opcode);
|
hawk_rtx_seterrbfmt(rtx, &f->nde->loc, HAWK_EINTERN, "internal error - invalid assignment(%d) opcode detected", (int)ass->opcode);
|
||||||
|
tmp = HAWK_NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -14122,6 +14140,7 @@ static hawk_oow_t push_arg_from_nde_xstack (hawk_rtx_t* rtx, const hawk_loc_t* c
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* hawk_rtx_evalcall_xstack — identical to hawk_rtx_evalcall but uses
|
/* hawk_rtx_evalcall_xstack — identical to hawk_rtx_evalcall but uses
|
||||||
* push_arg_from_nde_xstack when the caller supplies push_arg_from_nde as
|
* push_arg_from_nde_xstack when the caller supplies push_arg_from_nde as
|
||||||
* the argpusher, so that argument expressions are evaluated iteratively. */
|
* the argpusher, so that argument expressions are evaluated iteratively. */
|
||||||
@@ -14138,3 +14157,4 @@ hawk_val_t* hawk_rtx_evalcall_xstack (
|
|||||||
|
|
||||||
return hawk_rtx_evalcall(rtx, call, fun, argpusher, apdata, errhandler, eharg);
|
return hawk_rtx_evalcall(rtx, call, fun, argpusher, apdata, errhandler, eharg);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
+29
-27
@@ -231,7 +231,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
PUT_SRCSTR(hawk, HAWK_T(" "));
|
PUT_SRCSTR(hawk, HAWK_T(" "));
|
||||||
PRINT_EXPR(hawk, px->right);
|
PRINT_EXPR(hawk, px->right);
|
||||||
|
|
||||||
HAWK_ASSERT (px->right->next == HAWK_NULL);
|
HAWK_ASSERT(px->right->next == HAWK_NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,7 +241,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
|
|
||||||
PUT_SRCSTR(hawk, HAWK_T("("));
|
PUT_SRCSTR(hawk, HAWK_T("("));
|
||||||
PRINT_EXPR(hawk, px->left);
|
PRINT_EXPR(hawk, px->left);
|
||||||
HAWK_ASSERT (px->left->next == HAWK_NULL);
|
HAWK_ASSERT(px->left->next == HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR(hawk, HAWK_T(" "));
|
PUT_SRCSTR(hawk, HAWK_T(" "));
|
||||||
PUT_SRCSTR(hawk, binop_str[px->opcode][(hawk->opt.trait & HAWK_BLANKCONCAT)? 0: 1]);
|
PUT_SRCSTR(hawk, binop_str[px->opcode][(hawk->opt.trait & HAWK_BLANKCONCAT)? 0: 1]);
|
||||||
@@ -252,7 +252,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
PRINT_EXPR(hawk, px->right);
|
PRINT_EXPR(hawk, px->right);
|
||||||
if (px->right->type == HAWK_NDE_ASS)
|
if (px->right->type == HAWK_NDE_ASS)
|
||||||
PUT_SRCSTR(hawk, HAWK_T(")"));
|
PUT_SRCSTR(hawk, HAWK_T(")"));
|
||||||
HAWK_ASSERT (px->right->next == HAWK_NULL);
|
HAWK_ASSERT(px->right->next == HAWK_NULL);
|
||||||
PUT_SRCSTR(hawk, HAWK_T(")"));
|
PUT_SRCSTR(hawk, HAWK_T(")"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -260,7 +260,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
case HAWK_NDE_EXP_UNR:
|
case HAWK_NDE_EXP_UNR:
|
||||||
{
|
{
|
||||||
hawk_nde_exp_t* px = (hawk_nde_exp_t*)nde;
|
hawk_nde_exp_t* px = (hawk_nde_exp_t*)nde;
|
||||||
HAWK_ASSERT (px->right == HAWK_NULL);
|
HAWK_ASSERT(px->right == HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR(hawk, HAWK_T("("));
|
PUT_SRCSTR(hawk, HAWK_T("("));
|
||||||
PUT_SRCSTR(hawk, unrop_str[px->opcode]);
|
PUT_SRCSTR(hawk, unrop_str[px->opcode]);
|
||||||
@@ -274,7 +274,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
case HAWK_NDE_EXP_INCPRE:
|
case HAWK_NDE_EXP_INCPRE:
|
||||||
{
|
{
|
||||||
hawk_nde_exp_t* px = (hawk_nde_exp_t*)nde;
|
hawk_nde_exp_t* px = (hawk_nde_exp_t*)nde;
|
||||||
HAWK_ASSERT (px->right == HAWK_NULL);
|
HAWK_ASSERT(px->right == HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR(hawk, incop_str[px->opcode]);
|
PUT_SRCSTR(hawk, incop_str[px->opcode]);
|
||||||
PUT_SRCSTR(hawk, HAWK_T("("));
|
PUT_SRCSTR(hawk, HAWK_T("("));
|
||||||
@@ -286,7 +286,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
case HAWK_NDE_EXP_INCPST:
|
case HAWK_NDE_EXP_INCPST:
|
||||||
{
|
{
|
||||||
hawk_nde_exp_t* px = (hawk_nde_exp_t*)nde;
|
hawk_nde_exp_t* px = (hawk_nde_exp_t*)nde;
|
||||||
HAWK_ASSERT (px->right == HAWK_NULL);
|
HAWK_ASSERT(px->right == HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR(hawk, HAWK_T("("));
|
PUT_SRCSTR(hawk, HAWK_T("("));
|
||||||
PRINT_EXPR(hawk, px->left);
|
PRINT_EXPR(hawk, px->left);
|
||||||
@@ -659,14 +659,14 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
hawk_ooch_t tmp[HAWK_SIZEOF(hawk_int_t)*8+2];
|
hawk_ooch_t tmp[HAWK_SIZEOF(hawk_int_t)*8+2];
|
||||||
hawk_oow_t n;
|
hawk_oow_t n;
|
||||||
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
||||||
HAWK_ASSERT (px->id.idxa != (hawk_oow_t)-1);
|
HAWK_ASSERT(px->id.idxa != (hawk_oow_t)-1);
|
||||||
|
|
||||||
n = hawk_int_to_oocstr(px->id.idxa, 10, HAWK_NULL, tmp, HAWK_COUNTOF(tmp));
|
n = hawk_int_to_oocstr(px->id.idxa, 10, HAWK_NULL, tmp, HAWK_COUNTOF(tmp));
|
||||||
|
|
||||||
PUT_SRCSTR(hawk, HAWK_T("__p"));
|
PUT_SRCSTR(hawk, HAWK_T("__p"));
|
||||||
PUT_SRCSTRN(hawk, tmp, n);
|
PUT_SRCSTRN(hawk, tmp, n);
|
||||||
|
|
||||||
HAWK_ASSERT (px->idx == HAWK_NULL);
|
HAWK_ASSERT(px->idx == HAWK_NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,8 +674,8 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
{
|
{
|
||||||
hawk_oow_t n;
|
hawk_oow_t n;
|
||||||
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
||||||
HAWK_ASSERT (px->id.idxa != (hawk_oow_t)-1);
|
HAWK_ASSERT(px->id.idxa != (hawk_oow_t)-1);
|
||||||
HAWK_ASSERT (px->idx != HAWK_NULL);
|
HAWK_ASSERT(px->idx != HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR(hawk, HAWK_T("__p"));
|
PUT_SRCSTR(hawk, HAWK_T("__p"));
|
||||||
n = hawk_int_to_oocstr(px->id.idxa, 10, HAWK_NULL, hawk->tmp.fmt, HAWK_COUNTOF(hawk->tmp.fmt));
|
n = hawk_int_to_oocstr(px->id.idxa, 10, HAWK_NULL, hawk->tmp.fmt, HAWK_COUNTOF(hawk->tmp.fmt));
|
||||||
@@ -687,10 +687,10 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
case HAWK_NDE_NAMED:
|
case HAWK_NDE_NAMED:
|
||||||
{
|
{
|
||||||
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
||||||
/*HAWK_ASSERT (px->id.idxa == (hawk_oow_t)-1);
|
/*HAWK_ASSERT(px->id.idxa == (hawk_oow_t)-1);
|
||||||
* commented out the above assertion because
|
* commented out the above assertion because
|
||||||
* id.idxa field holds an index to the rtx->named_slots. */
|
* id.idxa field holds an index to the rtx->named_slots. */
|
||||||
HAWK_ASSERT (px->idx == HAWK_NULL);
|
HAWK_ASSERT(px->idx == HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
||||||
break;
|
break;
|
||||||
@@ -699,8 +699,10 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
case HAWK_NDE_NAMEDIDX:
|
case HAWK_NDE_NAMEDIDX:
|
||||||
{
|
{
|
||||||
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
|
||||||
HAWK_ASSERT (px->id.idxa == (hawk_oow_t)-1);
|
/*HAWK_ASSERT(px->id.idxa == (hawk_oow_t)-1);
|
||||||
HAWK_ASSERT (px->idx != HAWK_NULL);
|
* commented out the above assertion because
|
||||||
|
* id.idxa field holds an index to the rtx->named_slots. */
|
||||||
|
HAWK_ASSERT(px->idx != HAWK_NULL);
|
||||||
|
|
||||||
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
||||||
PRINT_EXPR_LIST_FOR_IDX(hawk, px->idx);
|
PRINT_EXPR_LIST_FOR_IDX(hawk, px->idx);
|
||||||
@@ -740,7 +742,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
||||||
}
|
}
|
||||||
HAWK_ASSERT (px->idx == HAWK_NULL);
|
HAWK_ASSERT(px->idx == HAWK_NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -777,7 +779,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
||||||
}
|
}
|
||||||
HAWK_ASSERT (px->idx != HAWK_NULL);
|
HAWK_ASSERT(px->idx != HAWK_NULL);
|
||||||
PRINT_EXPR_LIST_FOR_IDX(hawk, px->idx);
|
PRINT_EXPR_LIST_FOR_IDX(hawk, px->idx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -798,7 +800,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
||||||
}
|
}
|
||||||
HAWK_ASSERT (px->idx == HAWK_NULL);
|
HAWK_ASSERT(px->idx == HAWK_NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -817,7 +819,7 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
|
|||||||
{
|
{
|
||||||
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
|
||||||
}
|
}
|
||||||
HAWK_ASSERT (px->idx != HAWK_NULL);
|
HAWK_ASSERT(px->idx != HAWK_NULL);
|
||||||
PRINT_EXPR_LIST_FOR_IDX(hawk, px->idx);
|
PRINT_EXPR_LIST_FOR_IDX(hawk, px->idx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1027,7 +1029,7 @@ static int print_stmt (hawk_t* hawk, hawk_nde_t* p, int depth, int flags)
|
|||||||
PRINT_EXPR(hawk, px->test);
|
PRINT_EXPR(hawk, px->test);
|
||||||
PUT_SRCSTR(hawk, HAWK_T(") "));
|
PUT_SRCSTR(hawk, HAWK_T(") "));
|
||||||
|
|
||||||
HAWK_ASSERT (px->then_part != HAWK_NULL);
|
HAWK_ASSERT(px->then_part != HAWK_NULL);
|
||||||
xflags = STMT_FLAG_NO_LEAD_INDENT;
|
xflags = STMT_FLAG_NO_LEAD_INDENT;
|
||||||
if (!px->else_part) xflags |= STMT_FLAG_NO_ENDING_NL;
|
if (!px->else_part) xflags |= STMT_FLAG_NO_ENDING_NL;
|
||||||
xdepth = depth + (px->then_part->type != HAWK_NDE_BLK);
|
xdepth = depth + (px->then_part->type != HAWK_NDE_BLK);
|
||||||
@@ -1202,7 +1204,7 @@ static int print_stmt (hawk_t* hawk, hawk_nde_t* p, int depth, int flags)
|
|||||||
hawk_getkwname(hawk, HAWK_KWID_RETURN, &kw);
|
hawk_getkwname(hawk, HAWK_KWID_RETURN, &kw);
|
||||||
PUT_SRCSTRN(hawk, kw.ptr, kw.len);
|
PUT_SRCSTRN(hawk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR(hawk, HAWK_T(" "));
|
PUT_SRCSTR(hawk, HAWK_T(" "));
|
||||||
HAWK_ASSERT (((hawk_nde_return_t*)p)->val->next == HAWK_NULL);
|
HAWK_ASSERT(((hawk_nde_return_t*)p)->val->next == HAWK_NULL);
|
||||||
|
|
||||||
PRINT_EXPR(hawk, ((hawk_nde_return_t*)p)->val);
|
PRINT_EXPR(hawk, ((hawk_nde_return_t*)p)->val);
|
||||||
PUT_SRCSTR(hawk, HAWK_T(";"));
|
PUT_SRCSTR(hawk, HAWK_T(";"));
|
||||||
@@ -1225,7 +1227,7 @@ static int print_stmt (hawk_t* hawk, hawk_nde_t* p, int depth, int flags)
|
|||||||
hawk_getkwname(hawk, (px->abort? HAWK_KWID_XABORT: HAWK_KWID_EXIT), &kw);
|
hawk_getkwname(hawk, (px->abort? HAWK_KWID_XABORT: HAWK_KWID_EXIT), &kw);
|
||||||
PUT_SRCSTRN(hawk, kw.ptr, kw.len);
|
PUT_SRCSTRN(hawk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR(hawk, HAWK_T(" "));
|
PUT_SRCSTR(hawk, HAWK_T(" "));
|
||||||
HAWK_ASSERT (px->val->next == HAWK_NULL);
|
HAWK_ASSERT(px->val->next == HAWK_NULL);
|
||||||
PRINT_EXPR(hawk, px->val);
|
PRINT_EXPR(hawk, px->val);
|
||||||
PUT_SRCSTR(hawk, HAWK_T(";"));
|
PUT_SRCSTR(hawk, HAWK_T(";"));
|
||||||
}
|
}
|
||||||
@@ -1494,8 +1496,8 @@ void hawk_clrpt (hawk_t* hawk, hawk_nde_t* tree)
|
|||||||
case HAWK_NDE_EXP_BIN:
|
case HAWK_NDE_EXP_BIN:
|
||||||
{
|
{
|
||||||
hawk_nde_exp_t* px = (hawk_nde_exp_t*)p;
|
hawk_nde_exp_t* px = (hawk_nde_exp_t*)p;
|
||||||
HAWK_ASSERT (px->left->next == HAWK_NULL);
|
HAWK_ASSERT(px->left->next == HAWK_NULL);
|
||||||
HAWK_ASSERT (px->right->next == HAWK_NULL);
|
HAWK_ASSERT(px->right->next == HAWK_NULL);
|
||||||
|
|
||||||
hawk_clrpt(hawk, px->left);
|
hawk_clrpt(hawk, px->left);
|
||||||
hawk_clrpt(hawk, px->right);
|
hawk_clrpt(hawk, px->right);
|
||||||
@@ -1508,7 +1510,7 @@ void hawk_clrpt (hawk_t* hawk, hawk_nde_t* tree)
|
|||||||
case HAWK_NDE_EXP_INCPST:
|
case HAWK_NDE_EXP_INCPST:
|
||||||
{
|
{
|
||||||
hawk_nde_exp_t* px = (hawk_nde_exp_t*)p;
|
hawk_nde_exp_t* px = (hawk_nde_exp_t*)p;
|
||||||
HAWK_ASSERT (px->right == HAWK_NULL);
|
HAWK_ASSERT(px->right == HAWK_NULL);
|
||||||
hawk_clrpt(hawk, px->left);
|
hawk_clrpt(hawk, px->left);
|
||||||
hawk_freemem(hawk, p);
|
hawk_freemem(hawk, p);
|
||||||
break;
|
break;
|
||||||
@@ -1605,7 +1607,7 @@ void hawk_clrpt (hawk_t* hawk, hawk_nde_t* tree)
|
|||||||
case HAWK_NDE_ARG:
|
case HAWK_NDE_ARG:
|
||||||
{
|
{
|
||||||
hawk_nde_var_t* px = (hawk_nde_var_t*)p;
|
hawk_nde_var_t* px = (hawk_nde_var_t*)p;
|
||||||
HAWK_ASSERT (px->idx == HAWK_NULL);
|
HAWK_ASSERT(px->idx == HAWK_NULL);
|
||||||
if (px->id.name.ptr) hawk_freemem(hawk, px->id.name.ptr);
|
if (px->id.name.ptr) hawk_freemem(hawk, px->id.name.ptr);
|
||||||
hawk_freemem(hawk, p);
|
hawk_freemem(hawk, p);
|
||||||
break;
|
break;
|
||||||
@@ -1617,7 +1619,7 @@ void hawk_clrpt (hawk_t* hawk, hawk_nde_t* tree)
|
|||||||
case HAWK_NDE_ARGIDX:
|
case HAWK_NDE_ARGIDX:
|
||||||
{
|
{
|
||||||
hawk_nde_var_t* px = (hawk_nde_var_t*)p;
|
hawk_nde_var_t* px = (hawk_nde_var_t*)p;
|
||||||
HAWK_ASSERT (px->idx != HAWK_NULL);
|
HAWK_ASSERT(px->idx != HAWK_NULL);
|
||||||
hawk_clrpt(hawk, px->idx);
|
hawk_clrpt(hawk, px->idx);
|
||||||
if (px->id.name.ptr) hawk_freemem(hawk, px->id.name.ptr);
|
if (px->id.name.ptr) hawk_freemem(hawk, px->id.name.ptr);
|
||||||
hawk_freemem(hawk, p);
|
hawk_freemem(hawk, p);
|
||||||
@@ -1678,7 +1680,7 @@ void hawk_clrpt (hawk_t* hawk, hawk_nde_t* tree)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
HAWK_ASSERT (!"should never happen - invalid node type");
|
HAWK_ASSERT(!"should never happen - invalid node type");
|
||||||
hawk_freemem(hawk, p);
|
hawk_freemem(hawk, p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user