*** empty log message ***
This commit is contained in:
parent
4cf885ab9a
commit
56305c8842
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.151 2006-08-03 05:05:47 bacon Exp $
|
* $Id: parse.c,v 1.152 2006-08-03 06:06:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -565,7 +565,8 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
if (awk->opt.parse & XP_AWK_UNIQUE)
|
if (awk->opt.parse & XP_AWK_UNIQUE)
|
||||||
{
|
{
|
||||||
/* check if it coincides to be a global variable name */
|
/* check if it coincides to be a global variable name */
|
||||||
if (xp_awk_tab_find(&awk->parse.globals, name, 0) != (xp_size_t)-1)
|
if (xp_awk_tab_find (
|
||||||
|
&awk->parse.globals, 0, name, name_len) != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_EDUPNAME);
|
PANIC (awk, XP_AWK_EDUPNAME);
|
||||||
}
|
}
|
||||||
@ -646,7 +647,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check if a parameter conflicts with other parameters */
|
/* check if a parameter conflicts with other parameters */
|
||||||
if (xp_awk_tab_find(&awk->parse.params, param, 0) != (xp_size_t)-1)
|
if (xp_awk_tab_find (&awk->parse.params, 0, param, param_len) != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
xp_free (name_dup);
|
xp_free (name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
@ -654,7 +655,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* push the parameter to the parameter list */
|
/* push the parameter to the parameter list */
|
||||||
if (xp_awk_tab_add(&awk->parse.params, param) == (xp_size_t)-1)
|
if (xp_awk_tab_add (&awk->parse.params, param, param_len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
xp_free (name_dup);
|
xp_free (name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
@ -971,12 +972,12 @@ static xp_awk_t* __add_global (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check if it conflicts with other global variable names */
|
/* check if it conflicts with other global variable names */
|
||||||
if (xp_awk_tab_find(&awk->parse.globals, name, 0) != (xp_size_t)-1)
|
if (xp_awk_tab_find (&awk->parse.globals, 0, name, len) != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_EDUPVAR);
|
PANIC (awk, XP_AWK_EDUPVAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xp_awk_tab_add(&awk->parse.globals, name) == (xp_size_t)-1)
|
if (xp_awk_tab_add (&awk->parse.globals, name, len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
@ -1043,19 +1044,20 @@ static xp_awk_t* __collect_locals (xp_awk_t* awk, xp_size_t nlocals)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check if it conflicts with a paremeter name */
|
/* check if it conflicts with a paremeter name */
|
||||||
if (xp_awk_tab_find(&awk->parse.params, local, 0) != (xp_size_t)-1)
|
if (xp_awk_tab_find (&awk->parse.params, 0, local, local_len) != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_EDUPNAME);
|
PANIC (awk, XP_AWK_EDUPNAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if it conflicts with other local variable names */
|
/* check if it conflicts with other local variable names */
|
||||||
if (xp_awk_tab_find(&awk->parse.locals, local,
|
if (xp_awk_tab_find (&awk->parse.locals,
|
||||||
((awk->opt.parse & XP_AWK_SHADING)? nlocals: 0)) != (xp_size_t)-1)
|
((awk->opt.parse & XP_AWK_SHADING)? nlocals: 0),
|
||||||
|
local, local_len) != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_EDUPVAR);
|
PANIC (awk, XP_AWK_EDUPVAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xp_awk_tab_add(&awk->parse.locals, local) == (xp_size_t)-1)
|
if (xp_awk_tab_add (&awk->parse.locals, local, local_len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
@ -2242,7 +2244,8 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search the parameter name list */
|
/* search the parameter name list */
|
||||||
idxa = xp_awk_tab_find(&awk->parse.params, name_dup, 0);
|
idxa = xp_awk_tab_find (
|
||||||
|
&awk->parse.params, 0, name_dup, name_len);
|
||||||
if (idxa != (xp_size_t)-1)
|
if (idxa != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
nde->type = XP_AWK_NDE_ARG;
|
nde->type = XP_AWK_NDE_ARG;
|
||||||
@ -2257,7 +2260,8 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search the local variable list */
|
/* search the local variable list */
|
||||||
idxa = xp_awk_tab_rrfind(&awk->parse.locals, name_dup, 0);
|
idxa = xp_awk_tab_rrfind (
|
||||||
|
&awk->parse.locals, 0, name_dup, name_len);
|
||||||
if (idxa != (xp_size_t)-1)
|
if (idxa != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
nde->type = XP_AWK_NDE_LOCAL;
|
nde->type = XP_AWK_NDE_LOCAL;
|
||||||
@ -2272,7 +2276,8 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search the global variable list */
|
/* search the global variable list */
|
||||||
idxa = xp_awk_tab_rrfind(&awk->parse.globals, name_dup, 0);
|
idxa = xp_awk_tab_rrfind (
|
||||||
|
&awk->parse.globals, 0, name_dup, name_len);
|
||||||
if (idxa != (xp_size_t)-1)
|
if (idxa != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
nde->type = XP_AWK_NDE_GLOBAL;
|
nde->type = XP_AWK_NDE_GLOBAL;
|
||||||
@ -2365,7 +2370,7 @@ static xp_awk_nde_t* __parse_hashidx (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search the parameter name list */
|
/* search the parameter name list */
|
||||||
idxa = xp_awk_tab_find (&awk->parse.params, name, 0);
|
idxa = xp_awk_tab_find (&awk->parse.params, 0, name, name_len);
|
||||||
if (idxa != (xp_size_t)-1)
|
if (idxa != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
nde->type = XP_AWK_NDE_ARGIDX;
|
nde->type = XP_AWK_NDE_ARGIDX;
|
||||||
@ -2380,7 +2385,7 @@ static xp_awk_nde_t* __parse_hashidx (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search the local variable list */
|
/* search the local variable list */
|
||||||
idxa = xp_awk_tab_rrfind(&awk->parse.locals, name, 0);
|
idxa = xp_awk_tab_rrfind(&awk->parse.locals, 0, name, name_len);
|
||||||
if (idxa != (xp_size_t)-1)
|
if (idxa != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
nde->type = XP_AWK_NDE_LOCALIDX;
|
nde->type = XP_AWK_NDE_LOCALIDX;
|
||||||
@ -2395,7 +2400,7 @@ static xp_awk_nde_t* __parse_hashidx (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* search the global variable list */
|
/* search the global variable list */
|
||||||
idxa = xp_awk_tab_rrfind(&awk->parse.globals, name, 0);
|
idxa = xp_awk_tab_rrfind(&awk->parse.globals, 0, name, name_len);
|
||||||
if (idxa != (xp_size_t)-1)
|
if (idxa != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
nde->type = XP_AWK_NDE_GLOBALIDX;
|
nde->type = XP_AWK_NDE_GLOBALIDX;
|
||||||
@ -2465,7 +2470,8 @@ static xp_awk_nde_t* __parse_fncall (
|
|||||||
{
|
{
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
if (head != XP_NULL) xp_awk_clrpt (head);
|
if (head != XP_NULL)
|
||||||
|
xp_awk_clrpt (head);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tab.c,v 1.9 2006-08-03 05:05:47 bacon Exp $
|
* $Id: tab.c,v 1.10 2006-08-03 06:06:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -52,7 +52,7 @@ xp_size_t xp_awk_tab_getcapa (xp_awk_tab_t* tab)
|
|||||||
|
|
||||||
xp_awk_tab_t* xp_awk_tab_setcapa (xp_awk_tab_t* tab, xp_size_t capa)
|
xp_awk_tab_t* xp_awk_tab_setcapa (xp_awk_tab_t* tab, xp_size_t capa)
|
||||||
{
|
{
|
||||||
xp_char_t** tmp;
|
void* tmp;
|
||||||
|
|
||||||
if (tab->size > capa)
|
if (tab->size > capa)
|
||||||
{
|
{
|
||||||
@ -62,8 +62,7 @@ xp_awk_tab_t* xp_awk_tab_setcapa (xp_awk_tab_t* tab, xp_size_t capa)
|
|||||||
|
|
||||||
if (capa > 0)
|
if (capa > 0)
|
||||||
{
|
{
|
||||||
tmp = (xp_char_t**)xp_realloc (
|
tmp = xp_realloc (tab->buf, xp_sizeof(*tab->buf) * capa);
|
||||||
tab->buf, xp_sizeof(xp_char_t*) * capa);
|
|
||||||
if (tmp == XP_NULL) return XP_NULL;
|
if (tmp == XP_NULL) return XP_NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -86,8 +85,9 @@ void xp_awk_tab_clear (xp_awk_tab_t* tab)
|
|||||||
|
|
||||||
for (i = 0; i < tab->size; i++)
|
for (i = 0; i < tab->size; i++)
|
||||||
{
|
{
|
||||||
xp_free (tab->buf[i]);
|
xp_free (tab->buf[i].name);
|
||||||
tab->buf[i] = XP_NULL;
|
tab->buf[i].name = XP_NULL;
|
||||||
|
tab->buf[i].name_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tab->size = 0;
|
tab->size = 0;
|
||||||
@ -95,12 +95,13 @@ void xp_awk_tab_clear (xp_awk_tab_t* tab)
|
|||||||
|
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_insert (
|
xp_size_t xp_awk_tab_insert (
|
||||||
xp_awk_tab_t* tab, xp_size_t index, const xp_char_t* str)
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_size_t i;
|
xp_size_t i;
|
||||||
xp_char_t* str_dup;
|
xp_char_t* str_dup;
|
||||||
|
|
||||||
str_dup = xp_strdup(str);
|
str_dup = xp_strxdup(str, len);
|
||||||
if (str_dup == XP_NULL) return (xp_size_t)-1;
|
if (str_dup == XP_NULL) return (xp_size_t)-1;
|
||||||
|
|
||||||
if (index >= tab->capa)
|
if (index >= tab->capa)
|
||||||
@ -121,7 +122,8 @@ xp_size_t xp_awk_tab_insert (
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = tab->size; i > index; i--) tab->buf[i] = tab->buf[i-1];
|
for (i = tab->size; i > index; i--) tab->buf[i] = tab->buf[i-1];
|
||||||
tab->buf[index] = str_dup;
|
tab->buf[index].name = str_dup;
|
||||||
|
tab->buf[index].name_len = len;
|
||||||
|
|
||||||
if (index > tab->size) tab->size = index + 1;
|
if (index > tab->size) tab->size = index + 1;
|
||||||
else tab->size++;
|
else tab->size++;
|
||||||
@ -143,16 +145,18 @@ xp_size_t xp_awk_tab_remove (
|
|||||||
|
|
||||||
while (i < k)
|
while (i < k)
|
||||||
{
|
{
|
||||||
xp_free (tab->buf[i]);
|
xp_free (tab->buf[i].name);
|
||||||
|
|
||||||
if (j >= tab->size)
|
if (j >= tab->size)
|
||||||
{
|
{
|
||||||
tab->buf[i] = XP_NULL;
|
tab->buf[i].name = XP_NULL;
|
||||||
|
tab->buf[i].name_len = 0;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tab->buf[i] = tab->buf[j];
|
tab->buf[i].name = tab->buf[j].name;
|
||||||
|
tab->buf[i].name_len = tab->buf[j].name_len;
|
||||||
i++; j++;
|
i++; j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,27 +165,31 @@ xp_size_t xp_awk_tab_remove (
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_add (xp_awk_tab_t* tab, const xp_char_t* str)
|
xp_size_t xp_awk_tab_add (
|
||||||
|
xp_awk_tab_t* tab, const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
return xp_awk_tab_insert (tab, tab->size, str);
|
return xp_awk_tab_insert (tab, tab->size, str, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_find (
|
xp_size_t xp_awk_tab_find (
|
||||||
xp_awk_tab_t* tab, const xp_char_t* str, xp_size_t index)
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_size_t i;
|
xp_size_t i;
|
||||||
|
|
||||||
for (i = index; i < tab->size; i++)
|
for (i = index; i < tab->size; i++)
|
||||||
{
|
{
|
||||||
if (xp_strcmp(tab->buf[i], str) == 0) return i;
|
if (xp_strxncmp (
|
||||||
|
tab->buf[i].name, tab->buf[i].name_len,
|
||||||
|
str, len) == 0) return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (xp_size_t)-1;
|
return (xp_size_t)-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_rfind (
|
xp_size_t xp_awk_tab_rfind (
|
||||||
xp_awk_tab_t* tab, const xp_char_t* str, xp_size_t index)
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_size_t i;
|
xp_size_t i;
|
||||||
|
|
||||||
@ -189,14 +197,17 @@ xp_size_t xp_awk_tab_rfind (
|
|||||||
|
|
||||||
for (i = index + 1; i-- > 0; )
|
for (i = index + 1; i-- > 0; )
|
||||||
{
|
{
|
||||||
if (xp_strcmp(tab->buf[i], str) == 0) return i;
|
if (xp_strxncmp (
|
||||||
|
tab->buf[i].name, tab->buf[i].name_len,
|
||||||
|
str, len) == 0) return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (xp_size_t)-1;
|
return (xp_size_t)-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_rrfind (
|
xp_size_t xp_awk_tab_rrfind (
|
||||||
xp_awk_tab_t* tab, const xp_char_t* str, xp_size_t index)
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_size_t i;
|
xp_size_t i;
|
||||||
|
|
||||||
@ -204,7 +215,9 @@ xp_size_t xp_awk_tab_rrfind (
|
|||||||
|
|
||||||
for (i = tab->size - index; i-- > 0; )
|
for (i = tab->size - index; i-- > 0; )
|
||||||
{
|
{
|
||||||
if (xp_strcmp(tab->buf[i], str) == 0) return i;
|
if (xp_strxncmp (
|
||||||
|
tab->buf[i].name, tab->buf[i].name_len,
|
||||||
|
str, len) == 0) return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (xp_size_t)-1;
|
return (xp_size_t)-1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tab.h,v 1.9 2006-06-29 09:11:38 bacon Exp $
|
* $Id: tab.h,v 1.10 2006-08-03 06:06:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_TAB_H_
|
#ifndef _XP_AWK_TAB_H_
|
||||||
@ -16,7 +16,12 @@ typedef struct xp_awk_tab_t xp_awk_tab_t;
|
|||||||
|
|
||||||
struct xp_awk_tab_t
|
struct xp_awk_tab_t
|
||||||
{
|
{
|
||||||
xp_char_t** buf;
|
struct
|
||||||
|
{
|
||||||
|
xp_char_t* name;
|
||||||
|
xp_size_t name_len;
|
||||||
|
}* buf;
|
||||||
|
//xp_char_t** buf;
|
||||||
xp_size_t size;
|
xp_size_t size;
|
||||||
xp_size_t capa;
|
xp_size_t capa;
|
||||||
xp_bool_t __dynamic;
|
xp_bool_t __dynamic;
|
||||||
@ -36,18 +41,24 @@ xp_awk_tab_t* xp_awk_tab_setcapa (xp_awk_tab_t* tab, xp_size_t capa);
|
|||||||
void xp_awk_tab_clear (xp_awk_tab_t* tab);
|
void xp_awk_tab_clear (xp_awk_tab_t* tab);
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_insert (
|
xp_size_t xp_awk_tab_insert (
|
||||||
xp_awk_tab_t* tab, xp_size_t index, const xp_char_t* value);
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len);
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_remove (
|
xp_size_t xp_awk_tab_remove (
|
||||||
xp_awk_tab_t* tab, xp_size_t index, xp_size_t count);
|
xp_awk_tab_t* tab, xp_size_t index, xp_size_t count);
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_add (xp_awk_tab_t* tab, const xp_char_t* value);
|
xp_size_t xp_awk_tab_add (
|
||||||
|
xp_awk_tab_t* tab, const xp_char_t* str, xp_size_t len);
|
||||||
|
|
||||||
xp_size_t xp_awk_tab_find (
|
xp_size_t xp_awk_tab_find (
|
||||||
xp_awk_tab_t* tab, const xp_char_t* value, xp_size_t index);
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len);
|
||||||
xp_size_t xp_awk_tab_rfind (
|
xp_size_t xp_awk_tab_rfind (
|
||||||
xp_awk_tab_t* tab, const xp_char_t* value, xp_size_t index);
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len);
|
||||||
xp_size_t xp_awk_tab_rrfind (
|
xp_size_t xp_awk_tab_rrfind (
|
||||||
xp_awk_tab_t* tab, const xp_char_t* value, xp_size_t index);
|
xp_awk_tab_t* tab, xp_size_t index,
|
||||||
|
const xp_char_t* str, xp_size_t len);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user