*** empty log message ***
This commit is contained in:
parent
b145e38f97
commit
6a1b12bb44
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.99 2006-05-02 15:06:01 bacon Exp $
|
* $Id: parse.c,v 1.100 2006-05-02 15:43:10 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -1922,7 +1922,7 @@ static xp_awk_nde_t* __parse_hashidx (xp_awk_t* awk, xp_char_t* name)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tmp->next = last;
|
last->next = tmp;
|
||||||
last = tmp;
|
last = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.81 2006-05-02 15:06:01 bacon Exp $
|
* $Id: run.c,v 1.82 2006-05-02 15:43:10 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -1086,7 +1086,7 @@ static xp_awk_val_t* __do_assignment_map (
|
|||||||
{
|
{
|
||||||
xp_awk_val_map_t* map;
|
xp_awk_val_map_t* map;
|
||||||
xp_awk_nde_t* nde;
|
xp_awk_nde_t* nde;
|
||||||
xp_char_t* str;
|
xp_str_t idxstr;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
xp_assert (
|
xp_assert (
|
||||||
@ -1161,16 +1161,18 @@ static xp_awk_val_t* __do_assignment_map (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* compose a map index */
|
/* compose a map index */
|
||||||
nde = var->idx;
|
if (xp_str_open (&idxstr, 256) == XP_NULL) PANIC (run, XP_AWK_ENOMEM);
|
||||||
/* TODO: while (nde != XP_NULL) -> multidimensional array index.... */
|
|
||||||
|
for (nde = var->idx; nde != XP_NULL; nde = nde->next)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* tmp;
|
xp_awk_val_t* tmp;
|
||||||
|
xp_char_t* str;
|
||||||
int errnum;
|
int errnum;
|
||||||
|
|
||||||
tmp = __eval_expression (run, nde);
|
tmp = __eval_expression (run, nde);
|
||||||
if (tmp == XP_NULL)
|
if (tmp == XP_NULL)
|
||||||
{
|
{
|
||||||
/* TODO: clearing previous idx values... */
|
xp_str_close (&idxstr);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1180,24 +1182,41 @@ static xp_awk_val_t* __do_assignment_map (
|
|||||||
if (str == XP_NULL)
|
if (str == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_refdownval (run, tmp);
|
xp_awk_refdownval (run, tmp);
|
||||||
|
xp_str_close (&idxstr);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_awk_refdownval (run, tmp);
|
xp_awk_refdownval (run, tmp);
|
||||||
/* TODO: nde = nde->next; */
|
|
||||||
|
/* TODO: configurable index seperator */
|
||||||
|
if (XP_STR_LEN(&idxstr) > 0 &&
|
||||||
|
xp_str_cat (&idxstr, XP_TEXT(",")) == (xp_size_t)-1)
|
||||||
|
{
|
||||||
|
xp_free (str);
|
||||||
|
xp_str_close (&idxstr);
|
||||||
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xp_str_cat (&idxstr, str) == (xp_size_t)-1)
|
||||||
|
{
|
||||||
|
xp_free (str);
|
||||||
|
xp_str_close (&idxstr);
|
||||||
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
xp_free (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
xp_printf (XP_TEXT("**** index str=>%s, map->ref=%d, map->type=%d\n"), str, map->ref, map->type);
|
xp_printf (XP_TEXT("**** index str=>%s, map->ref=%d, map->type=%d\n"), str, map->ref, map->type);
|
||||||
*/
|
*/
|
||||||
n = xp_awk_map_putx (map->map, str, val, XP_NULL);
|
n = xp_awk_map_putx (map->map, XP_STR_BUF(&idxstr), val, XP_NULL);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
xp_str_close (&idxstr);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
xp_str_close (&idxstr);
|
||||||
xp_awk_refupval (val);
|
xp_awk_refupval (val);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -2681,7 +2700,7 @@ static xp_awk_val_t* __eval_indexed (
|
|||||||
xp_awk_val_t* idx, *res;
|
xp_awk_val_t* idx, *res;
|
||||||
xp_awk_pair_t* pair;
|
xp_awk_pair_t* pair;
|
||||||
xp_awk_nde_t* tmp;
|
xp_awk_nde_t* tmp;
|
||||||
xp_char_t* str;
|
xp_str_t idxstr;
|
||||||
|
|
||||||
/* TODO: should it be an error? should it return nil? */
|
/* TODO: should it be an error? should it return nil? */
|
||||||
if (map->type != XP_AWK_VAL_MAP)
|
if (map->type != XP_AWK_VAL_MAP)
|
||||||
@ -2691,15 +2710,20 @@ static xp_awk_val_t* __eval_indexed (
|
|||||||
|
|
||||||
xp_assert (nde->idx != XP_NULL);
|
xp_assert (nde->idx != XP_NULL);
|
||||||
|
|
||||||
tmp = nde->idx;
|
/* compose an array/hash index */
|
||||||
/* TODO: multidimensional array
|
if (xp_str_open (&idxstr, 256) == XP_NULL) PANIC (run, XP_AWK_ENOMEM);
|
||||||
while (tmp != XP_NULL)
|
|
||||||
*/
|
for (tmp = nde->idx; tmp != XP_NULL; tmp = tmp->next)
|
||||||
{
|
{
|
||||||
|
xp_char_t* str;
|
||||||
int errnum;
|
int errnum;
|
||||||
|
|
||||||
idx = __eval_expression (run, tmp);
|
idx = __eval_expression (run, tmp);
|
||||||
if (idx == XP_NULL) return XP_NULL;
|
if (idx == XP_NULL)
|
||||||
|
{
|
||||||
|
xp_str_close (&idxstr);
|
||||||
|
return XP_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
xp_awk_refupval (idx);
|
xp_awk_refupval (idx);
|
||||||
|
|
||||||
@ -2707,20 +2731,37 @@ static xp_awk_val_t* __eval_indexed (
|
|||||||
if (str == XP_NULL)
|
if (str == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_refdownval (run, idx);
|
xp_awk_refdownval (run, idx);
|
||||||
|
xp_str_close (&idxstr);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_awk_refdownval (run, idx);
|
xp_awk_refdownval (run, idx);
|
||||||
/* TODO:
|
|
||||||
tmp = tmp->next;
|
/* TODO: configurable index seperator */
|
||||||
*/
|
if (XP_STR_LEN(&idxstr) > 0 &&
|
||||||
|
xp_str_cat (&idxstr, XP_TEXT(",")) == (xp_size_t)-1)
|
||||||
|
{
|
||||||
|
xp_free (str);
|
||||||
|
xp_str_close (&idxstr);
|
||||||
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xp_str_cat (&idxstr, str) == (xp_size_t)-1)
|
||||||
|
{
|
||||||
|
xp_free (str);
|
||||||
|
xp_str_close (&idxstr);
|
||||||
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
xp_free (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: check this out........ */
|
/* TODO: check this out........ */
|
||||||
pair = xp_awk_map_get (((xp_awk_val_map_t*)map)->map, str);
|
pair = xp_awk_map_get (
|
||||||
|
((xp_awk_val_map_t*)map)->map, XP_STR_BUF(&idxstr));
|
||||||
res = (pair == XP_NULL)? xp_awk_val_nil: (xp_awk_val_t*)pair->val;
|
res = (pair == XP_NULL)? xp_awk_val_nil: (xp_awk_val_t*)pair->val;
|
||||||
|
|
||||||
xp_free (str);
|
xp_str_close (&idxstr);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tree.c,v 1.45 2006-04-30 17:10:30 bacon Exp $
|
* $Id: tree.c,v 1.46 2006-05-02 15:43:11 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -203,7 +203,7 @@ static int __print_expression (xp_awk_nde_t* nde)
|
|||||||
xp_printf (XP_TEXT("__arg%lu["),
|
xp_printf (XP_TEXT("__arg%lu["),
|
||||||
(unsigned long)((xp_awk_nde_var_t*)nde)->id.idxa);
|
(unsigned long)((xp_awk_nde_var_t*)nde)->id.idxa);
|
||||||
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
||||||
__print_expression (((xp_awk_nde_var_t*)nde)->idx);
|
__print_expression_list (((xp_awk_nde_var_t*)nde)->idx);
|
||||||
xp_printf (XP_TEXT("]"));
|
xp_printf (XP_TEXT("]"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -217,7 +217,7 @@ static int __print_expression (xp_awk_nde_t* nde)
|
|||||||
xp_assert (((xp_awk_nde_var_t*)nde)->id.idxa == (xp_size_t)-1);
|
xp_assert (((xp_awk_nde_var_t*)nde)->id.idxa == (xp_size_t)-1);
|
||||||
xp_printf (XP_TEXT("%s["), ((xp_awk_nde_var_t*)nde)->id.name);
|
xp_printf (XP_TEXT("%s["), ((xp_awk_nde_var_t*)nde)->id.name);
|
||||||
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
||||||
__print_expression (((xp_awk_nde_var_t*)nde)->idx);
|
__print_expression_list (((xp_awk_nde_var_t*)nde)->idx);
|
||||||
xp_printf (XP_TEXT("]"));
|
xp_printf (XP_TEXT("]"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ static int __print_expression (xp_awk_nde_t* nde)
|
|||||||
xp_printf (XP_TEXT("%s["), ((xp_awk_nde_var_t*)nde)->id.name);
|
xp_printf (XP_TEXT("%s["), ((xp_awk_nde_var_t*)nde)->id.name);
|
||||||
}
|
}
|
||||||
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
||||||
__print_expression (((xp_awk_nde_var_t*)nde)->idx);
|
__print_expression_list (((xp_awk_nde_var_t*)nde)->idx);
|
||||||
xp_printf (XP_TEXT("]"));
|
xp_printf (XP_TEXT("]"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -273,7 +273,7 @@ static int __print_expression (xp_awk_nde_t* nde)
|
|||||||
xp_printf (XP_TEXT("%s["), ((xp_awk_nde_var_t*)nde)->id.name);
|
xp_printf (XP_TEXT("%s["), ((xp_awk_nde_var_t*)nde)->id.name);
|
||||||
}
|
}
|
||||||
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
xp_assert (((xp_awk_nde_var_t*)nde)->idx != XP_NULL);
|
||||||
__print_expression (((xp_awk_nde_var_t*)nde)->idx);
|
__print_expression_list (((xp_awk_nde_var_t*)nde)->idx);
|
||||||
xp_printf (XP_TEXT("]"));
|
xp_printf (XP_TEXT("]"));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user