some cosmetic source code changes

This commit is contained in:
hyung-hwan 2020-03-25 05:56:11 +00:00
parent 404c382e33
commit 74180e1d8a
3 changed files with 84 additions and 82 deletions

View File

@ -5570,13 +5570,13 @@ static hawk_val_t* eval_binop_ma (hawk_rtx_t* run, hawk_nde_t* left, hawk_nde_t*
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 (run, left); lv = eval_expression(run, left);
if (lv == HAWK_NULL) return HAWK_NULL; if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
hawk_rtx_refupval (run, lv); hawk_rtx_refupval (run, lv);
rv = eval_expression0 (run, right); rv = eval_expression0(run, right);
if (rv == HAWK_NULL) if (HAWK_UNLIKELY(!rv))
{ {
hawk_rtx_refdownval (run, lv); hawk_rtx_refdownval (run, lv);
return HAWK_NULL; return HAWK_NULL;
@ -5584,7 +5584,7 @@ static hawk_val_t* eval_binop_ma (hawk_rtx_t* run, hawk_nde_t* left, hawk_nde_t*
hawk_rtx_refupval (run, rv); hawk_rtx_refupval (run, rv);
res = eval_binop_match0 (run, lv, rv, &left->loc, &right->loc, 1); res = eval_binop_match0(run, lv, rv, &left->loc, &right->loc, 1);
hawk_rtx_refdownval (run, rv); hawk_rtx_refdownval (run, rv);
hawk_rtx_refdownval (run, lv); hawk_rtx_refdownval (run, lv);
@ -5599,13 +5599,13 @@ static hawk_val_t* eval_binop_nm (hawk_rtx_t* run, hawk_nde_t* left, hawk_nde_t*
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 (run, left); lv = eval_expression(run, left);
if (lv == HAWK_NULL) return HAWK_NULL; if (HAWK_UNLIKELY(!lv)) return HAWK_NULL;
hawk_rtx_refupval (run, lv); hawk_rtx_refupval (run, lv);
rv = eval_expression0 (run, right); rv = eval_expression0(run, right);
if (rv == HAWK_NULL) if (HAWK_UNLIKELY(!rv))
{ {
hawk_rtx_refdownval (run, lv); hawk_rtx_refdownval (run, lv);
return HAWK_NULL; return HAWK_NULL;
@ -5613,7 +5613,7 @@ static hawk_val_t* eval_binop_nm (hawk_rtx_t* run, hawk_nde_t* left, hawk_nde_t*
hawk_rtx_refupval (run, rv); hawk_rtx_refupval (run, rv);
res = eval_binop_match0 (run, lv, rv, &left->loc, &right->loc, 0); res = eval_binop_match0(run, lv, rv, &left->loc, &right->loc, 0);
hawk_rtx_refdownval (run, rv); hawk_rtx_refdownval (run, rv);
hawk_rtx_refdownval (run, lv); hawk_rtx_refdownval (run, lv);
@ -5640,19 +5640,19 @@ static hawk_val_t* eval_unary (hawk_rtx_t* rtx, hawk_nde_t* nde)
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 (left == HAWK_NULL) return HAWK_NULL; if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
hawk_rtx_refupval (rtx, left); hawk_rtx_refupval (rtx, left);
switch (exp->opcode) switch (exp->opcode)
{ {
case HAWK_UNROP_MINUS: case HAWK_UNROP_MINUS:
n = hawk_rtx_valtonum (rtx, left, &l, &r); n = hawk_rtx_valtonum(rtx, left, &l, &r);
if (n <= -1) goto exit_func; if (HAWK_UNLIKELY(n <= -1)) goto exit_func;
res = (n == 0)? hawk_rtx_makeintval (rtx, -l): res = (n == 0)? hawk_rtx_makeintval(rtx, -l):
hawk_rtx_makefltval (rtx, -r); hawk_rtx_makefltval(rtx, -r);
break; break;
case HAWK_UNROP_LNOT: case HAWK_UNROP_LNOT:
@ -5660,38 +5660,37 @@ static hawk_val_t* eval_unary (hawk_rtx_t* rtx, hawk_nde_t* nde)
{ {
/* 0 if the string length is greater than 0. /* 0 if the string length is greater than 0.
* 1 if it's empty */ * 1 if it's empty */
res = hawk_rtx_makeintval ( res = hawk_rtx_makeintval(rtx, !(((hawk_val_str_t*)left)->val.len > 0));
rtx, !(((hawk_val_str_t*)left)->val.len > 0));
} }
else else
{ {
n = hawk_rtx_valtonum (rtx, left, &l, &r); n = hawk_rtx_valtonum(rtx, left, &l, &r);
if (n <= -1) goto exit_func; if (HAWK_UNLIKELY(n <= -1)) goto exit_func;
res = (n == 0)? hawk_rtx_makeintval (rtx, !l): res = (n == 0)? hawk_rtx_makeintval(rtx, !l):
hawk_rtx_makefltval (rtx, !r); hawk_rtx_makefltval(rtx, !r);
} }
break; break;
case HAWK_UNROP_BNOT:
n = hawk_rtx_valtoint (rtx, left, &l);
if (n <= -1) goto exit_func;
res = hawk_rtx_makeintval (rtx, ~l); case HAWK_UNROP_BNOT:
n = hawk_rtx_valtoint(rtx, left, &l);
if (HAWK_UNLIKELY(n <= -1)) goto exit_func;
res = hawk_rtx_makeintval(rtx, ~l);
break; break;
case HAWK_UNROP_PLUS: case HAWK_UNROP_PLUS:
n = hawk_rtx_valtonum (rtx, left, &l, &r); n = hawk_rtx_valtonum(rtx, left, &l, &r);
if (n <= -1) goto exit_func; if (HAWK_UNLIKELY(n <= -1)) goto exit_func;
res = (n == 0)? hawk_rtx_makeintval (rtx, l): res = (n == 0)? hawk_rtx_makeintval(rtx, l):
hawk_rtx_makefltval (rtx, r); hawk_rtx_makefltval(rtx, r);
break; break;
} }
exit_func: exit_func:
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
if (res == HAWK_NULL) ADJERR_LOC (rtx, &nde->loc); if (HAWK_UNLIKELY(!res)) ADJERR_LOC (rtx, &nde->loc);
return res; return res;
} }
@ -5735,19 +5734,19 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
} }
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 (left == HAWK_NULL) return HAWK_NULL; if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
hawk_rtx_refupval (rtx, left); hawk_rtx_refupval (rtx, left);
left_vtype = HAWK_RTX_GETVALTYPE (rtx, left); left_vtype = HAWK_RTX_GETVALTYPE(rtx, left);
switch (left_vtype) switch (left_vtype)
{ {
case HAWK_VAL_INT: case HAWK_VAL_INT:
{ {
hawk_int_t r = HAWK_RTX_GETINTFROMVAL (rtx, left); hawk_int_t r = HAWK_RTX_GETINTFROMVAL (rtx, left);
res = hawk_rtx_makeintval (rtx, r + inc_val_int); res = hawk_rtx_makeintval(rtx, r + inc_val_int);
if (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
@ -5759,8 +5758,8 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
case HAWK_VAL_FLT: case HAWK_VAL_FLT:
{ {
hawk_flt_t r = ((hawk_val_flt_t*)left)->val; hawk_flt_t r = ((hawk_val_flt_t*)left)->val;
res = hawk_rtx_makefltval (rtx, r + inc_val_flt); res = hawk_rtx_makefltval(rtx, r + inc_val_flt);
if (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
@ -5775,8 +5774,8 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
hawk_flt_t v2; hawk_flt_t v2;
int n; int n;
n = hawk_rtx_valtonum (rtx, left, &v1, &v2); n = hawk_rtx_valtonum(rtx, left, &v1, &v2);
if (n <= -1) if (HAWK_UNLIKELY(n <= -1))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
@ -5793,7 +5792,7 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
res = hawk_rtx_makefltval (rtx, v2 + inc_val_flt); res = hawk_rtx_makefltval (rtx, v2 + inc_val_flt);
} }
if (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
@ -5804,7 +5803,7 @@ static hawk_val_t* eval_incpre (hawk_rtx_t* rtx, hawk_nde_t* nde)
} }
} }
if (do_assignment (rtx, exp->left, res) == HAWK_NULL) if (HAWK_UNLIKELY(do_assignment(rtx, exp->left, res) == HAWK_NULL))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
return HAWK_NULL; return HAWK_NULL;
@ -5854,8 +5853,8 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
} }
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 (left == HAWK_NULL) return HAWK_NULL; if (HAWK_UNLIKELY(!left)) return HAWK_NULL;
hawk_rtx_refupval (rtx, left); hawk_rtx_refupval (rtx, left);
@ -5865,20 +5864,20 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
{ {
case HAWK_VAL_INT: case HAWK_VAL_INT:
{ {
hawk_int_t r = HAWK_RTX_GETINTFROMVAL (rtx, left); hawk_int_t r = HAWK_RTX_GETINTFROMVAL(rtx, left);
res = hawk_rtx_makeintval (rtx, r); res = hawk_rtx_makeintval(rtx, r);
if (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
res2 = hawk_rtx_makeintval (rtx, r + inc_val_int); res2 = hawk_rtx_makeintval(rtx, r + inc_val_int);
if (res2 == HAWK_NULL) if (HAWK_UNLIKELY(!res2))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
hawk_rtx_freeval (rtx, res, 1); hawk_rtx_freeval (rtx, res, HAWK_RTX_FREEVAL_CACHE);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
@ -5889,19 +5888,19 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
case HAWK_VAL_FLT: case HAWK_VAL_FLT:
{ {
hawk_flt_t r = ((hawk_val_flt_t*)left)->val; hawk_flt_t r = ((hawk_val_flt_t*)left)->val;
res = hawk_rtx_makefltval (rtx, r); res = hawk_rtx_makefltval(rtx, r);
if (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
res2 = hawk_rtx_makefltval (rtx, r + inc_val_flt); res2 = hawk_rtx_makefltval(rtx, r + inc_val_flt);
if (res2 == HAWK_NULL) if (HAWK_UNLIKELY(!res2))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
hawk_rtx_freeval (rtx, res, 1); hawk_rtx_freeval (rtx, res, HAWK_RTX_FREEVAL_CACHE);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
@ -5915,8 +5914,8 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
hawk_flt_t v2; hawk_flt_t v2;
int n; int n;
n = hawk_rtx_valtonum (rtx, left, &v1, &v2); n = hawk_rtx_valtonum(rtx, left, &v1, &v2);
if (n <= -1) if (HAWK_UNLIKELY(n <= -1))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
@ -5925,19 +5924,19 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
if (n == 0) if (n == 0)
{ {
res = hawk_rtx_makeintval (rtx, v1); res = hawk_rtx_makeintval(rtx, v1);
if (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
res2 = hawk_rtx_makeintval (rtx, v1 + inc_val_int); res2 = hawk_rtx_makeintval(rtx, v1 + inc_val_int);
if (res2 == HAWK_NULL) if (HAWK_UNLIKELY(!res2))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
hawk_rtx_freeval (rtx, res, 1); hawk_rtx_freeval (rtx, res, HAWK_RTX_FREEVAL_CACHE);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
@ -5945,19 +5944,19 @@ 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 (res == HAWK_NULL) if (HAWK_UNLIKELY(!res))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
res2 = hawk_rtx_makefltval (rtx, v2 + inc_val_flt); res2 = hawk_rtx_makefltval(rtx, v2 + inc_val_flt);
if (res2 == HAWK_NULL) if (HAWK_UNLIKELY(!res2))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
hawk_rtx_freeval (rtx, res, 1); hawk_rtx_freeval (rtx, res, HAWK_RTX_FREEVAL_CACHE);
ADJERR_LOC (rtx, &nde->loc); ADJERR_LOC (rtx, &nde->loc);
return HAWK_NULL; return HAWK_NULL;
} }
@ -5967,7 +5966,7 @@ static hawk_val_t* eval_incpst (hawk_rtx_t* rtx, hawk_nde_t* nde)
} }
} }
if (do_assignment (rtx, exp->left, res2) == HAWK_NULL) if (HAWK_UNLIKELY(do_assignment(rtx, exp->left, res2) == HAWK_NULL))
{ {
hawk_rtx_refdownval (rtx, left); hawk_rtx_refdownval (rtx, left);
return HAWK_NULL; return HAWK_NULL;

View File

@ -128,6 +128,10 @@ struct hawk_val_rchunk_t
#define HAWK_VAL_ONE HAWK_VTR_ONE #define HAWK_VAL_ONE HAWK_VTR_ONE
#define HAWK_VAL_NEGONE HAWK_VTR_NEGONE #define HAWK_VAL_NEGONE HAWK_VTR_NEGONE
#define HAWK_RTX_FREEVAL_CACHE (1 << 0)
#define HAWK_RTX_FREEVAL_GC_PRESERVE (1 << 1)
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
#endif #endif
@ -142,7 +146,7 @@ extern hawk_val_t* hawk_val_zls;
void hawk_rtx_freeval ( void hawk_rtx_freeval (
hawk_rtx_t* rtx, hawk_rtx_t* rtx,
hawk_val_t* val, hawk_val_t* val,
int cache int flags
); );
void hawk_rtx_freevalchunk ( void hawk_rtx_freevalchunk (

View File

@ -305,8 +305,7 @@ static void gc_free_unreachables (hawk_rtx_t* rtx, hawk_gch_t* list)
gch = list->gc_next; gch = list->gc_next;
while (gch != list) while (gch != list)
{ {
/* -9999 preserves the outer shell */ hawk_rtx_freeval (rtx, hawk_gch_to_val(gch), HAWK_RTX_FREEVAL_GC_PRESERVE);
hawk_rtx_freeval (rtx, hawk_gch_to_val(gch), -9999);
gch = gch->gc_next; gch = gch->gc_next;
} }
@ -318,7 +317,7 @@ static void gc_free_unreachables (hawk_rtx_t* rtx, hawk_gch_t* list)
#if defined(DEBUG_GC) #if defined(DEBUG_GC)
hawk_logbfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, "[GC] FREEING UNREACHABLE GCH %p gc_refs %zu v_refs %zu\n", gch, gch->gc_refs, hawk_gch_to_val(gch)->v_refs); hawk_logbfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, "[GC] FREEING UNREACHABLE GCH %p gc_refs %zu v_refs %zu\n", gch, gch->gc_refs, hawk_gch_to_val(gch)->v_refs);
#endif #endif
/* do what hawk_rtx_freeval() would do without -9999 */ /* do what hawk_rtx_freeval() would do without HAWK_RTX_FREEVAL_GC_PRESERVE */
rtx->gc.all_count--; rtx->gc.all_count--;
gc_unchain_gch (gch); gc_unchain_gch (gch);
hawk_rtx_freemem (rtx, gch); hawk_rtx_freemem (rtx, gch);
@ -996,8 +995,8 @@ hawk_val_t* hawk_rtx_makemapvalwithdata (hawk_rtx_t* rtx, hawk_val_map_data_t da
if (tmp == HAWK_NULL || hawk_rtx_setmapvalfld(rtx, map, p->key.ptr, p->key.len, tmp) == HAWK_NULL) if (tmp == HAWK_NULL || hawk_rtx_setmapvalfld(rtx, map, p->key.ptr, p->key.len, tmp) == HAWK_NULL)
{ {
if (tmp) hawk_rtx_freeval (rtx, tmp, 1); if (tmp) hawk_rtx_freeval (rtx, tmp, HAWK_RTX_FREEVAL_CACHE);
hawk_rtx_freeval (rtx, map, 1); hawk_rtx_freeval (rtx, map, HAWK_RTX_FREEVAL_CACHE);
return HAWK_NULL; return HAWK_NULL;
} }
} }
@ -1126,7 +1125,7 @@ int hawk_rtx_getintfromval (hawk_rtx_t* rtx, hawk_val_t* val)
return HAWK_RTX_GETINTFROMVAL(rtx, val); return HAWK_RTX_GETINTFROMVAL(rtx, val);
} }
void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int cache) void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int flags)
{ {
hawk_val_type_t vtype; hawk_val_type_t vtype;
@ -1164,7 +1163,7 @@ void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int cache)
case HAWK_VAL_STR: case HAWK_VAL_STR:
{ {
#if defined(HAWK_ENABLE_STR_CACHE) #if defined(HAWK_ENABLE_STR_CACHE)
if (cache) if (flags & HAWK_RTX_FREEVAL_CACHE)
{ {
hawk_val_str_t* v = (hawk_val_str_t*)val; hawk_val_str_t* v = (hawk_val_str_t*)val;
hawk_oow_t aligned_len; hawk_oow_t aligned_len;
@ -1189,7 +1188,7 @@ void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int cache)
case HAWK_VAL_MBS: case HAWK_VAL_MBS:
#if defined(HAWK_ENABLE_MBS_CACHE) #if defined(HAWK_ENABLE_MBS_CACHE)
if (cache) if (flags & HAWK_RTX_FREEVAL_CACHE)
{ {
hawk_val_mbs_t* v = (hawk_val_mbs_t*)val; hawk_val_mbs_t* v = (hawk_val_mbs_t*)val;
hawk_oow_t aligned_len; hawk_oow_t aligned_len;
@ -1233,11 +1232,11 @@ void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int cache)
#if defined(HAWK_ENABLE_GC) #if defined(HAWK_ENABLE_GC)
#if defined(DEBUG_GC) #if defined(DEBUG_GC)
hawk_logbfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, "[GC] FREEING GCH %p VAL %p - flags %d\n", hawk_val_to_gch(val), val, cache); hawk_logbfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, "[GC] FREEING GCH %p VAL %p - flags %d\n", hawk_val_to_gch(val), val, flags);
#endif #endif
hawk_map_fini (((hawk_val_map_t*)val)->map); hawk_map_fini (((hawk_val_map_t*)val)->map);
if (cache != -9999) if (!(flags & HAWK_RTX_FREEVAL_GC_PRESERVE))
{ {
rtx->gc.all_count--; rtx->gc.all_count--;
gc_unchain_val (val); gc_unchain_val (val);
@ -1250,7 +1249,7 @@ void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int cache)
break; break;
case HAWK_VAL_REF: case HAWK_VAL_REF:
if (cache && rtx->rcache_count < HAWK_COUNTOF(rtx->rcache)) if ((flags & HAWK_RTX_FREEVAL_CACHE) && rtx->rcache_count < HAWK_COUNTOF(rtx->rcache))
{ {
rtx->rcache[rtx->rcache_count++] = (hawk_val_ref_t*)val; rtx->rcache[rtx->rcache_count++] = (hawk_val_ref_t*)val;
} }
@ -1289,7 +1288,7 @@ void hawk_rtx_refdownval (hawk_rtx_t* rtx, hawk_val_t* val)
val->v_refs--; val->v_refs--;
if (val->v_refs <= 0) if (val->v_refs <= 0)
{ {
hawk_rtx_freeval(rtx, val, 1); hawk_rtx_freeval (rtx, val, HAWK_RTX_FREEVAL_CACHE);
} }
} }
} }