*** empty log message ***

This commit is contained in:
hyung-hwan 2006-12-23 05:44:17 +00:00
parent 0ff7c9c8d1
commit 5082a77c2e
3 changed files with 65 additions and 42 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.170 2006-12-19 14:20:30 bacon Exp $ * $Id: awk.h,v 1.171 2006-12-23 05:44:17 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
@ -236,16 +236,16 @@ enum
ASE_AWK_ERUNTIME, /* run-time error */ ASE_AWK_ERUNTIME, /* run-time error */
ASE_AWK_ERUNNING, /* there are running instances */ ASE_AWK_ERUNNING, /* there are running instances */
ASE_AWK_ETOOMANYRUNS, /* too many running instances */ ASE_AWK_ETOOMANYRUNS, /* too many running instances */
ASE_AWK_ERECURSION, /* recursion too deep */ ASE_AWK_ERECUR, /* recursion too deep */
ASE_AWK_ESYSFNS, /* system functions not proper */ ASE_AWK_ESYSFNS, /* system functions not proper */
ASE_AWK_ESRCINOPEN, ASE_AWK_ESINOP,
ASE_AWK_ESRCINCLOSE, ASE_AWK_ESINCL,
ASE_AWK_ESRCINREAD, ASE_AWK_ESINRD,
ASE_AWK_ESRCOUTOPEN, ASE_AWK_ESOUTOP,
ASE_AWK_ESRCOUTCLOSE, ASE_AWK_ESOUTCL,
ASE_AWK_ESRCOUTWRITE, ASE_AWK_ESOUTWR,
ASE_AWK_ECONINOPEN, ASE_AWK_ECONINOPEN,
ASE_AWK_ECONINCLOSE, ASE_AWK_ECONINCLOSE,
@ -404,9 +404,14 @@ int ase_awk_clear (ase_awk_t* awk);
int ase_awk_geterrnum (ase_awk_t* awk); int ase_awk_geterrnum (ase_awk_t* awk);
ase_size_t ase_awk_geterrlin (ase_awk_t* awk); ase_size_t ase_awk_geterrlin (ase_awk_t* awk);
const ase_char_t* ase_awk_geterrmsg (ase_awk_t* awk); const ase_char_t* ase_awk_geterrmsg (ase_awk_t* awk);
void ase_awk_geterror (
ase_awk_t* awk, int* errnum,
ase_size_t* errlin, const ase_char_t** errmsg);
void ase_awk_seterror ( void ase_awk_seterror (
ase_awk_t* run, int errnum, ase_awk_t* run, int errnum,
ase_size_t errlin, const ase_char_t* msg); ase_size_t errlin, const ase_char_t* errmsg);
int ase_awk_getopt (ase_awk_t* awk); int ase_awk_getopt (ase_awk_t* awk);
void ase_awk_setopt (ase_awk_t* awk, int opt); void ase_awk_setopt (ase_awk_t* awk, int opt);

View File

@ -1,5 +1,5 @@
/* /*
* $Id: err.c,v 1.62 2006-12-19 14:20:30 bacon Exp $ * $Id: err.c,v 1.63 2006-12-23 05:44:17 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -21,14 +21,24 @@ const ase_char_t* ase_awk_geterrmsg (ase_awk_t* awk)
return awk->errmsg; return awk->errmsg;
} }
void ase_awk_geterror (
ase_awk_t* awk, int* errnum,
ase_size_t* errlin, const ase_char_t** errmsg)
{
if (errnum != ASE_NULL) *errnum = awk->errnum;
if (errlin != ASE_NULL) *errlin = awk->errlin;
if (errmsg != ASE_NULL) *errmsg = awk->errmsg;
}
void ase_awk_seterror ( void ase_awk_seterror (
ase_awk_t* awk, int errnum, ase_awk_t* awk, int errnum,
ase_size_t errlin, const ase_char_t* msg) ase_size_t errlin, const ase_char_t* errmsg)
{ {
awk->errnum = errnum; awk->errnum = errnum;
awk->errlin = errlin; awk->errlin = errlin;
if (msg == ASE_NULL) awk->errmsg[0] = ASE_T('\0'); if (errmsg == ASE_NULL) awk->errmsg[0] = ASE_T('\0');
else ase_awk_strxcpy (awk->errmsg, ASE_COUNTOF(awk->errmsg), msg); else ase_awk_strxcpy (awk->errmsg, ASE_COUNTOF(awk->errmsg), errmsg);
} }
const ase_char_t* ase_awk_geterrstr (int errnum) const ase_char_t* ase_awk_geterrstr (int errnum)

View File

@ -1,5 +1,5 @@
/* /*
* $Id: parse.c,v 1.226 2006-12-19 14:49:24 bacon Exp $ * $Id: parse.c,v 1.227 2006-12-23 05:44:17 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -379,7 +379,9 @@ static int __parse (ase_awk_t* awk)
{ {
/* cannot open the source file. /* cannot open the source file.
* it doesn't even have to call CLOSE */ * it doesn't even have to call CLOSE */
awk->errnum = ASE_AWK_ESRCINOPEN; ase_awk_seterror (
awk, ASE_AWK_ESINOP, 0,
ASE_T("cannot open the source input"));
return -1; return -1;
} }
@ -441,7 +443,9 @@ exit_parse:
{ {
/* this is to keep the earlier error above /* this is to keep the earlier error above
* that might be more critical than this */ * that might be more critical than this */
awk->errnum = ASE_AWK_ESRCINCLOSE; ase_awk_seterror (
awk, ASE_AWK_ESINCL, 0,
ASE_T("cannot close the source input"));
n = -1; n = -1;
} }
} }
@ -1058,7 +1062,9 @@ static ase_awk_nde_t* __parse_block_dc (
if (awk->parse.depth.cur.block >= awk->parse.depth.max.block) if (awk->parse.depth.cur.block >= awk->parse.depth.max.block)
{ {
awk->errnum = ASE_AWK_ERECURSION; ase_awk_seterror (
awk, ASE_AWK_ERECUR, awk->token.prev.line,
ASE_T("block nested too deeply"));
return ASE_NULL; return ASE_NULL;
} }
@ -1411,7 +1417,7 @@ static ase_awk_nde_t* __parse_expression (ase_awk_t* awk, ase_size_t line)
if (awk->parse.depth.max.expr > 0 && if (awk->parse.depth.max.expr > 0 &&
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr) awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
{ {
awk->errnum = ASE_AWK_ERECURSION; awk->errnum = ASE_AWK_ERECUR;
return ASE_NULL; return ASE_NULL;
} }
@ -1969,7 +1975,7 @@ static ase_awk_nde_t* __parse_unary (ase_awk_t* awk, ase_size_t line)
if (awk->parse.depth.max.expr > 0 && if (awk->parse.depth.max.expr > 0 &&
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr) awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
{ {
awk->errnum = ASE_AWK_ERECURSION; awk->errnum = ASE_AWK_ERECUR;
return ASE_NULL; return ASE_NULL;
} }
awk->parse.depth.cur.expr++; awk->parse.depth.cur.expr++;
@ -2024,7 +2030,7 @@ static ase_awk_nde_t* __parse_unary_exp (ase_awk_t* awk, ase_size_t line)
if (awk->parse.depth.max.expr > 0 && if (awk->parse.depth.max.expr > 0 &&
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr) awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
{ {
awk->errnum = ASE_AWK_ERECURSION; awk->errnum = ASE_AWK_ERECUR;
return ASE_NULL; return ASE_NULL;
} }
awk->parse.depth.cur.expr++; awk->parse.depth.cur.expr++;
@ -4254,7 +4260,9 @@ static int __get_char (ase_awk_t* awk)
awk->src.shared.buf, ASE_COUNTOF(awk->src.shared.buf)); awk->src.shared.buf, ASE_COUNTOF(awk->src.shared.buf));
if (n <= -1) if (n <= -1)
{ {
awk->errnum = ASE_AWK_ESRCINREAD; ase_awk_seterror (
awk, ASE_AWK_ESINRD, 0,
ASE_T("cannot read the source input"));
return -1; return -1;
} }
@ -4456,7 +4464,7 @@ static int __deparse (ase_awk_t* awk)
ASE_AWK_IO_OPEN, awk->src.ios.custom_data, ASE_NULL, 0); ASE_AWK_IO_OPEN, awk->src.ios.custom_data, ASE_NULL, 0);
if (op <= -1) if (op <= -1)
{ {
awk->errnum = ASE_AWK_ESRCOUTOPEN; awk->errnum = ASE_AWK_ESOUTOP;
return -1; return -1;
} }
@ -4486,7 +4494,7 @@ static int __deparse (ase_awk_t* awk)
ASE_AWK_ASSERT (awk, awk->tree.nglobals > 0); ASE_AWK_ASSERT (awk, awk->tree.nglobals > 0);
if (ase_awk_putsrcstr (awk, ASE_T("global ")) == -1) if (ase_awk_putsrcstr (awk, ASE_T("global ")) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
for (i = awk->tree.nbglobals; i < awk->tree.nglobals - 1; i++) for (i = awk->tree.nbglobals; i < awk->tree.nglobals - 1; i++)
{ {
@ -4495,17 +4503,17 @@ static int __deparse (ase_awk_t* awk)
10, ASE_T("__global"), tmp, ASE_COUNTOF(tmp)); 10, ASE_T("__global"), tmp, ASE_COUNTOF(tmp));
ASE_AWK_ASSERT (awk, len != (ase_size_t)-1); ASE_AWK_ASSERT (awk, len != (ase_size_t)-1);
if (ase_awk_putsrcstrx (awk, tmp, len) == -1) if (ase_awk_putsrcstrx (awk, tmp, len) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
*/ */
if (ase_awk_putsrcstrx (awk, if (ase_awk_putsrcstrx (awk,
awk->parse.globals.buf[i].name, awk->parse.globals.buf[i].name,
awk->parse.globals.buf[i].name_len) == -1) awk->parse.globals.buf[i].name_len) == -1)
{ {
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (ase_awk_putsrcstr (awk, ASE_T(", ")) == -1) if (ase_awk_putsrcstr (awk, ASE_T(", ")) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
/* /*
@ -4513,17 +4521,17 @@ static int __deparse (ase_awk_t* awk)
10, ASE_T("__global"), tmp, ASE_COUNTOF(tmp)); 10, ASE_T("__global"), tmp, ASE_COUNTOF(tmp));
ASE_AWK_ASSERT (awk, len != (ase_size_t)-1); ASE_AWK_ASSERT (awk, len != (ase_size_t)-1);
if (ase_awk_putsrcstrx (awk, tmp, len) == -1) if (ase_awk_putsrcstrx (awk, tmp, len) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
*/ */
if (ase_awk_putsrcstrx (awk, if (ase_awk_putsrcstrx (awk,
awk->parse.globals.buf[i].name, awk->parse.globals.buf[i].name,
awk->parse.globals.buf[i].name_len) == -1) awk->parse.globals.buf[i].name_len) == -1)
{ {
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (ase_awk_putsrcstr (awk, ASE_T(";\n\n")) == -1) if (ase_awk_putsrcstr (awk, ASE_T(";\n\n")) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
df.awk = awk; df.awk = awk;
@ -4532,19 +4540,19 @@ static int __deparse (ase_awk_t* awk)
if (ase_awk_map_walk (&awk->tree.afns, __deparse_func, &df) == -1) if (ase_awk_map_walk (&awk->tree.afns, __deparse_func, &df) == -1)
{ {
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (awk->tree.begin != ASE_NULL) if (awk->tree.begin != ASE_NULL)
{ {
if (ase_awk_putsrcstr (awk, ASE_T("BEGIN ")) == -1) if (ase_awk_putsrcstr (awk, ASE_T("BEGIN ")) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
if (ase_awk_prnpt (awk, awk->tree.begin) == -1) if (ase_awk_prnpt (awk, awk->tree.begin) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
if (__put_char (awk, ASE_T('\n')) == -1) if (__put_char (awk, ASE_T('\n')) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
chain = awk->tree.chain; chain = awk->tree.chain;
@ -4553,28 +4561,28 @@ static int __deparse (ase_awk_t* awk)
if (chain->pattern != ASE_NULL) if (chain->pattern != ASE_NULL)
{ {
if (ase_awk_prnptnpt (awk, chain->pattern) == -1) if (ase_awk_prnptnpt (awk, chain->pattern) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (chain->action == ASE_NULL) if (chain->action == ASE_NULL)
{ {
/* blockless pattern */ /* blockless pattern */
if (__put_char (awk, ASE_T('\n')) == -1) if (__put_char (awk, ASE_T('\n')) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
else else
{ {
if (chain->pattern != ASE_NULL) if (chain->pattern != ASE_NULL)
{ {
if (__put_char (awk, ASE_T(' ')) == -1) if (__put_char (awk, ASE_T(' ')) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (ase_awk_prnpt (awk, chain->action) == -1) if (ase_awk_prnpt (awk, chain->action) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (__put_char (awk, ASE_T('\n')) == -1) if (__put_char (awk, ASE_T('\n')) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
chain = chain->next; chain = chain->next;
} }
@ -4582,12 +4590,12 @@ static int __deparse (ase_awk_t* awk)
if (awk->tree.end != ASE_NULL) if (awk->tree.end != ASE_NULL)
{ {
if (ase_awk_putsrcstr (awk, ASE_T("END ")) == -1) if (ase_awk_putsrcstr (awk, ASE_T("END ")) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
if (ase_awk_prnpt (awk, awk->tree.end) == -1) if (ase_awk_prnpt (awk, awk->tree.end) == -1)
EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); EXIT_DEPARSE (ASE_AWK_ESOUTWR);
} }
if (__flush (awk) == -1) EXIT_DEPARSE (ASE_AWK_ESRCOUTWRITE); if (__flush (awk) == -1) EXIT_DEPARSE (ASE_AWK_ESOUTWR);
exit_deparse: exit_deparse:
if (awk->src.ios.out ( if (awk->src.ios.out (
@ -4595,7 +4603,7 @@ exit_deparse:
{ {
if (n == 0) if (n == 0)
{ {
awk->errnum = ASE_AWK_ESRCOUTCLOSE; awk->errnum = ASE_AWK_ESOUTWR;
n = -1; n = -1;
} }
} }