*** empty log message ***
This commit is contained in:
parent
91a547d56a
commit
809fb80456
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.c,v 1.71 2006-08-31 04:21:03 bacon Exp $
|
* $Id: awk.c,v 1.72 2006-08-31 14:52:11 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -173,7 +173,7 @@ int xp_awk_clear (xp_awk_t* awk)
|
|||||||
xp_awk_clrpt (awk->tree.chain->pattern);
|
xp_awk_clrpt (awk->tree.chain->pattern);
|
||||||
if (awk->tree.chain->action != XP_NULL)
|
if (awk->tree.chain->action != XP_NULL)
|
||||||
xp_awk_clrpt (awk->tree.chain->action);
|
xp_awk_clrpt (awk->tree.chain->action);
|
||||||
xp_free (awk->tree.chain);
|
awk->syscas->free (awk->tree.chain, awk->syscas->custom_data);
|
||||||
awk->tree.chain = next;
|
awk->tree.chain = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk_i.h,v 1.48 2006-08-31 04:21:03 bacon Exp $
|
* $Id: awk_i.h,v 1.49 2006-08-31 14:52:11 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_AWKI_H_
|
#ifndef _XP_AWK_AWKI_H_
|
||||||
@ -40,6 +40,13 @@ typedef struct xp_awk_tree_t xp_awk_tree_t;
|
|||||||
#define XP_AWK_MAX_LOCALS 9999
|
#define XP_AWK_MAX_LOCALS 9999
|
||||||
#define XP_AWK_MAX_PARAMS 9999
|
#define XP_AWK_MAX_PARAMS 9999
|
||||||
|
|
||||||
|
#define XP_AWK_MALLOC(awk,size) \
|
||||||
|
(awk)->syscas->malloc (size, (awk)->syscas->custom_data)
|
||||||
|
#define XP_AWK_REALLOC(awk,ptr,size) \
|
||||||
|
(awk)->syscas->realloc (ptr, size, (awk)->syscas->custom_data)
|
||||||
|
#define XP_AWK_FREE(awk,ptr) \
|
||||||
|
(awk)->syscas->free (ptr, (awk)->syscas->custom_data)
|
||||||
|
|
||||||
struct xp_awk_tree_t
|
struct xp_awk_tree_t
|
||||||
{
|
{
|
||||||
xp_size_t nglobals; /* total number of globals */
|
xp_size_t nglobals; /* total number of globals */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: extio.c,v 1.39 2006-08-30 14:48:09 bacon Exp $
|
* $Id: extio.c,v 1.40 2006-08-31 14:52:12 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -120,7 +120,8 @@ int xp_awk_readextio (
|
|||||||
|
|
||||||
if (p == XP_NULL)
|
if (p == XP_NULL)
|
||||||
{
|
{
|
||||||
p = (xp_awk_extio_t*) xp_malloc (xp_sizeof(xp_awk_extio_t));
|
p = (xp_awk_extio_t*) XP_AWK_MALLOC (
|
||||||
|
run->awk, xp_sizeof(xp_awk_extio_t));
|
||||||
if (p == XP_NULL)
|
if (p == XP_NULL)
|
||||||
{
|
{
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
@ -130,7 +131,7 @@ int xp_awk_readextio (
|
|||||||
p->name = xp_strdup (name);
|
p->name = xp_strdup (name);
|
||||||
if (p->name == XP_NULL)
|
if (p->name == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -149,8 +150,8 @@ int xp_awk_readextio (
|
|||||||
n = handler (XP_AWK_IO_OPEN, p, XP_NULL, 0);
|
n = handler (XP_AWK_IO_OPEN, p, XP_NULL, 0);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
xp_free (p->name);
|
XP_AWK_FREE (run->awk, p->name);
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
|
|
||||||
/* TODO: use meaningful error code */
|
/* TODO: use meaningful error code */
|
||||||
if (xp_awk_setglobal (
|
if (xp_awk_setglobal (
|
||||||
@ -326,7 +327,7 @@ int xp_awk_readextio (
|
|||||||
else line_len = line_len + 1;
|
else line_len = line_len + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rs_ptr != XP_NULL && rs->type != XP_AWK_VAL_STR) xp_free (rs_ptr);
|
if (rs_ptr != XP_NULL && rs->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, rs_ptr);
|
||||||
xp_awk_refdownval (run, rs);
|
xp_awk_refdownval (run, rs);
|
||||||
|
|
||||||
/* increment NR */
|
/* increment NR */
|
||||||
@ -446,10 +447,11 @@ static int __writeextio (
|
|||||||
/* if there is not corresponding extio for name, create one */
|
/* if there is not corresponding extio for name, create one */
|
||||||
if (p == XP_NULL)
|
if (p == XP_NULL)
|
||||||
{
|
{
|
||||||
p = (xp_awk_extio_t*) xp_malloc (xp_sizeof(xp_awk_extio_t));
|
p = (xp_awk_extio_t*) XP_AWK_MALLOC (
|
||||||
|
run->awk, xp_sizeof(xp_awk_extio_t));
|
||||||
if (p == XP_NULL)
|
if (p == XP_NULL)
|
||||||
{
|
{
|
||||||
if (v->type != XP_AWK_VAL_STR) xp_free (str);
|
if (v->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, str);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -457,8 +459,8 @@ static int __writeextio (
|
|||||||
p->name = xp_strdup (name);
|
p->name = xp_strdup (name);
|
||||||
if (p->name == XP_NULL)
|
if (p->name == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
if (v->type != XP_AWK_VAL_STR) xp_free (str);
|
if (v->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, str);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -471,9 +473,9 @@ static int __writeextio (
|
|||||||
n = handler (XP_AWK_IO_OPEN, p, XP_NULL, 0);
|
n = handler (XP_AWK_IO_OPEN, p, XP_NULL, 0);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
xp_free (p->name);
|
XP_AWK_FREE (run->awk, p->name);
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
if (v->type != XP_AWK_VAL_STR) xp_free (str);
|
if (v->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, str);
|
||||||
|
|
||||||
/* TODO: use meaningful error code */
|
/* TODO: use meaningful error code */
|
||||||
if (xp_awk_setglobal (
|
if (xp_awk_setglobal (
|
||||||
@ -503,7 +505,7 @@ static int __writeextio (
|
|||||||
|
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
if (v->type != XP_AWK_VAL_STR) xp_free (str);
|
if (v->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, str);
|
||||||
|
|
||||||
/* TODO: use meaningful error code */
|
/* TODO: use meaningful error code */
|
||||||
if (xp_awk_setglobal (
|
if (xp_awk_setglobal (
|
||||||
@ -516,12 +518,12 @@ static int __writeextio (
|
|||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
if (v->type != XP_AWK_VAL_STR) xp_free (str);
|
if (v->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, str);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v->type != XP_AWK_VAL_STR) xp_free (str);
|
if (v->type != XP_AWK_VAL_STR) XP_AWK_FREE (run->awk, str);
|
||||||
|
|
||||||
if (nl)
|
if (nl)
|
||||||
{
|
{
|
||||||
@ -700,8 +702,8 @@ int xp_awk_closeextio_read (
|
|||||||
if (px != XP_NULL) px->next = p->next;
|
if (px != XP_NULL) px->next = p->next;
|
||||||
else run->extio.chain = p->next;
|
else run->extio.chain = p->next;
|
||||||
|
|
||||||
xp_free (p->name);
|
XP_AWK_FREE (run->awk, p->name);
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -760,8 +762,8 @@ int xp_awk_closeextio_write (
|
|||||||
if (px != XP_NULL) px->next = p->next;
|
if (px != XP_NULL) px->next = p->next;
|
||||||
else run->extio.chain = p->next;
|
else run->extio.chain = p->next;
|
||||||
|
|
||||||
xp_free (p->name);
|
XP_AWK_FREE (run->awk, p->name);
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -802,8 +804,8 @@ int xp_awk_closeextio (xp_awk_run_t* run, const xp_char_t* name)
|
|||||||
if (px != XP_NULL) px->next = p->next;
|
if (px != XP_NULL) px->next = p->next;
|
||||||
else run->extio.chain = p->next;
|
else run->extio.chain = p->next;
|
||||||
|
|
||||||
xp_free (p->name);
|
XP_AWK_FREE (run->awk, p->name);
|
||||||
xp_free (p);
|
XP_AWK_FREE (run->awk, p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -825,7 +827,8 @@ void xp_awk_clearextio (xp_awk_run_t* run)
|
|||||||
|
|
||||||
while (run->extio.chain != XP_NULL)
|
while (run->extio.chain != XP_NULL)
|
||||||
{
|
{
|
||||||
handler = run->extio.handler[run->extio.chain->type & __MASK_CLEAR];
|
handler = run->extio.handler[
|
||||||
|
run->extio.chain->type & __MASK_CLEAR];
|
||||||
next = run->extio.chain->next;
|
next = run->extio.chain->next;
|
||||||
|
|
||||||
if (handler != XP_NULL)
|
if (handler != XP_NULL)
|
||||||
@ -838,8 +841,8 @@ void xp_awk_clearextio (xp_awk_run_t* run)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (run->extio.chain->name);
|
XP_AWK_FREE (run->awk, run->extio.chain->name);
|
||||||
xp_free (run->extio.chain);
|
XP_AWK_FREE (run->awk, run->extio.chain);
|
||||||
|
|
||||||
run->extio.chain = next;
|
run->extio.chain = next;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: func.c,v 1.35 2006-08-30 14:48:09 bacon Exp $
|
* $Id: func.c,v 1.36 2006-08-31 14:52:12 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -64,7 +64,7 @@ xp_awk_bfn_t* xp_awk_addbfn (
|
|||||||
|
|
||||||
/* TODO: complete this function??? */
|
/* TODO: complete this function??? */
|
||||||
|
|
||||||
p = (xp_awk_bfn_t*) xp_malloc (xp_sizeof(xp_awk_bfn_t));
|
p = (xp_awk_bfn_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_bfn_t));
|
||||||
if (p == XP_NULL) return XP_NULL;
|
if (p == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
/* NOTE: make sure that name is a constant string */
|
/* NOTE: make sure that name is a constant string */
|
||||||
@ -93,7 +93,7 @@ int xp_awk_delbfn (xp_awk_t* awk, const xp_char_t* name)
|
|||||||
awk->bfn.user = p->next;
|
awk->bfn.user = p->next;
|
||||||
else pp->next = p->next;
|
else pp->next = p->next;
|
||||||
|
|
||||||
xp_free (p);
|
XP_AWK_FREE (awk, p);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ void xp_awk_clrbfn (xp_awk_t* awk)
|
|||||||
while (p != XP_NULL)
|
while (p != XP_NULL)
|
||||||
{
|
{
|
||||||
np = p;
|
np = p;
|
||||||
xp_free (p);
|
XP_AWK_FREE (awk, p);
|
||||||
p = np;
|
p = np;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ static int __bfn_close (xp_awk_t* awk, void* run)
|
|||||||
* an empty string for its identification because closeextio
|
* an empty string for its identification because closeextio
|
||||||
* closes any extios that match the name given unlike
|
* closes any extios that match the name given unlike
|
||||||
* closeextio_read or closeextio_write. */
|
* closeextio_read or closeextio_write. */
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (name);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, name);
|
||||||
n = -1;
|
n = -1;
|
||||||
/* TODO: need to set ERRNO??? */
|
/* TODO: need to set ERRNO??? */
|
||||||
goto skip_close;
|
goto skip_close;
|
||||||
@ -195,7 +195,7 @@ static int __bfn_close (xp_awk_t* awk, void* run)
|
|||||||
{
|
{
|
||||||
/* the name contains a null string.
|
/* the name contains a null string.
|
||||||
* make close return -1 */
|
* make close return -1 */
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (name);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, name);
|
||||||
n = -1;
|
n = -1;
|
||||||
/* TODO: need to set ERRNO??? */
|
/* TODO: need to set ERRNO??? */
|
||||||
goto skip_close;
|
goto skip_close;
|
||||||
@ -205,11 +205,11 @@ static int __bfn_close (xp_awk_t* awk, void* run)
|
|||||||
n = xp_awk_closeextio (run, name);
|
n = xp_awk_closeextio (run, name);
|
||||||
if (n == -1 && ((xp_awk_run_t*)run)->errnum != XP_AWK_EIOHANDLER)
|
if (n == -1 && ((xp_awk_run_t*)run)->errnum != XP_AWK_EIOHANDLER)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (name);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (name);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, name);
|
||||||
|
|
||||||
skip_close:
|
skip_close:
|
||||||
v = xp_awk_makeintval (run, n);
|
v = xp_awk_makeintval (run, n);
|
||||||
@ -299,7 +299,7 @@ static int __bfn_fflush (xp_awk_t* awk, void* run)
|
|||||||
{
|
{
|
||||||
if (*ptr == XP_T('\0'))
|
if (*ptr == XP_T('\0'))
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str0);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str0);
|
||||||
n = -1;
|
n = -1;
|
||||||
goto skip_flush;
|
goto skip_flush;
|
||||||
}
|
}
|
||||||
@ -329,7 +329,7 @@ static int __bfn_fflush (xp_awk_t* awk, void* run)
|
|||||||
* if n is -1, the io handler has returned an error */
|
* if n is -1, the io handler has returned an error */
|
||||||
if (n != 0) n = -1;
|
if (n != 0) n = -1;
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str0);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str0);
|
||||||
}
|
}
|
||||||
|
|
||||||
skip_flush:
|
skip_flush:
|
||||||
@ -385,7 +385,7 @@ static int __bfn_index (xp_awk_t* awk, void* run)
|
|||||||
if (str1 == XP_NULL)
|
if (str1 == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_seterrnum (run, errnum);
|
xp_awk_seterrnum (run, errnum);
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str0);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -395,8 +395,8 @@ static int __bfn_index (xp_awk_t* awk, void* run)
|
|||||||
|
|
||||||
if (xp_awk_getopt(awk) & XP_AWK_STRINDEXONE) idx = idx + 1;
|
if (xp_awk_getopt(awk) & XP_AWK_STRINDEXONE) idx = idx + 1;
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str0);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str0);
|
||||||
if (a1->type != XP_AWK_VAL_STR) xp_free (str1);
|
if (a1->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str1);
|
||||||
|
|
||||||
a0 = xp_awk_makeintval (run, idx);
|
a0 = xp_awk_makeintval (run, idx);
|
||||||
if (a0 == XP_NULL)
|
if (a0 == XP_NULL)
|
||||||
@ -434,7 +434,7 @@ static int __bfn_length (xp_awk_t* awk, void* run)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (awk, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
v = xp_awk_makeintval (run, len);
|
v = xp_awk_makeintval (run, len);
|
||||||
@ -483,7 +483,7 @@ static int __bfn_substr (xp_awk_t* awk, void* run)
|
|||||||
n = xp_awk_valtonum (a1, &lindex, &rindex);
|
n = xp_awk_valtonum (a1, &lindex, &rindex);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_EVALTYPE);
|
xp_awk_seterrnum (run, XP_AWK_EVALTYPE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -495,7 +495,7 @@ static int __bfn_substr (xp_awk_t* awk, void* run)
|
|||||||
n = xp_awk_valtonum (a2, &lcount, &rcount);
|
n = xp_awk_valtonum (a2, &lcount, &rcount);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_EVALTYPE);
|
xp_awk_seterrnum (run, XP_AWK_EVALTYPE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -512,12 +512,12 @@ static int __bfn_substr (xp_awk_t* awk, void* run)
|
|||||||
r = xp_awk_makestrval (&str[lindex], (xp_size_t)lcount);
|
r = xp_awk_makestrval (&str[lindex], (xp_size_t)lcount);
|
||||||
if (r == XP_NULL)
|
if (r == XP_NULL)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_setretval (run, r);
|
xp_awk_setretval (run, r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -576,7 +576,7 @@ static int __bfn_split (xp_awk_t* awk, void* run)
|
|||||||
t1 = xp_awk_makemapval (run);
|
t1 = xp_awk_makemapval (run);
|
||||||
if (t1 == XP_NULL)
|
if (t1 == XP_NULL)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -603,7 +603,7 @@ static int __bfn_split (xp_awk_t* awk, void* run)
|
|||||||
t2 = xp_awk_makestrval (tok, tok_len);
|
t2 = xp_awk_makestrval (tok, tok_len);
|
||||||
if (t2 == XP_NULL)
|
if (t2 == XP_NULL)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -624,7 +624,7 @@ static int __bfn_split (xp_awk_t* awk, void* run)
|
|||||||
((xp_awk_val_map_t*)t1)->map,
|
((xp_awk_val_map_t*)t1)->map,
|
||||||
key, xp_strlen(key), t2, XP_NULL) == -1)
|
key, xp_strlen(key), t2, XP_NULL) == -1)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -638,7 +638,7 @@ static int __bfn_split (xp_awk_t* awk, void* run)
|
|||||||
len = len - (p - str);
|
len = len - (p - str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
|
|
||||||
t1 = xp_awk_makeintval (run, num);
|
t1 = xp_awk_makeintval (run, num);
|
||||||
if (t1 == XP_NULL)
|
if (t1 == XP_NULL)
|
||||||
@ -684,12 +684,12 @@ static int __bfn_tolower (xp_awk_t* awk, void* run)
|
|||||||
r = xp_awk_makestrval (str, len);
|
r = xp_awk_makestrval (str, len);
|
||||||
if (r == XP_NULL)
|
if (r == XP_NULL)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_setretval (run, r);
|
xp_awk_setretval (run, r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -727,12 +727,12 @@ static int __bfn_toupper (xp_awk_t* awk, void* run)
|
|||||||
r = xp_awk_makestrval (str, len);
|
r = xp_awk_makestrval (str, len);
|
||||||
if (r == XP_NULL)
|
if (r == XP_NULL)
|
||||||
{
|
{
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
xp_awk_seterrnum (run, XP_AWK_ENOMEM);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a0->type != XP_AWK_VAL_STR) xp_free (str);
|
if (a0->type != XP_AWK_VAL_STR) XP_AWK_FREE (awk, str);
|
||||||
xp_awk_setretval (run, r);
|
xp_awk_setretval (run, r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -762,7 +762,7 @@ static int __bfn_system (xp_awk_t* awk, void* run)
|
|||||||
n = -1;
|
n = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
xp_free (cmd);
|
XP_AWK_FREE (awk, cmd);
|
||||||
|
|
||||||
v = xp_awk_makeintval (run, n);
|
v = xp_awk_makeintval (run, n);
|
||||||
if (v == XP_NULL)
|
if (v == XP_NULL)
|
||||||
|
169
ase/awk/parse.c
169
ase/awk/parse.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c,v 1.172 2006-08-31 13:56:46 bacon Exp $
|
* $Id: parse.c,v 1.173 2006-08-31 14:52:12 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -325,11 +325,6 @@ static struct __bvent __bvtab[] =
|
|||||||
#define PANIC(awk,code) \
|
#define PANIC(awk,code) \
|
||||||
do { (awk)->errnum = (code); return XP_NULL; } while (0)
|
do { (awk)->errnum = (code); return XP_NULL; } while (0)
|
||||||
|
|
||||||
#define MALLOC(awk,size) \
|
|
||||||
(awk)->syscas->malloc (size, (awk)->syscas->custom_data)
|
|
||||||
#define FREE(awk,ptr) \
|
|
||||||
(awk)->syscas->free (ptr, (awk)->syscas->custom_data)
|
|
||||||
|
|
||||||
int xp_awk_parse (xp_awk_t* awk, xp_awk_srcios_t* srcios)
|
int xp_awk_parse (xp_awk_t* awk, xp_awk_srcios_t* srcios)
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
@ -608,7 +603,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
/* get the next token */
|
/* get the next token */
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -616,14 +611,14 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
if (!MATCH(awk,TOKEN_LPAREN))
|
if (!MATCH(awk,TOKEN_LPAREN))
|
||||||
{
|
{
|
||||||
/* a function name is not followed by a left parenthesis */
|
/* a function name is not followed by a left parenthesis */
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
PANIC (awk, XP_AWK_ELPAREN);
|
PANIC (awk, XP_AWK_ELPAREN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get the next token */
|
/* get the next token */
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,7 +631,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
/* no function parameter found. get the next token */
|
/* no function parameter found. get the next token */
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -649,7 +644,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (!MATCH(awk,TOKEN_IDENT))
|
if (!MATCH(awk,TOKEN_IDENT))
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_EIDENT);
|
PANIC (awk, XP_AWK_EIDENT);
|
||||||
}
|
}
|
||||||
@ -663,7 +658,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
if (xp_strxncmp (name_dup, name_len, param, param_len) == 0 ||
|
if (xp_strxncmp (name_dup, name_len, param, param_len) == 0 ||
|
||||||
xp_awk_map_get (&awk->tree.afns, param, param_len) != XP_NULL)
|
xp_awk_map_get (&awk->tree.afns, param, param_len) != XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_EDUPNAME);
|
PANIC (awk, XP_AWK_EDUPNAME);
|
||||||
}
|
}
|
||||||
@ -680,7 +675,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
&awk->parse.params,
|
&awk->parse.params,
|
||||||
0, param, param_len) != (xp_size_t)-1)
|
0, param, param_len) != (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_EDUPPARAM);
|
PANIC (awk, XP_AWK_EDUPPARAM);
|
||||||
}
|
}
|
||||||
@ -689,7 +684,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
if (xp_awk_tab_getsize (
|
if (xp_awk_tab_getsize (
|
||||||
&awk->parse.params) >= XP_AWK_MAX_PARAMS)
|
&awk->parse.params) >= XP_AWK_MAX_PARAMS)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_ETOOMANYPARAMS);
|
PANIC (awk, XP_AWK_ETOOMANYPARAMS);
|
||||||
}
|
}
|
||||||
@ -698,14 +693,14 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
&awk->parse.params,
|
&awk->parse.params,
|
||||||
param, param_len) == (xp_size_t)-1)
|
param, param_len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__get_token (awk) == -1)
|
if (__get_token (awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
@ -714,14 +709,14 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (!MATCH(awk,TOKEN_COMMA))
|
if (!MATCH(awk,TOKEN_COMMA))
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_ECOMMA);
|
PANIC (awk, XP_AWK_ECOMMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
@ -729,7 +724,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
@ -738,13 +733,13 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
/* check if the function body starts with a left brace */
|
/* check if the function body starts with a left brace */
|
||||||
if (!MATCH(awk,TOKEN_LBRACE))
|
if (!MATCH(awk,TOKEN_LBRACE))
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
PANIC (awk, XP_AWK_ELBRACE);
|
PANIC (awk, XP_AWK_ELBRACE);
|
||||||
}
|
}
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
@ -753,7 +748,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
body = __parse_block (awk, xp_true);
|
body = __parse_block (awk, xp_true);
|
||||||
if (body == XP_NULL)
|
if (body == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
@ -764,10 +759,10 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
/* parameter names are not required anymore. clear them */
|
/* parameter names are not required anymore. clear them */
|
||||||
xp_awk_tab_clear (&awk->parse.params);
|
xp_awk_tab_clear (&awk->parse.params);
|
||||||
|
|
||||||
afn = (xp_awk_afn_t*) MALLOC (awk, xp_sizeof(xp_awk_afn_t));
|
afn = (xp_awk_afn_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_afn_t));
|
||||||
if (afn == XP_NULL)
|
if (afn == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_clrpt (body);
|
xp_awk_clrpt (body);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
@ -780,9 +775,9 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
n = xp_awk_map_putx (&awk->tree.afns, name_dup, name_len, afn, &pair);
|
n = xp_awk_map_putx (&awk->tree.afns, name_dup, name_len, afn, &pair);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
xp_awk_clrpt (body);
|
xp_awk_clrpt (body);
|
||||||
FREE (awk, afn);
|
XP_AWK_FREE (awk, afn);
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -791,7 +786,7 @@ static xp_awk_nde_t* __parse_function (xp_awk_t* awk)
|
|||||||
|
|
||||||
afn->name = pair->key; /* do some trick to save a string. */
|
afn->name = pair->key; /* do some trick to save a string. */
|
||||||
afn->name_len = pair->key_len;
|
afn->name_len = pair->key_len;
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
|
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
@ -839,7 +834,7 @@ static xp_awk_chain_t* __parse_pattern_block (
|
|||||||
if (nde == XP_NULL) return XP_NULL;
|
if (nde == XP_NULL) return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
chain = (xp_awk_chain_t*) MALLOC (awk, xp_sizeof(xp_awk_chain_t));
|
chain = (xp_awk_chain_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_chain_t));
|
||||||
if (chain == XP_NULL)
|
if (chain == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (nde);
|
xp_awk_clrpt (nde);
|
||||||
@ -947,7 +942,7 @@ static xp_awk_nde_t* __parse_block (xp_awk_t* awk, xp_bool_t is_top)
|
|||||||
curr = nde;
|
curr = nde;
|
||||||
}
|
}
|
||||||
|
|
||||||
block = (xp_awk_nde_blk_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_blk_t));
|
block = (xp_awk_nde_blk_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_blk_t));
|
||||||
if (block == XP_NULL)
|
if (block == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_tab_remove (
|
xp_awk_tab_remove (
|
||||||
@ -1142,7 +1137,7 @@ static xp_awk_nde_t* __parse_statement (xp_awk_t* awk)
|
|||||||
if (MATCH(awk,TOKEN_SEMICOLON))
|
if (MATCH(awk,TOKEN_SEMICOLON))
|
||||||
{
|
{
|
||||||
/* null statement */
|
/* null statement */
|
||||||
nde = (xp_awk_nde_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_t));
|
nde = (xp_awk_nde_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
nde->type = XP_AWK_NDE_NULL;
|
nde->type = XP_AWK_NDE_NULL;
|
||||||
@ -1150,7 +1145,7 @@ static xp_awk_nde_t* __parse_statement (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1315,7 +1310,7 @@ static xp_awk_nde_t* __parse_expression (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_ass_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_ass_t));
|
nde = (xp_awk_nde_ass_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_ass_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (x);
|
xp_awk_clrpt (x);
|
||||||
@ -1363,7 +1358,7 @@ static xp_awk_nde_t* __parse_basic_expr (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = (xp_awk_nde_cnd_t*) MALLOC (
|
tmp = (xp_awk_nde_cnd_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_cnd_t));
|
awk, xp_sizeof(xp_awk_nde_cnd_t));
|
||||||
if (tmp == XP_NULL)
|
if (tmp == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -1470,7 +1465,7 @@ static xp_awk_nde_t* __parse_binary_expr (
|
|||||||
/* TODO: enhance constant folding more... */
|
/* TODO: enhance constant folding more... */
|
||||||
|
|
||||||
skip_constant_folding:
|
skip_constant_folding:
|
||||||
nde = (xp_awk_nde_exp_t*) MALLOC (
|
nde = (xp_awk_nde_exp_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_exp_t));
|
awk, xp_sizeof(xp_awk_nde_exp_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -1555,7 +1550,7 @@ static xp_awk_nde_t* __parse_in (xp_awk_t* awk)
|
|||||||
PANIC (awk, XP_AWK_ENOTVAR);
|
PANIC (awk, XP_AWK_ENOTVAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*) MALLOC (
|
nde = (xp_awk_nde_exp_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_exp_t));
|
awk, xp_sizeof(xp_awk_nde_exp_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -1655,7 +1650,7 @@ static xp_awk_nde_t* __parse_bitwise_or_with_extio (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_getline_t*) MALLOC (
|
nde = (xp_awk_nde_getline_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_getline_t));
|
awk, xp_sizeof(xp_awk_nde_getline_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -1690,7 +1685,7 @@ static xp_awk_nde_t* __parse_bitwise_or_with_extio (xp_awk_t* awk)
|
|||||||
|
|
||||||
/* TODO: do constant folding */
|
/* TODO: do constant folding */
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*) MALLOC (
|
nde = (xp_awk_nde_exp_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_exp_t));
|
awk, xp_sizeof(xp_awk_nde_exp_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -1793,7 +1788,7 @@ static xp_awk_nde_t* __parse_concat (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*) MALLOC (
|
nde = (xp_awk_nde_exp_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_exp_t));
|
awk, xp_sizeof(xp_awk_nde_exp_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -1858,7 +1853,7 @@ static xp_awk_nde_t* __parse_unary (xp_awk_t* awk)
|
|||||||
left = __parse_unary (awk);
|
left = __parse_unary (awk);
|
||||||
if (left == XP_NULL) return XP_NULL;
|
if (left == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_exp_t));
|
nde = (xp_awk_nde_exp_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_exp_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (left);
|
xp_awk_clrpt (left);
|
||||||
@ -1916,7 +1911,7 @@ static xp_awk_nde_t* __parse_increment (xp_awk_t* awk)
|
|||||||
if (__get_token(awk) == -1) return XP_NULL;
|
if (__get_token(awk) == -1) return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_exp_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_exp_t));
|
nde = (xp_awk_nde_exp_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_exp_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (left);
|
xp_awk_clrpt (left);
|
||||||
@ -1942,7 +1937,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
{
|
{
|
||||||
xp_awk_nde_int_t* nde;
|
xp_awk_nde_int_t* nde;
|
||||||
|
|
||||||
nde = (xp_awk_nde_int_t*) MALLOC (
|
nde = (xp_awk_nde_int_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_int_t));
|
awk, xp_sizeof(xp_awk_nde_int_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
@ -1957,7 +1952,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1967,7 +1962,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
{
|
{
|
||||||
xp_awk_nde_real_t* nde;
|
xp_awk_nde_real_t* nde;
|
||||||
|
|
||||||
nde = (xp_awk_nde_real_t*) MALLOC (
|
nde = (xp_awk_nde_real_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_real_t));
|
awk, xp_sizeof(xp_awk_nde_real_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
@ -1981,7 +1976,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1991,7 +1986,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
{
|
{
|
||||||
xp_awk_nde_str_t* nde;
|
xp_awk_nde_str_t* nde;
|
||||||
|
|
||||||
nde = (xp_awk_nde_str_t*) MALLOC (
|
nde = (xp_awk_nde_str_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_str_t));
|
awk, xp_sizeof(xp_awk_nde_str_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
@ -2001,14 +1996,14 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
nde->buf = xp_strxdup(XP_STR_BUF(&awk->token.name), nde->len);
|
nde->buf = xp_strxdup(XP_STR_BUF(&awk->token.name), nde->len);
|
||||||
if (nde->buf == XP_NULL)
|
if (nde->buf == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, nde->buf);
|
XP_AWK_FREE (awk, nde->buf);
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2026,7 +2021,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
if (__get_rexstr (awk) == -1) return XP_NULL;
|
if (__get_rexstr (awk) == -1) return XP_NULL;
|
||||||
xp_assert (MATCH(awk,TOKEN_REX));
|
xp_assert (MATCH(awk,TOKEN_REX));
|
||||||
|
|
||||||
nde = (xp_awk_nde_rex_t*) MALLOC (
|
nde = (xp_awk_nde_rex_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_rex_t));
|
awk, xp_sizeof(xp_awk_nde_rex_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
@ -2039,7 +2034,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
XP_STR_LEN(&awk->token.name));
|
XP_STR_LEN(&awk->token.name));
|
||||||
if (nde->buf == XP_NULL)
|
if (nde->buf == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2049,16 +2044,16 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
&errnum);
|
&errnum);
|
||||||
if (nde->code == XP_NULL)
|
if (nde->code == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, nde->buf);
|
XP_AWK_FREE (awk, nde->buf);
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
PANIC (awk, errnum);
|
PANIC (awk, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, nde->buf);
|
XP_AWK_FREE (awk, nde->buf);
|
||||||
FREE (awk, nde->code);
|
XP_AWK_FREE (awk, nde->code);
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2074,7 +2069,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
prim = __parse_primary (awk);
|
prim = __parse_primary (awk);
|
||||||
if (prim == XP_NULL) return XP_NULL;
|
if (prim == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
nde = (xp_awk_nde_pos_t*) MALLOC (
|
nde = (xp_awk_nde_pos_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_pos_t));
|
awk, xp_sizeof(xp_awk_nde_pos_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -2154,7 +2149,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
PANIC (awk, XP_AWK_EIN);
|
PANIC (awk, XP_AWK_EIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = (xp_awk_nde_grp_t*) MALLOC (
|
tmp = (xp_awk_nde_grp_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_grp_t));
|
awk, xp_sizeof(xp_awk_nde_grp_t));
|
||||||
if (tmp == XP_NULL)
|
if (tmp == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -2207,7 +2202,7 @@ static xp_awk_nde_t* __parse_primary (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_getline_t*) MALLOC (
|
nde = (xp_awk_nde_getline_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_getline_t));
|
awk, xp_sizeof(xp_awk_nde_getline_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -2245,7 +2240,7 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (__get_token(awk) == -1)
|
if (__get_token(awk) == -1)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2255,7 +2250,7 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
{
|
{
|
||||||
xp_awk_nde_t* nde;
|
xp_awk_nde_t* nde;
|
||||||
|
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
if (!MATCH(awk,TOKEN_LPAREN))
|
if (!MATCH(awk,TOKEN_LPAREN))
|
||||||
{
|
{
|
||||||
/* built-in function should be in the form
|
/* built-in function should be in the form
|
||||||
@ -2272,7 +2267,7 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
{
|
{
|
||||||
xp_awk_nde_t* nde;
|
xp_awk_nde_t* nde;
|
||||||
nde = __parse_hashidx (awk, name_dup, name_len);
|
nde = __parse_hashidx (awk, name_dup, name_len);
|
||||||
if (nde == XP_NULL) FREE (awk, name_dup);
|
if (nde == XP_NULL) XP_AWK_FREE (awk, name_dup);
|
||||||
return (xp_awk_nde_t*)nde;
|
return (xp_awk_nde_t*)nde;
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOKEN_LPAREN))
|
else if (MATCH(awk,TOKEN_LPAREN))
|
||||||
@ -2280,7 +2275,7 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
/* function call */
|
/* function call */
|
||||||
xp_awk_nde_t* nde;
|
xp_awk_nde_t* nde;
|
||||||
nde = __parse_fncall (awk, name_dup, name_len, XP_NULL);
|
nde = __parse_fncall (awk, name_dup, name_len, XP_NULL);
|
||||||
if (nde == XP_NULL) FREE (awk, name_dup);
|
if (nde == XP_NULL) XP_AWK_FREE (awk, name_dup);
|
||||||
return (xp_awk_nde_t*)nde;
|
return (xp_awk_nde_t*)nde;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -2289,11 +2284,11 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
xp_awk_nde_var_t* nde;
|
xp_awk_nde_var_t* nde;
|
||||||
xp_size_t idxa;
|
xp_size_t idxa;
|
||||||
|
|
||||||
nde = (xp_awk_nde_var_t*) MALLOC (
|
nde = (xp_awk_nde_var_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_var_t));
|
awk, xp_sizeof(xp_awk_nde_var_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
PANIC (awk, XP_AWK_ENOMEM);
|
PANIC (awk, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2358,8 +2353,8 @@ static xp_awk_nde_t* __parse_primary_ident (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* undefined variable */
|
/* undefined variable */
|
||||||
FREE (awk, name_dup);
|
XP_AWK_FREE (awk, name_dup);
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
PANIC (awk, XP_AWK_EUNDEF);
|
PANIC (awk, XP_AWK_EUNDEF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2416,7 +2411,7 @@ static xp_awk_nde_t* __parse_hashidx (
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_var_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_var_t));
|
nde = (xp_awk_nde_var_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_var_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (idx);
|
xp_awk_clrpt (idx);
|
||||||
@ -2482,7 +2477,7 @@ static xp_awk_nde_t* __parse_hashidx (
|
|||||||
|
|
||||||
/* undefined variable */
|
/* undefined variable */
|
||||||
xp_awk_clrpt (idx);
|
xp_awk_clrpt (idx);
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
PANIC (awk, XP_AWK_EUNDEF);
|
PANIC (awk, XP_AWK_EUNDEF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2548,7 +2543,7 @@ static xp_awk_nde_t* __parse_fncall (
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
call = (xp_awk_nde_call_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_call_t));
|
call = (xp_awk_nde_call_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_call_t));
|
||||||
if (call == XP_NULL)
|
if (call == XP_NULL)
|
||||||
{
|
{
|
||||||
if (head != XP_NULL) xp_awk_clrpt (head);
|
if (head != XP_NULL) xp_awk_clrpt (head);
|
||||||
@ -2635,7 +2630,7 @@ static xp_awk_nde_t* __parse_if (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
else else_part = XP_NULL;
|
else else_part = XP_NULL;
|
||||||
|
|
||||||
nde = (xp_awk_nde_if_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_if_t));
|
nde = (xp_awk_nde_if_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_if_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (else_part);
|
xp_awk_clrpt (else_part);
|
||||||
@ -2683,7 +2678,7 @@ static xp_awk_nde_t* __parse_while (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_while_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_while_t));
|
nde = (xp_awk_nde_while_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_while_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (body);
|
xp_awk_clrpt (body);
|
||||||
@ -2745,7 +2740,7 @@ static xp_awk_nde_t* __parse_for (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde2 = (xp_awk_nde_foreach_t*) MALLOC (
|
nde2 = (xp_awk_nde_foreach_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_foreach_t));
|
awk, xp_sizeof(xp_awk_nde_foreach_t));
|
||||||
if (nde2 == XP_NULL)
|
if (nde2 == XP_NULL)
|
||||||
{
|
{
|
||||||
@ -2837,7 +2832,7 @@ static xp_awk_nde_t* __parse_for (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_for_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_for_t));
|
nde = (xp_awk_nde_for_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_for_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (init);
|
xp_awk_clrpt (init);
|
||||||
@ -2910,7 +2905,7 @@ static xp_awk_nde_t* __parse_dowhile (xp_awk_t* awk)
|
|||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_while_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_while_t));
|
nde = (xp_awk_nde_while_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_while_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_awk_clrpt (body);
|
xp_awk_clrpt (body);
|
||||||
@ -2932,7 +2927,7 @@ static xp_awk_nde_t* __parse_break (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (awk->parse.depth.loop <= 0) PANIC (awk, XP_AWK_EBREAK);
|
if (awk->parse.depth.loop <= 0) PANIC (awk, XP_AWK_EBREAK);
|
||||||
|
|
||||||
nde = (xp_awk_nde_break_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_break_t));
|
nde = (xp_awk_nde_break_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_break_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
nde->type = XP_AWK_NDE_BREAK;
|
nde->type = XP_AWK_NDE_BREAK;
|
||||||
nde->next = XP_NULL;
|
nde->next = XP_NULL;
|
||||||
@ -2946,7 +2941,7 @@ static xp_awk_nde_t* __parse_continue (xp_awk_t* awk)
|
|||||||
|
|
||||||
if (awk->parse.depth.loop <= 0) PANIC (awk, XP_AWK_ECONTINUE);
|
if (awk->parse.depth.loop <= 0) PANIC (awk, XP_AWK_ECONTINUE);
|
||||||
|
|
||||||
nde = (xp_awk_nde_continue_t*) MALLOC (
|
nde = (xp_awk_nde_continue_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_continue_t));
|
awk, xp_sizeof(xp_awk_nde_continue_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
nde->type = XP_AWK_NDE_CONTINUE;
|
nde->type = XP_AWK_NDE_CONTINUE;
|
||||||
@ -2960,7 +2955,7 @@ static xp_awk_nde_t* __parse_return (xp_awk_t* awk)
|
|||||||
xp_awk_nde_return_t* nde;
|
xp_awk_nde_return_t* nde;
|
||||||
xp_awk_nde_t* val;
|
xp_awk_nde_t* val;
|
||||||
|
|
||||||
nde = (xp_awk_nde_return_t*) MALLOC (
|
nde = (xp_awk_nde_return_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_return_t));
|
awk, xp_sizeof(xp_awk_nde_return_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
nde->type = XP_AWK_NDE_RETURN;
|
nde->type = XP_AWK_NDE_RETURN;
|
||||||
@ -2976,7 +2971,7 @@ static xp_awk_nde_t* __parse_return (xp_awk_t* awk)
|
|||||||
val = __parse_expression (awk);
|
val = __parse_expression (awk);
|
||||||
if (val == XP_NULL)
|
if (val == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2990,7 +2985,7 @@ static xp_awk_nde_t* __parse_exit (xp_awk_t* awk)
|
|||||||
xp_awk_nde_exit_t* nde;
|
xp_awk_nde_exit_t* nde;
|
||||||
xp_awk_nde_t* val;
|
xp_awk_nde_t* val;
|
||||||
|
|
||||||
nde = (xp_awk_nde_exit_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_exit_t));
|
nde = (xp_awk_nde_exit_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_exit_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
nde->type = XP_AWK_NDE_EXIT;
|
nde->type = XP_AWK_NDE_EXIT;
|
||||||
nde->next = XP_NULL;
|
nde->next = XP_NULL;
|
||||||
@ -3005,7 +3000,7 @@ static xp_awk_nde_t* __parse_exit (xp_awk_t* awk)
|
|||||||
val = __parse_expression (awk);
|
val = __parse_expression (awk);
|
||||||
if (val == XP_NULL)
|
if (val == XP_NULL)
|
||||||
{
|
{
|
||||||
FREE (awk, nde);
|
XP_AWK_FREE (awk, nde);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3031,7 +3026,7 @@ static xp_awk_nde_t* __parse_delete (xp_awk_t* awk)
|
|||||||
PANIC (awk, XP_AWK_EIDENT);
|
PANIC (awk, XP_AWK_EIDENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_delete_t*) MALLOC (
|
nde = (xp_awk_nde_delete_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_delete_t));
|
awk, xp_sizeof(xp_awk_nde_delete_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
@ -3099,7 +3094,7 @@ static xp_awk_nde_t* __parse_print (xp_awk_t* awk)
|
|||||||
out = ep->right;
|
out = ep->right;
|
||||||
out_type = XP_AWK_OUT_FILE;
|
out_type = XP_AWK_OUT_FILE;
|
||||||
|
|
||||||
FREE (awk, tmp);
|
XP_AWK_FREE (awk, tmp);
|
||||||
}
|
}
|
||||||
else if (ep->opcode == XP_AWK_BINOP_RSHIFT)
|
else if (ep->opcode == XP_AWK_BINOP_RSHIFT)
|
||||||
{
|
{
|
||||||
@ -3112,7 +3107,7 @@ static xp_awk_nde_t* __parse_print (xp_awk_t* awk)
|
|||||||
out = ep->right;
|
out = ep->right;
|
||||||
out_type = XP_AWK_OUT_FILE_APPEND;
|
out_type = XP_AWK_OUT_FILE_APPEND;
|
||||||
|
|
||||||
FREE (awk, tmp);
|
XP_AWK_FREE (awk, tmp);
|
||||||
}
|
}
|
||||||
else if (ep->opcode == XP_AWK_BINOP_BOR)
|
else if (ep->opcode == XP_AWK_BINOP_BOR)
|
||||||
{
|
{
|
||||||
@ -3125,7 +3120,7 @@ static xp_awk_nde_t* __parse_print (xp_awk_t* awk)
|
|||||||
out = ep->right;
|
out = ep->right;
|
||||||
out_type = XP_AWK_OUT_PIPE;
|
out_type = XP_AWK_OUT_PIPE;
|
||||||
|
|
||||||
FREE (awk, tmp);
|
XP_AWK_FREE (awk, tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3155,7 +3150,7 @@ static xp_awk_nde_t* __parse_print (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_print_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_print_t));
|
nde = (xp_awk_nde_print_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_print_t));
|
||||||
if (nde == XP_NULL)
|
if (nde == XP_NULL)
|
||||||
{
|
{
|
||||||
if (args != XP_NULL) xp_awk_clrpt (args);
|
if (args != XP_NULL) xp_awk_clrpt (args);
|
||||||
@ -3188,7 +3183,7 @@ static xp_awk_nde_t* __parse_next (xp_awk_t* awk)
|
|||||||
PANIC (awk, XP_AWK_ENEXT);
|
PANIC (awk, XP_AWK_ENEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_next_t*) MALLOC (awk, xp_sizeof(xp_awk_nde_next_t));
|
nde = (xp_awk_nde_next_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_nde_next_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
nde->type = XP_AWK_NDE_NEXT;
|
nde->type = XP_AWK_NDE_NEXT;
|
||||||
nde->next = XP_NULL;
|
nde->next = XP_NULL;
|
||||||
@ -3206,7 +3201,7 @@ static xp_awk_nde_t* __parse_nextfile (xp_awk_t* awk)
|
|||||||
PANIC (awk, XP_AWK_ENEXTFILE);
|
PANIC (awk, XP_AWK_ENEXTFILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
nde = (xp_awk_nde_nextfile_t*) MALLOC (
|
nde = (xp_awk_nde_nextfile_t*) XP_AWK_MALLOC (
|
||||||
awk, xp_sizeof(xp_awk_nde_nextfile_t));
|
awk, xp_sizeof(xp_awk_nde_nextfile_t));
|
||||||
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
if (nde == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
nde->type = XP_AWK_NDE_NEXTFILE;
|
nde->type = XP_AWK_NDE_NEXTFILE;
|
||||||
|
177
ase/awk/run.c
177
ase/awk/run.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.186 2006-08-31 04:21:03 bacon Exp $
|
* $Id: run.c,v 1.187 2006-08-31 14:52:12 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -266,7 +266,7 @@ int xp_awk_setglobal (void* run, xp_size_t idx, xp_awk_val_t* val)
|
|||||||
if (rex == XP_NULL)
|
if (rex == XP_NULL)
|
||||||
{
|
{
|
||||||
if (val->type != XP_AWK_VAL_STR)
|
if (val->type != XP_AWK_VAL_STR)
|
||||||
xp_free (rs_ptr);
|
XP_AWK_FREE (((xp_awk_run_t*)run)->awk, rs_ptr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,7 +275,8 @@ int xp_awk_setglobal (void* run, xp_size_t idx, xp_awk_val_t* val)
|
|||||||
r->extio.rs_rex = rex;
|
r->extio.rs_rex = rex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val->type != XP_AWK_VAL_STR) xp_free (rs_ptr);
|
if (val->type != XP_AWK_VAL_STR)
|
||||||
|
XP_AWK_FREE (((xp_awk_run_t*)run)->awk, rs_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: if idx == XP_AWK_GLOBAL_NF recompute $0, etc */
|
/* TODO: if idx == XP_AWK_GLOBAL_NF recompute $0, etc */
|
||||||
@ -309,7 +310,7 @@ int xp_awk_run (xp_awk_t* awk, xp_awk_runios_t* runios, xp_awk_runcbs_t* runcbs)
|
|||||||
|
|
||||||
awk->errnum = XP_AWK_ENOERR;
|
awk->errnum = XP_AWK_ENOERR;
|
||||||
|
|
||||||
run = (xp_awk_run_t*) xp_malloc (xp_sizeof(xp_awk_run_t));
|
run = (xp_awk_run_t*) XP_AWK_MALLOC (awk, xp_sizeof(xp_awk_run_t));
|
||||||
if (run == XP_NULL)
|
if (run == XP_NULL)
|
||||||
{
|
{
|
||||||
awk->errnum = XP_AWK_ENOMEM;
|
awk->errnum = XP_AWK_ENOMEM;
|
||||||
@ -322,7 +323,7 @@ int xp_awk_run (xp_awk_t* awk, xp_awk_runios_t* runios, xp_awk_runcbs_t* runcbs)
|
|||||||
{
|
{
|
||||||
awk->errnum = errnum;
|
awk->errnum = errnum;
|
||||||
__del_run (awk, run);
|
__del_run (awk, run);
|
||||||
xp_free (run);
|
awk->syscas->free (run, awk->syscas->custom_data);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -353,7 +354,7 @@ int xp_awk_run (xp_awk_t* awk, xp_awk_runios_t* runios, xp_awk_runcbs_t* runcbs)
|
|||||||
__deinit_run (run);
|
__deinit_run (run);
|
||||||
|
|
||||||
__del_run (awk, run);
|
__del_run (awk, run);
|
||||||
xp_free (run);
|
awk->syscas->free (run, awk->syscas->custom_data);
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -541,7 +542,7 @@ static int __init_run (
|
|||||||
|
|
||||||
static void __deinit_run (xp_awk_run_t* run)
|
static void __deinit_run (xp_awk_run_t* run)
|
||||||
{
|
{
|
||||||
xp_free (run->pattern_range_state);
|
XP_AWK_FREE (run->awk, run->pattern_range_state);
|
||||||
|
|
||||||
/* close all pending eio's */
|
/* close all pending eio's */
|
||||||
/* TODO: what if this operation fails? */
|
/* TODO: what if this operation fails? */
|
||||||
@ -549,7 +550,7 @@ static void __deinit_run (xp_awk_run_t* run)
|
|||||||
xp_assert (run->extio.chain == XP_NULL);
|
xp_assert (run->extio.chain == XP_NULL);
|
||||||
if (run->extio.rs_rex != XP_NULL)
|
if (run->extio.rs_rex != XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (run->extio.rs_rex);
|
XP_AWK_FREE (run->awk, run->extio.rs_rex);
|
||||||
run->extio.rs_rex = XP_NULL;
|
run->extio.rs_rex = XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,7 +560,7 @@ static void __deinit_run (xp_awk_run_t* run)
|
|||||||
__clear_record (run, xp_false);
|
__clear_record (run, xp_false);
|
||||||
if (run->inrec.flds != XP_NULL)
|
if (run->inrec.flds != XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (run->inrec.flds);
|
XP_AWK_FREE (run->awk, run->inrec.flds);
|
||||||
run->inrec.flds = XP_NULL;
|
run->inrec.flds = XP_NULL;
|
||||||
run->inrec.maxflds = 0;
|
run->inrec.maxflds = 0;
|
||||||
}
|
}
|
||||||
@ -570,7 +571,7 @@ static void __deinit_run (xp_awk_run_t* run)
|
|||||||
{
|
{
|
||||||
xp_assert (run->stack_top == 0);
|
xp_assert (run->stack_top == 0);
|
||||||
|
|
||||||
xp_free (run->stack);
|
XP_AWK_FREE (run->awk, run->stack);
|
||||||
run->stack = XP_NULL;
|
run->stack = XP_NULL;
|
||||||
run->stack_top = 0;
|
run->stack_top = 0;
|
||||||
run->stack_base = 0;
|
run->stack_base = 0;
|
||||||
@ -1591,7 +1592,7 @@ static int __run_delete (xp_awk_run_t* run, xp_awk_nde_delete_t* nde)
|
|||||||
if (key == XP_NULL) return -1;
|
if (key == XP_NULL) return -1;
|
||||||
|
|
||||||
xp_awk_map_remove (map, key, key_len);
|
xp_awk_map_remove (map, key, key_len);
|
||||||
xp_free (key);
|
XP_AWK_FREE (run->awk, key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1683,7 +1684,7 @@ static int __run_delete (xp_awk_run_t* run, xp_awk_nde_delete_t* nde)
|
|||||||
if (key == XP_NULL) return -1;
|
if (key == XP_NULL) return -1;
|
||||||
|
|
||||||
xp_awk_map_remove (map, key, key_len);
|
xp_awk_map_remove (map, key, key_len);
|
||||||
xp_free (key);
|
XP_AWK_FREE (run->awk, key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1735,7 +1736,7 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
|
|||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
/* the output destination name is empty. */
|
/* the output destination name is empty. */
|
||||||
xp_free (out);
|
XP_AWK_FREE (run->awk, out);
|
||||||
n = -1;
|
n = -1;
|
||||||
goto skip_write;
|
goto skip_write;
|
||||||
}
|
}
|
||||||
@ -1746,7 +1747,7 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
|
|||||||
{
|
{
|
||||||
/* the output destination name contains a null
|
/* the output destination name contains a null
|
||||||
* character. */
|
* character. */
|
||||||
xp_free (out);
|
XP_AWK_FREE (run->awk, out);
|
||||||
n = -1;
|
n = -1;
|
||||||
goto skip_write;
|
goto skip_write;
|
||||||
/* TODO: how to handle error???
|
/* TODO: how to handle error???
|
||||||
@ -1770,7 +1771,7 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
|
|||||||
n = xp_awk_writeextio (run, p->out_type, dst, v);
|
n = xp_awk_writeextio (run, p->out_type, dst, v);
|
||||||
if (n < 0 && run->errnum != XP_AWK_EIOHANDLER)
|
if (n < 0 && run->errnum != XP_AWK_EIOHANDLER)
|
||||||
{
|
{
|
||||||
if (out != XP_NULL) xp_free (out);
|
if (out != XP_NULL) XP_AWK_FREE (run->awk, out);
|
||||||
xp_awk_refdownval (run, v);
|
xp_awk_refdownval (run, v);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1785,7 +1786,7 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
|
|||||||
v = __eval_expression (run, np);
|
v = __eval_expression (run, np);
|
||||||
if (v == XP_NULL)
|
if (v == XP_NULL)
|
||||||
{
|
{
|
||||||
if (out != XP_NULL) xp_free (out);
|
if (out != XP_NULL) XP_AWK_FREE (run->awk, out);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
xp_awk_refupval (v);
|
xp_awk_refupval (v);
|
||||||
@ -1793,7 +1794,7 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
|
|||||||
n = xp_awk_writeextio (run, p->out_type, dst, v);
|
n = xp_awk_writeextio (run, p->out_type, dst, v);
|
||||||
if (n < 0 && run->errnum != XP_AWK_EIOHANDLER)
|
if (n < 0 && run->errnum != XP_AWK_EIOHANDLER)
|
||||||
{
|
{
|
||||||
if (out != XP_NULL) xp_free (out);
|
if (out != XP_NULL) XP_AWK_FREE (run->awk, out);
|
||||||
xp_awk_refdownval (run, v);
|
xp_awk_refdownval (run, v);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1811,14 +1812,14 @@ static int __run_print (xp_awk_run_t* run, xp_awk_nde_print_t* nde)
|
|||||||
n = xp_awk_writeextio_nl (run, p->out_type, dst, xp_awk_val_nil);
|
n = xp_awk_writeextio_nl (run, p->out_type, dst, xp_awk_val_nil);
|
||||||
if (n < 0 && run->errnum != XP_AWK_EIOHANDLER)
|
if (n < 0 && run->errnum != XP_AWK_EIOHANDLER)
|
||||||
{
|
{
|
||||||
if (out != XP_NULL) xp_free (out);
|
if (out != XP_NULL) XP_AWK_FREE (run->awk, out);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: how to handle n == -1 && errnum == XP_AWK_EIOHANDLER.
|
/* TODO: how to handle n == -1 && errnum == XP_AWK_EIOHANDLER.
|
||||||
* that is the user handler returned an error... */
|
* that is the user handler returned an error... */
|
||||||
|
|
||||||
if (out != XP_NULL) xp_free (out);
|
if (out != XP_NULL) XP_AWK_FREE (run->awk, out);
|
||||||
|
|
||||||
skip_write:
|
skip_write:
|
||||||
return 0;
|
return 0;
|
||||||
@ -2200,11 +2201,11 @@ xp_printf (XP_T("**** index str=>%s, map->ref=%d, map->type=%d\n"), str, map->re
|
|||||||
n = xp_awk_map_putx (map->map, str, len, val, XP_NULL);
|
n = xp_awk_map_putx (map->map, str, len, val, XP_NULL);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
xp_awk_refupval (val);
|
xp_awk_refupval (val);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -2239,16 +2240,16 @@ static xp_awk_val_t* __do_assignment_pos (
|
|||||||
{
|
{
|
||||||
if (__clear_record (run, xp_false) == -1)
|
if (__clear_record (run, xp_false) == -1)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xp_str_ncpy (&run->inrec.line, str, len) == (xp_size_t)-1)
|
if (xp_str_ncpy (&run->inrec.line, str, len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
|
|
||||||
if (val->type == XP_AWK_VAL_STR)
|
if (val->type == XP_AWK_VAL_STR)
|
||||||
{
|
{
|
||||||
@ -2287,12 +2288,12 @@ static xp_awk_val_t* __do_assignment_pos (
|
|||||||
if (__recomp_record_fields (run, (xp_size_t)lv, str, len) == -1)
|
if (__recomp_record_fields (run, (xp_size_t)lv, str, len) == -1)
|
||||||
{
|
{
|
||||||
errnum = run->errnum;
|
errnum = run->errnum;
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
__clear_record (run, xp_false);
|
__clear_record (run, xp_false);
|
||||||
run->errnum = errnum;
|
run->errnum = errnum;
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
|
|
||||||
/* recompose $0 */
|
/* recompose $0 */
|
||||||
v = xp_awk_makestrval (
|
v = xp_awk_makestrval (
|
||||||
@ -2529,7 +2530,7 @@ static xp_awk_val_t* __eval_binop_in (
|
|||||||
rv = __eval_expression (run, right);
|
rv = __eval_expression (run, right);
|
||||||
if (rv == XP_NULL)
|
if (rv == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2540,12 +2541,12 @@ static xp_awk_val_t* __eval_binop_in (
|
|||||||
res = xp_awk_makeintval (run, 0);
|
res = xp_awk_makeintval (run, 0);
|
||||||
if (res == XP_NULL)
|
if (res == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
xp_awk_refdownval (run, rv);
|
xp_awk_refdownval (run, rv);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
xp_awk_refdownval (run, rv);
|
xp_awk_refdownval (run, rv);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -2558,12 +2559,12 @@ static xp_awk_val_t* __eval_binop_in (
|
|||||||
res = xp_awk_makeintval (run, r);
|
res = xp_awk_makeintval (run, r);
|
||||||
if (res == XP_NULL)
|
if (res == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
xp_awk_refdownval (run, rv);
|
xp_awk_refdownval (run, rv);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
xp_awk_refdownval (run, rv);
|
xp_awk_refdownval (run, rv);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -3193,20 +3194,20 @@ static xp_awk_val_t* __eval_binop_concat (
|
|||||||
strr = xp_awk_valtostr (right, &errnum, xp_true, XP_NULL, &strr_len);
|
strr = xp_awk_valtostr (right, &errnum, xp_true, XP_NULL, &strr_len);
|
||||||
if (strr == XP_NULL)
|
if (strr == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (strl);
|
XP_AWK_FREE (run->awk, strl);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = xp_awk_makestrval2 (strl, strl_len, strr, strr_len);
|
res = xp_awk_makestrval2 (strl, strl_len, strr, strr_len);
|
||||||
if (res == XP_NULL)
|
if (res == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (strl);
|
XP_AWK_FREE (run->awk, strl);
|
||||||
xp_free (strr);
|
XP_AWK_FREE (run->awk, strr);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (strl);
|
XP_AWK_FREE (run->awk, strl);
|
||||||
xp_free (strr);
|
XP_AWK_FREE (run->awk, strr);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -3303,11 +3304,11 @@ static xp_awk_val_t* __eval_binop_match0 (
|
|||||||
rex_code = xp_awk_buildrex (str, len, &errnum);
|
rex_code = xp_awk_buildrex (str, len, &errnum);
|
||||||
if (rex_code == XP_NULL)
|
if (rex_code == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_STR)
|
if (left->type == XP_AWK_VAL_STR)
|
||||||
@ -3319,14 +3320,16 @@ static xp_awk_val_t* __eval_binop_match0 (
|
|||||||
XP_NULL, XP_NULL, &errnum);
|
XP_NULL, XP_NULL, &errnum);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
if (right->type != XP_AWK_VAL_REX) xp_free (rex_code);
|
if (right->type != XP_AWK_VAL_REX)
|
||||||
|
XP_AWK_FREE (run->awk, rex_code);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = xp_awk_makeintval (run, (n == ret));
|
res = xp_awk_makeintval (run, (n == ret));
|
||||||
if (res == XP_NULL)
|
if (res == XP_NULL)
|
||||||
{
|
{
|
||||||
if (right->type != XP_AWK_VAL_REX) xp_free (rex_code);
|
if (right->type != XP_AWK_VAL_REX)
|
||||||
|
XP_AWK_FREE (run->awk, rex_code);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3335,7 +3338,8 @@ static xp_awk_val_t* __eval_binop_match0 (
|
|||||||
str = xp_awk_valtostr (left, &errnum, xp_true, XP_NULL, &len);
|
str = xp_awk_valtostr (left, &errnum, xp_true, XP_NULL, &len);
|
||||||
if (str == XP_NULL)
|
if (str == XP_NULL)
|
||||||
{
|
{
|
||||||
if (right->type != XP_AWK_VAL_REX) xp_free (rex_code);
|
if (right->type != XP_AWK_VAL_REX)
|
||||||
|
XP_AWK_FREE (run->awk, rex_code);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3343,23 +3347,25 @@ static xp_awk_val_t* __eval_binop_match0 (
|
|||||||
rex_code, str, len, XP_NULL, XP_NULL, &errnum);
|
rex_code, str, len, XP_NULL, XP_NULL, &errnum);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
if (right->type != XP_AWK_VAL_REX) xp_free (rex_code);
|
if (right->type != XP_AWK_VAL_REX)
|
||||||
|
XP_AWK_FREE (run->awk, rex_code);
|
||||||
PANIC (run, errnum);
|
PANIC (run, errnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = xp_awk_makeintval (run, (n == ret));
|
res = xp_awk_makeintval (run, (n == ret));
|
||||||
if (res == XP_NULL)
|
if (res == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
if (right->type != XP_AWK_VAL_REX) xp_free (rex_code);
|
if (right->type != XP_AWK_VAL_REX)
|
||||||
|
XP_AWK_FREE (run->awk, rex_code);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (right->type != XP_AWK_VAL_REX) xp_free (rex_code);
|
if (right->type != XP_AWK_VAL_REX) XP_AWK_FREE (run->awk, rex_code);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4239,14 +4245,14 @@ static xp_awk_val_t** __get_reference_indexed (
|
|||||||
str, len, xp_awk_val_nil);
|
str, len, xp_awk_val_nil);
|
||||||
if (pair == XP_NULL)
|
if (pair == XP_NULL)
|
||||||
{
|
{
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_awk_refupval (pair->val);
|
xp_awk_refupval (pair->val);
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
return (xp_awk_val_t**)&pair->val;
|
return (xp_awk_val_t**)&pair->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4350,7 +4356,7 @@ static xp_awk_val_t* __eval_indexed (
|
|||||||
if (str == XP_NULL) return XP_NULL;
|
if (str == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
pair = xp_awk_map_get ((*(xp_awk_val_map_t**)val)->map, str, len);
|
pair = xp_awk_map_get ((*(xp_awk_val_map_t**)val)->map, str, len);
|
||||||
xp_free (str);
|
XP_AWK_FREE (run->awk, str);
|
||||||
|
|
||||||
return (pair == XP_NULL)? xp_awk_val_nil: (xp_awk_val_t*)pair->val;
|
return (pair == XP_NULL)? xp_awk_val_nil: (xp_awk_val_t*)pair->val;
|
||||||
}
|
}
|
||||||
@ -4459,7 +4465,7 @@ static xp_awk_val_t* __eval_getline (xp_awk_run_t* run, xp_awk_nde_t* nde)
|
|||||||
{
|
{
|
||||||
/* the input source name is empty.
|
/* the input source name is empty.
|
||||||
* make getline return -1 */
|
* make getline return -1 */
|
||||||
xp_free (in);
|
XP_AWK_FREE (run->awk, in);
|
||||||
n = -1;
|
n = -1;
|
||||||
goto skip_read;
|
goto skip_read;
|
||||||
}
|
}
|
||||||
@ -4471,7 +4477,7 @@ static xp_awk_val_t* __eval_getline (xp_awk_run_t* run, xp_awk_nde_t* nde)
|
|||||||
/* the input source name contains a null
|
/* the input source name contains a null
|
||||||
* character. make getline return -1 */
|
* character. make getline return -1 */
|
||||||
/* TODO: set ERRNO */
|
/* TODO: set ERRNO */
|
||||||
xp_free (in);
|
XP_AWK_FREE (run->awk, in);
|
||||||
n = -1;
|
n = -1;
|
||||||
goto skip_read;
|
goto skip_read;
|
||||||
}
|
}
|
||||||
@ -4483,12 +4489,12 @@ static xp_awk_val_t* __eval_getline (xp_awk_run_t* run, xp_awk_nde_t* nde)
|
|||||||
/* TODO: optimize the line buffer management */
|
/* TODO: optimize the line buffer management */
|
||||||
if (xp_str_open (&buf, DEF_BUF_CAPA) == XP_NULL)
|
if (xp_str_open (&buf, DEF_BUF_CAPA) == XP_NULL)
|
||||||
{
|
{
|
||||||
if (in != XP_NULL) xp_free (in);
|
if (in != XP_NULL) XP_AWK_FREE (run->awk, in);
|
||||||
PANIC (run, XP_AWK_ENOMEM);
|
PANIC (run, XP_AWK_ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
n = xp_awk_readextio (run, p->in_type, dst, &buf);
|
n = xp_awk_readextio (run, p->in_type, dst, &buf);
|
||||||
if (in != XP_NULL) xp_free (in);
|
if (in != XP_NULL) XP_AWK_FREE (run->awk, in);
|
||||||
|
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
@ -4564,20 +4570,24 @@ static int __raw_push (xp_awk_run_t* run, void* val)
|
|||||||
|
|
||||||
n = run->stack_limit + STACK_INCREMENT;
|
n = run->stack_limit + STACK_INCREMENT;
|
||||||
|
|
||||||
#ifndef XP_AWK_NTDDK
|
if (run->awk->syscas->realloc != XP_NULL)
|
||||||
tmp = (void**) xp_realloc (
|
{
|
||||||
run->stack, n * xp_sizeof(void*));
|
tmp = (void**) XP_AWK_REALLOC (
|
||||||
|
run->awk, run->stack, n * xp_sizeof(void*));
|
||||||
if (tmp == XP_NULL) return -1;
|
if (tmp == XP_NULL) return -1;
|
||||||
#else
|
}
|
||||||
tmp = (void**) xp_malloc (n * xp_sizeof(void*));
|
else
|
||||||
|
{
|
||||||
|
tmp = (void**) XP_AWK_MALLOC (
|
||||||
|
run->awk, n * xp_sizeof(void*));
|
||||||
if (tmp == XP_NULL) return -1;
|
if (tmp == XP_NULL) return -1;
|
||||||
if (run->stack != XP_NULL)
|
if (run->stack != XP_NULL)
|
||||||
{
|
{
|
||||||
xp_memcpy (tmp, run->stack,
|
xp_memcpy (tmp, run->stack,
|
||||||
run->stack_limit * xp_sizeof(void*));
|
run->stack_limit * xp_sizeof(void*));
|
||||||
xp_free (run->stack);
|
XP_AWK_FREE (run->awk, run->stack);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
run->stack = tmp;
|
run->stack = tmp;
|
||||||
run->stack_limit = n;
|
run->stack_limit = n;
|
||||||
}
|
}
|
||||||
@ -4719,7 +4729,7 @@ static int __split_record (xp_awk_run_t* run)
|
|||||||
#if 0
|
#if 0
|
||||||
if (fs->type != XP_AWK_VAL_STR)
|
if (fs->type != XP_AWK_VAL_STR)
|
||||||
{
|
{
|
||||||
if (fs_ptr != XP_NULL) xp_free (fs_ptr);
|
if (fs_ptr != XP_NULL) XP_AWK_FREE (run->awk, fs_ptr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
@ -4732,23 +4742,23 @@ static int __split_record (xp_awk_run_t* run)
|
|||||||
(p - XP_STR_BUF(&run->inrec.line));
|
(p - XP_STR_BUF(&run->inrec.line));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* THIS PART IS WRONG. FREE IT AFTER THE NEXT SPLIT LOOP */
|
/* THIS PART IS WRONG. XP_AWK_FREE IT AFTER THE NEXT SPLIT LOOP */
|
||||||
#if 0
|
#if 0
|
||||||
if (fs->type != XP_AWK_VAL_STR)
|
if (fs->type != XP_AWK_VAL_STR)
|
||||||
{
|
{
|
||||||
if (fs_ptr != XP_NULL) xp_free (fs_ptr);
|
if (fs_ptr != XP_NULL) XP_AWK_FREE (run->awk, fs_ptr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* allocate space */
|
/* allocate space */
|
||||||
if (nflds > run->inrec.maxflds)
|
if (nflds > run->inrec.maxflds)
|
||||||
{
|
{
|
||||||
void* tmp = xp_malloc (
|
void* tmp = XP_AWK_MALLOC (
|
||||||
xp_sizeof(*run->inrec.flds) * nflds);
|
run->awk, xp_sizeof(*run->inrec.flds) * nflds);
|
||||||
if (tmp == XP_NULL) PANIC_I (run, XP_AWK_ENOMEM);
|
if (tmp == XP_NULL) PANIC_I (run, XP_AWK_ENOMEM);
|
||||||
|
|
||||||
if (run->inrec.flds != NULL)
|
if (run->inrec.flds != NULL)
|
||||||
xp_free (run->inrec.flds);
|
XP_AWK_FREE (run->awk, run->inrec.flds);
|
||||||
run->inrec.flds = tmp;
|
run->inrec.flds = tmp;
|
||||||
run->inrec.maxflds = nflds;
|
run->inrec.maxflds = nflds;
|
||||||
}
|
}
|
||||||
@ -4838,16 +4848,21 @@ static int __recomp_record_fields (
|
|||||||
{
|
{
|
||||||
void* tmp;
|
void* tmp;
|
||||||
|
|
||||||
#ifndef XP_AWK_NTDDK
|
if (run->awk->syscas->realloc != XP_NULL)
|
||||||
tmp = xp_realloc (
|
{
|
||||||
run->inrec.flds, xp_sizeof(*run->inrec.flds) * max);
|
tmp = XP_AWK_REALLOC (
|
||||||
|
run->awk, run->inrec.flds,
|
||||||
|
xp_sizeof(*run->inrec.flds) * max);
|
||||||
if (tmp == XP_NULL)
|
if (tmp == XP_NULL)
|
||||||
{
|
{
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#else
|
}
|
||||||
tmp = xp_malloc (xp_sizeof(*run->inrec.flds) * max);
|
else
|
||||||
|
{
|
||||||
|
tmp = XP_AWK_MALLOC (
|
||||||
|
run->awk, xp_sizeof(*run->inrec.flds) * max);
|
||||||
if (tmp == XP_NULL)
|
if (tmp == XP_NULL)
|
||||||
{
|
{
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
@ -4857,9 +4872,11 @@ static int __recomp_record_fields (
|
|||||||
{
|
{
|
||||||
xp_memcpy (tmp, run->inrec.flds,
|
xp_memcpy (tmp, run->inrec.flds,
|
||||||
xp_sizeof(*run->inrec.flds) * run->inrec.maxflds);
|
xp_sizeof(*run->inrec.flds) * run->inrec.maxflds);
|
||||||
xp_free (run->inrec.flds);
|
run->awk->syscas->free (
|
||||||
|
run->inrec.flds,
|
||||||
|
run->awk->syscas->custom_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
run->inrec.flds = tmp;
|
run->inrec.flds = tmp;
|
||||||
run->inrec.maxflds = max;
|
run->inrec.maxflds = max;
|
||||||
@ -4897,7 +4914,7 @@ static int __recomp_record_fields (
|
|||||||
&run->inrec.line,
|
&run->inrec.line,
|
||||||
ofs, ofs_len) == (xp_size_t)-1)
|
ofs, ofs_len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
if (ofsp != XP_NULL) xp_free (ofsp);
|
if (ofsp != XP_NULL) XP_AWK_FREE (run->awk, ofsp);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -4915,7 +4932,7 @@ static int __recomp_record_fields (
|
|||||||
if (xp_str_ncat (
|
if (xp_str_ncat (
|
||||||
&run->inrec.line, str, len) == (xp_size_t)-1)
|
&run->inrec.line, str, len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
if (ofsp != XP_NULL) xp_free (ofsp);
|
if (ofsp != XP_NULL) XP_AWK_FREE (run->awk, ofsp);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -4923,7 +4940,7 @@ static int __recomp_record_fields (
|
|||||||
tmp = xp_awk_makestrval (str,len);
|
tmp = xp_awk_makestrval (str,len);
|
||||||
if (tmp == XP_NULL)
|
if (tmp == XP_NULL)
|
||||||
{
|
{
|
||||||
if (ofsp != XP_NULL) xp_free (ofsp);
|
if (ofsp != XP_NULL) XP_AWK_FREE (run->awk, ofsp);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -4944,7 +4961,7 @@ static int __recomp_record_fields (
|
|||||||
if (xp_str_cat (
|
if (xp_str_cat (
|
||||||
&run->inrec.line, XP_T("")) == (xp_size_t)-1)
|
&run->inrec.line, XP_T("")) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
if (ofsp != XP_NULL) xp_free (ofsp);
|
if (ofsp != XP_NULL) XP_AWK_FREE (run->awk, ofsp);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -4971,14 +4988,14 @@ static int __recomp_record_fields (
|
|||||||
if (xp_str_ncat (&run->inrec.line,
|
if (xp_str_ncat (&run->inrec.line,
|
||||||
tmp->buf, tmp->len) == (xp_size_t)-1)
|
tmp->buf, tmp->len) == (xp_size_t)-1)
|
||||||
{
|
{
|
||||||
if (ofsp != XP_NULL) xp_free (ofsp);
|
if (ofsp != XP_NULL) XP_AWK_FREE (run->awk, ofsp);
|
||||||
run->errnum = XP_AWK_ENOMEM;
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ofsp != XP_NULL) xp_free (ofsp);
|
if (ofsp != XP_NULL) XP_AWK_FREE (run->awk, ofsp);
|
||||||
|
|
||||||
v = STACK_GLOBAL(run, XP_AWK_GLOBAL_NF);
|
v = STACK_GLOBAL(run, XP_AWK_GLOBAL_NF);
|
||||||
xp_assert (v->type == XP_AWK_VAL_INT);
|
xp_assert (v->type == XP_AWK_VAL_INT);
|
||||||
|
Loading…
Reference in New Issue
Block a user