*** empty log message ***
This commit is contained in:
parent
fa80f5dade
commit
30040f4691
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.61 2006-04-19 04:18:43 bacon Exp $
|
* $Id: run.c,v 1.62 2006-04-19 16:09:51 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -791,13 +791,8 @@ static xp_awk_val_t* __do_assignment (
|
|||||||
STACK_ARG(awk,var->id.idxa) = val;
|
STACK_ARG(awk,var->id.idxa) = val;
|
||||||
xp_awk_refupval (val);
|
xp_awk_refupval (val);
|
||||||
}
|
}
|
||||||
else if (var->type == XP_AWK_NDE_NAMEDIDX)
|
else if (var->type == XP_AWK_NDE_NAMEDIDX ||
|
||||||
{
|
var->type == XP_AWK_NDE_GLOBALIDX ||
|
||||||
/* TODO: */
|
|
||||||
xp_printf (XP_TEXT("XP_AWK_NDE_NAMEIDX not implemented\n"));
|
|
||||||
PANIC (awk, XP_AWK_EINTERNAL);
|
|
||||||
}
|
|
||||||
else if (var->type == XP_AWK_NDE_GLOBALIDX ||
|
|
||||||
var->type == XP_AWK_NDE_LOCALIDX ||
|
var->type == XP_AWK_NDE_LOCALIDX ||
|
||||||
var->type == XP_AWK_NDE_ARGIDX)
|
var->type == XP_AWK_NDE_ARGIDX)
|
||||||
{
|
{
|
||||||
@ -828,15 +823,25 @@ static xp_awk_val_t* __do_assignment_map (
|
|||||||
int n;
|
int n;
|
||||||
|
|
||||||
xp_assert (
|
xp_assert (
|
||||||
(var->type == XP_AWK_NDE_GLOBALIDX ||
|
(var->type == XP_AWK_NDE_NAMEDIDX ||
|
||||||
|
var->type == XP_AWK_NDE_GLOBALIDX ||
|
||||||
var->type == XP_AWK_NDE_LOCALIDX ||
|
var->type == XP_AWK_NDE_LOCALIDX ||
|
||||||
var->type == XP_AWK_NDE_ARGIDX) && var->idx != XP_NULL);
|
var->type == XP_AWK_NDE_ARGIDX) && var->idx != XP_NULL);
|
||||||
|
|
||||||
|
if (var->type == XP_AWK_NDE_NAMEDIDX)
|
||||||
|
{
|
||||||
|
xp_awk_pair_t* pair;
|
||||||
|
pair = xp_awk_map_get (&awk->run.named, var->id.name);
|
||||||
|
map = (pair == XP_NULL)? xp_awk_val_nil: pair->val;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
map = (var->type == XP_AWK_NDE_GLOBALIDX)?
|
map = (var->type == XP_AWK_NDE_GLOBALIDX)?
|
||||||
(xp_awk_val_map_t*)STACK_GLOBAL(awk,var->id.idxa):
|
(xp_awk_val_map_t*)STACK_GLOBAL(awk,var->id.idxa):
|
||||||
(var->type == XP_AWK_NDE_LOCALIDX)?
|
(var->type == XP_AWK_NDE_LOCALIDX)?
|
||||||
(xp_awk_val_map_t*)STACK_LOCAL(awk,var->id.idxa):
|
(xp_awk_val_map_t*)STACK_LOCAL(awk,var->id.idxa):
|
||||||
(xp_awk_val_map_t*)STACK_ARG(awk,var->id.idxa);
|
(xp_awk_val_map_t*)STACK_ARG(awk,var->id.idxa);
|
||||||
|
}
|
||||||
|
|
||||||
if (map->type == XP_AWK_VAL_NIL)
|
if (map->type == XP_AWK_VAL_NIL)
|
||||||
{
|
{
|
||||||
@ -846,16 +851,37 @@ static xp_awk_val_t* __do_assignment_map (
|
|||||||
tmp = xp_awk_makemapval (awk);
|
tmp = xp_awk_makemapval (awk);
|
||||||
if (tmp == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (tmp == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
/* decrease the reference count of the previous value -
|
if (var->type == XP_AWK_NDE_NAMEDIDX)
|
||||||
|
{
|
||||||
|
/* doesn't have to decrease the reference count
|
||||||
|
* of the previous value here as it is done by
|
||||||
|
* xp_awk_map_put */
|
||||||
|
if (xp_awk_map_put (
|
||||||
|
&awk->run.named, var->id.name, tmp) == XP_NULL)
|
||||||
|
{
|
||||||
|
xp_awk_refupval (tmp);
|
||||||
|
xp_awk_refdownval (awk, tmp);
|
||||||
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (var->type == XP_AWK_NDE_GLOBALIDX)
|
||||||
|
{
|
||||||
|
/* decrease the reference count of the previous value.
|
||||||
* in fact, this is not necessary as map is always
|
* in fact, this is not necessary as map is always
|
||||||
* xp_awk_val_nil here. */
|
* xp_awk_val_nil here. */
|
||||||
xp_awk_refdownval (awk, (xp_awk_val_t*)map);
|
xp_awk_refdownval (awk, (xp_awk_val_t*)map);
|
||||||
|
|
||||||
if (var->type == XP_AWK_NDE_GLOBALIDX)
|
|
||||||
STACK_GLOBAL(awk,var->id.idxa) = tmp;
|
STACK_GLOBAL(awk,var->id.idxa) = tmp;
|
||||||
|
}
|
||||||
else if (var->type == XP_AWK_NDE_LOCALIDX)
|
else if (var->type == XP_AWK_NDE_LOCALIDX)
|
||||||
|
{
|
||||||
|
xp_awk_refdownval (awk, (xp_awk_val_t*)map);
|
||||||
STACK_LOCAL(awk,var->id.idxa) = tmp;
|
STACK_LOCAL(awk,var->id.idxa) = tmp;
|
||||||
else STACK_ARG(awk,var->id.idxa) = tmp;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xp_awk_refdownval (awk, (xp_awk_val_t*)map);
|
||||||
|
STACK_ARG(awk,var->id.idxa) = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
xp_awk_refupval (tmp);
|
xp_awk_refupval (tmp);
|
||||||
map = (xp_awk_val_map_t*) tmp;
|
map = (xp_awk_val_map_t*) tmp;
|
||||||
@ -1574,8 +1600,11 @@ static xp_awk_val_t* __eval_binop_exp (
|
|||||||
}
|
}
|
||||||
else if (n3 == 1)
|
else if (n3 == 1)
|
||||||
{
|
{
|
||||||
res = xp_awk_makerealval (
|
/*res = xp_awk_makerealval (
|
||||||
awk, pow((xp_real_t)r1,(xp_real_t)l2));
|
awk, pow((xp_real_t)r1,(xp_real_t)l2));*/
|
||||||
|
xp_real_t v = 1.0;
|
||||||
|
while (l2-- > 0) v *= r1;
|
||||||
|
res = xp_awk_makerealval (awk, v);
|
||||||
}
|
}
|
||||||
else if (n3 == 2)
|
else if (n3 == 2)
|
||||||
{
|
{
|
||||||
@ -2180,12 +2209,6 @@ static xp_awk_val_t* __eval_arg (xp_awk_t* awk, xp_awk_nde_t* nde)
|
|||||||
return STACK_ARG(awk,tgt->id.idxa);
|
return STACK_ARG(awk,tgt->id.idxa);
|
||||||
}
|
}
|
||||||
|
|
||||||
static xp_awk_val_t* __eval_namedidx (xp_awk_t* awk, xp_awk_nde_t* nde)
|
|
||||||
{
|
|
||||||
/* TODO: */
|
|
||||||
return XP_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static xp_awk_val_t* __eval_indexed (
|
static xp_awk_val_t* __eval_indexed (
|
||||||
xp_awk_t* awk, xp_awk_nde_var_t* nde, xp_awk_val_map_t* map)
|
xp_awk_t* awk, xp_awk_nde_var_t* nde, xp_awk_val_map_t* map)
|
||||||
{
|
{
|
||||||
@ -2194,6 +2217,7 @@ static xp_awk_val_t* __eval_indexed (
|
|||||||
xp_awk_nde_t* tmp;
|
xp_awk_nde_t* tmp;
|
||||||
xp_char_t* str;
|
xp_char_t* str;
|
||||||
|
|
||||||
|
/* TODO: should it be an error? should it return nil? */
|
||||||
if (map->type != XP_AWK_VAL_MAP)
|
if (map->type != XP_AWK_VAL_MAP)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_ENOTINDEXABLE);
|
PANIC (awk, XP_AWK_ENOTINDEXABLE);
|
||||||
@ -2236,6 +2260,16 @@ static xp_awk_val_t* __eval_indexed (
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static xp_awk_val_t* __eval_namedidx (xp_awk_t* awk, xp_awk_nde_t* nde)
|
||||||
|
{
|
||||||
|
xp_awk_nde_var_t* tgt = (xp_awk_nde_var_t*)nde;
|
||||||
|
xp_awk_pair_t* pair;
|
||||||
|
|
||||||
|
pair = xp_awk_map_get (&awk->run.named, tgt->id.name);
|
||||||
|
return __eval_indexed (awk, tgt,
|
||||||
|
(pair == XP_NULL)? xp_awk_val_nil: pair->val);
|
||||||
|
}
|
||||||
|
|
||||||
static xp_awk_val_t* __eval_globalidx (xp_awk_t* awk, xp_awk_nde_t* nde)
|
static xp_awk_val_t* __eval_globalidx (xp_awk_t* awk, xp_awk_nde_t* nde)
|
||||||
{
|
{
|
||||||
xp_awk_nde_var_t* tgt = (xp_awk_nde_var_t*)nde;
|
xp_awk_nde_var_t* tgt = (xp_awk_nde_var_t*)nde;
|
||||||
|
Loading…
Reference in New Issue
Block a user