touched up code a bit more
This commit is contained in:
parent
ea9e068c01
commit
88d0fd919b
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.h 264 2009-08-23 12:56:45Z hyunghwan.chung $
|
* $Id: awk.h 265 2009-08-24 01:50:38Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||||
|
|
||||||
@ -96,8 +96,8 @@ struct qse_awk_tree_t
|
|||||||
int ok;
|
int ok;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct qse_awk_tok_loc_t qse_awk_tok_loc_t;
|
typedef struct qse_awk_loc_t qse_awk_loc_t;
|
||||||
struct qse_awk_tok_loc_t
|
struct qse_awk_loc_t
|
||||||
{
|
{
|
||||||
const qse_char_t* fil;
|
const qse_char_t* fil;
|
||||||
qse_size_t lin;
|
qse_size_t lin;
|
||||||
@ -107,9 +107,9 @@ struct qse_awk_tok_loc_t
|
|||||||
typedef struct qse_awk_tok_t qse_awk_tok_t;
|
typedef struct qse_awk_tok_t qse_awk_tok_t;
|
||||||
struct qse_awk_tok_t
|
struct qse_awk_tok_t
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
qse_str_t* name;
|
qse_str_t* name;
|
||||||
qse_awk_tok_loc_t loc;
|
qse_awk_loc_t loc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct qse_awk_t
|
struct qse_awk_t
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c 264 2009-08-23 12:56:45Z hyunghwan.chung $
|
* $Id: parse.c 265 2009-08-24 01:50:38Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||||
|
|
||||||
@ -157,16 +157,19 @@ static qse_awk_t* collect_locals (
|
|||||||
static qse_awk_nde_t* parse_function (qse_awk_t* awk);
|
static qse_awk_nde_t* parse_function (qse_awk_t* awk);
|
||||||
static qse_awk_nde_t* parse_begin (qse_awk_t* awk);
|
static qse_awk_nde_t* parse_begin (qse_awk_t* awk);
|
||||||
static qse_awk_nde_t* parse_end (qse_awk_t* awk);
|
static qse_awk_nde_t* parse_end (qse_awk_t* awk);
|
||||||
static qse_awk_chain_t* parse_pattern_block (
|
static qse_awk_chain_t* parse_action_block (
|
||||||
qse_awk_t* awk, qse_awk_nde_t* ptn, qse_bool_t blockless);
|
qse_awk_t* awk, qse_awk_nde_t* ptn, qse_bool_t blockless);
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_block_dc (qse_awk_t* awk, qse_size_t line, qse_bool_t istop);
|
static qse_awk_nde_t* parse_block_dc (
|
||||||
static qse_awk_nde_t* parse_statement (qse_awk_t* awk, qse_size_t line);
|
qse_awk_t* awk, const qse_awk_loc_t* xloc, qse_bool_t istop);
|
||||||
static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line);
|
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_expression (qse_awk_t* awk, qse_size_t line);
|
static qse_awk_nde_t* parse_stmt (
|
||||||
static qse_awk_nde_t* parse_expression0 (qse_awk_t* awk, qse_size_t line);
|
qse_awk_t* awk, const qse_awk_loc_t* xloc);
|
||||||
static qse_awk_nde_t* parse_basic_expr (qse_awk_t* awk, qse_size_t line);
|
static qse_awk_nde_t* parse_stmt_nb (
|
||||||
|
qse_awk_t* awk, const qse_awk_loc_t* xloc);
|
||||||
|
|
||||||
|
static qse_awk_nde_t* parse_expr_dc (
|
||||||
|
qse_awk_t* awk, const qse_awk_loc_t* xloc);
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_binary_expr (
|
static qse_awk_nde_t* parse_binary_expr (
|
||||||
qse_awk_t* awk, qse_size_t line, int skipnl, const binmap_t* binmap,
|
qse_awk_t* awk, qse_size_t line, int skipnl, const binmap_t* binmap,
|
||||||
@ -910,7 +913,7 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
awk->parse.id.block = PARSE_ACTION_BLOCK;
|
awk->parse.id.block = PARSE_ACTION_BLOCK;
|
||||||
if (parse_pattern_block (
|
if (parse_action_block (
|
||||||
awk, QSE_NULL, QSE_FALSE) == QSE_NULL) return QSE_NULL;
|
awk, QSE_NULL, QSE_FALSE) == QSE_NULL) return QSE_NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -934,7 +937,10 @@ retry:
|
|||||||
|
|
||||||
awk->parse.id.block = PARSE_PATTERN;
|
awk->parse.id.block = PARSE_PATTERN;
|
||||||
|
|
||||||
ptn = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
ptn = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (ptn == QSE_NULL) return QSE_NULL;
|
if (ptn == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
QSE_ASSERT (ptn->next == QSE_NULL);
|
QSE_ASSERT (ptn->next == QSE_NULL);
|
||||||
@ -947,7 +953,10 @@ retry:
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptn->next = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
ptn->next = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (ptn->next == QSE_NULL)
|
if (ptn->next == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, ptn);
|
qse_awk_clrpt (awk, ptn);
|
||||||
@ -962,7 +971,7 @@ retry:
|
|||||||
qse_size_t tline = awk->ptok.loc.lin;
|
qse_size_t tline = awk->ptok.loc.lin;
|
||||||
|
|
||||||
awk->parse.id.block = PARSE_ACTION_BLOCK;
|
awk->parse.id.block = PARSE_ACTION_BLOCK;
|
||||||
if (parse_pattern_block(awk,ptn,QSE_TRUE) == QSE_NULL)
|
if (parse_action_block (awk, ptn, QSE_TRUE) == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, ptn);
|
qse_awk_clrpt (awk, ptn);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
@ -1000,8 +1009,7 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
awk->parse.id.block = PARSE_ACTION_BLOCK;
|
awk->parse.id.block = PARSE_ACTION_BLOCK;
|
||||||
if (parse_pattern_block (
|
if (parse_action_block (awk, ptn, QSE_FALSE) == QSE_NULL)
|
||||||
awk, ptn, QSE_FALSE) == QSE_NULL)
|
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, ptn);
|
qse_awk_clrpt (awk, ptn);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
@ -1247,7 +1255,10 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
|||||||
awk->tree.cur_fun.len = name_len;
|
awk->tree.cur_fun.len = name_len;
|
||||||
|
|
||||||
/* actual function body */
|
/* actual function body */
|
||||||
body = parse_block_dc (awk, awk->ptok.loc.lin, QSE_TRUE);
|
{
|
||||||
|
qse_awk_loc_t xloc = awk->ptok.loc;
|
||||||
|
body = parse_block_dc (awk, &xloc, QSE_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
/* clear the current function name remembered */
|
/* clear the current function name remembered */
|
||||||
awk->tree.cur_fun.ptr = QSE_NULL;
|
awk->tree.cur_fun.ptr = QSE_NULL;
|
||||||
@ -1309,11 +1320,12 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
|||||||
static qse_awk_nde_t* parse_begin (qse_awk_t* awk)
|
static qse_awk_nde_t* parse_begin (qse_awk_t* awk)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde;
|
qse_awk_nde_t* nde;
|
||||||
|
qse_awk_loc_t xloc = awk->tok.loc;
|
||||||
|
|
||||||
QSE_ASSERT (MATCH(awk,TOK_LBRACE));
|
QSE_ASSERT (MATCH(awk,TOK_LBRACE));
|
||||||
|
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_block_dc (awk, awk->ptok.loc.lin, QSE_TRUE);
|
nde = parse_block_dc (awk, &xloc, QSE_TRUE);
|
||||||
if (nde == QSE_NULL) return QSE_NULL;
|
if (nde == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (awk->tree.begin == QSE_NULL)
|
if (awk->tree.begin == QSE_NULL)
|
||||||
@ -1333,11 +1345,12 @@ static qse_awk_nde_t* parse_begin (qse_awk_t* awk)
|
|||||||
static qse_awk_nde_t* parse_end (qse_awk_t* awk)
|
static qse_awk_nde_t* parse_end (qse_awk_t* awk)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde;
|
qse_awk_nde_t* nde;
|
||||||
|
qse_awk_loc_t xloc = awk->tok.loc;
|
||||||
|
|
||||||
QSE_ASSERT (MATCH(awk,TOK_LBRACE));
|
QSE_ASSERT (MATCH(awk,TOK_LBRACE));
|
||||||
|
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_block_dc (awk, awk->ptok.loc.lin, QSE_TRUE);
|
nde = parse_block_dc (awk, &xloc, QSE_TRUE);
|
||||||
if (nde == QSE_NULL) return QSE_NULL;
|
if (nde == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (awk->tree.end == QSE_NULL)
|
if (awk->tree.end == QSE_NULL)
|
||||||
@ -1353,19 +1366,19 @@ static qse_awk_nde_t* parse_end (qse_awk_t* awk)
|
|||||||
return nde;
|
return nde;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_awk_chain_t* parse_pattern_block (
|
static qse_awk_chain_t* parse_action_block (
|
||||||
qse_awk_t* awk, qse_awk_nde_t* ptn, qse_bool_t blockless)
|
qse_awk_t* awk, qse_awk_nde_t* ptn, qse_bool_t blockless)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde;
|
qse_awk_nde_t* nde;
|
||||||
qse_awk_chain_t* chain;
|
qse_awk_chain_t* chain;
|
||||||
qse_size_t line = awk->tok.loc.lin;
|
qse_awk_loc_t xloc = awk->tok.loc;
|
||||||
|
|
||||||
if (blockless) nde = QSE_NULL;
|
if (blockless) nde = QSE_NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QSE_ASSERT (MATCH(awk,TOK_LBRACE));
|
QSE_ASSERT (MATCH(awk,TOK_LBRACE));
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_block_dc (awk, line, QSE_TRUE);
|
nde = parse_block_dc (awk, &xloc, QSE_TRUE);
|
||||||
if (nde == QSE_NULL) return QSE_NULL;
|
if (nde == QSE_NULL) return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1374,8 +1387,7 @@ static qse_awk_chain_t* parse_pattern_block (
|
|||||||
if (chain == QSE_NULL)
|
if (chain == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, nde);
|
qse_awk_clrpt (awk, nde);
|
||||||
|
SETERR_LOC (awk, QSE_AWK_ENOMEM, xloc.lin);
|
||||||
SETERR_LOC (awk, QSE_AWK_ENOMEM, line);
|
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1400,7 +1412,7 @@ static qse_awk_chain_t* parse_pattern_block (
|
|||||||
}
|
}
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_block (
|
static qse_awk_nde_t* parse_block (
|
||||||
qse_awk_t* awk, qse_size_t line, qse_bool_t istop)
|
qse_awk_t* awk, const qse_awk_loc_t* xloc, qse_bool_t istop)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* head, * curr, * nde;
|
qse_awk_nde_t* head, * curr, * nde;
|
||||||
qse_awk_nde_blk_t* block;
|
qse_awk_nde_blk_t* block;
|
||||||
@ -1480,7 +1492,11 @@ static qse_awk_nde_t* parse_block (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* parse an actual statement in a block */
|
/* parse an actual statement in a block */
|
||||||
nde = parse_statement (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t sloc = awk->tok.loc;
|
||||||
|
nde = parse_stmt (awk, &sloc);
|
||||||
|
}
|
||||||
|
|
||||||
if (nde == QSE_NULL)
|
if (nde == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_lda_delete (
|
qse_lda_delete (
|
||||||
@ -1518,7 +1534,7 @@ static qse_awk_nde_t* parse_block (
|
|||||||
QSE_LDA_SIZE(awk->parse.lcls)-nlcls);
|
QSE_LDA_SIZE(awk->parse.lcls)-nlcls);
|
||||||
qse_awk_clrpt (awk, head);
|
qse_awk_clrpt (awk, head);
|
||||||
|
|
||||||
SETERR_LOC (awk, QSE_AWK_ENOMEM, line);
|
SETERR_LOC (awk, QSE_AWK_ENOMEM, xloc->lin);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1532,7 +1548,7 @@ static qse_awk_nde_t* parse_block (
|
|||||||
/* if (head == QSE_NULL) tmp = 0; */
|
/* if (head == QSE_NULL) tmp = 0; */
|
||||||
|
|
||||||
block->type = QSE_AWK_NDE_BLK;
|
block->type = QSE_AWK_NDE_BLK;
|
||||||
block->line = line;
|
block->line = xloc->lin;
|
||||||
block->next = QSE_NULL;
|
block->next = QSE_NULL;
|
||||||
block->body = head;
|
block->body = head;
|
||||||
|
|
||||||
@ -1556,19 +1572,19 @@ static qse_awk_nde_t* parse_block (
|
|||||||
}
|
}
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_block_dc (
|
static qse_awk_nde_t* parse_block_dc (
|
||||||
qse_awk_t* awk, qse_size_t line, qse_bool_t istop)
|
qse_awk_t* awk, const qse_awk_loc_t* xloc, qse_bool_t istop)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde;
|
qse_awk_nde_t* nde;
|
||||||
|
|
||||||
if (awk->parse.depth.max.block > 0 &&
|
if (awk->parse.depth.max.block > 0 &&
|
||||||
awk->parse.depth.cur.block >= awk->parse.depth.max.block)
|
awk->parse.depth.cur.block >= awk->parse.depth.max.block)
|
||||||
{
|
{
|
||||||
SETERR_LOC (awk, QSE_AWK_EBLKNST, awk->ptok.loc.lin);
|
SETERR_LOC (awk, QSE_AWK_EBLKNST, xloc->lin);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
awk->parse.depth.cur.block++;
|
awk->parse.depth.cur.block++;
|
||||||
nde = parse_block (awk, line, istop);
|
nde = parse_block (awk, xloc, istop);
|
||||||
awk->parse.depth.cur.block--;
|
awk->parse.depth.cur.block--;
|
||||||
|
|
||||||
return nde;
|
return nde;
|
||||||
@ -2019,7 +2035,8 @@ static qse_awk_t* collect_locals (
|
|||||||
return awk;
|
return awk;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_statement (qse_awk_t* awk, qse_size_t line)
|
static qse_awk_nde_t* parse_stmt (
|
||||||
|
qse_awk_t* awk, const qse_awk_loc_t* xloc)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde;
|
qse_awk_nde_t* nde;
|
||||||
|
|
||||||
@ -2036,12 +2053,12 @@ static qse_awk_nde_t* parse_statement (qse_awk_t* awk, qse_size_t line)
|
|||||||
QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_nde_t));
|
QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_nde_t));
|
||||||
if (nde == QSE_NULL)
|
if (nde == QSE_NULL)
|
||||||
{
|
{
|
||||||
SETERR_LOC (awk, QSE_AWK_ENOMEM, line);
|
SETERR_LOC (awk, QSE_AWK_ENOMEM, xloc->lin);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nde->type = QSE_AWK_NDE_NULL;
|
nde->type = QSE_AWK_NDE_NULL;
|
||||||
nde->line = line;
|
nde->line = xloc->lin;
|
||||||
nde->next = QSE_NULL;
|
nde->next = QSE_NULL;
|
||||||
|
|
||||||
if (get_token(awk) <= -1)
|
if (get_token(awk) <= -1)
|
||||||
@ -2053,17 +2070,17 @@ static qse_awk_nde_t* parse_statement (qse_awk_t* awk, qse_size_t line)
|
|||||||
else if (MATCH(awk,TOK_LBRACE))
|
else if (MATCH(awk,TOK_LBRACE))
|
||||||
{
|
{
|
||||||
/* a block statemnt { ... } */
|
/* a block statemnt { ... } */
|
||||||
|
qse_awk_loc_t xloc = awk->ptok.loc;
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_block_dc (
|
nde = parse_block_dc (awk, &xloc, QSE_FALSE);
|
||||||
awk, awk->ptok.loc.lin, QSE_FALSE);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* the statement id held in awk->parse.id.stmnt denotes
|
/* the statement id held in awk->parse.id.stmnt denotes
|
||||||
* the token id of the statement currently being parsed.
|
* the token id of the statement currently being parsed.
|
||||||
* the current statement id is saved here because the
|
* the current statement id is saved here because the
|
||||||
* statement id can be changed in parse_statement_nb.
|
* statement id can be changed in parse_stmt_nb.
|
||||||
* it will, in turn, call parse_statement which will
|
* it will, in turn, call parse_stmt which will
|
||||||
* eventually change the statement id. */
|
* eventually change the statement id. */
|
||||||
int old_id = awk->parse.id.stmnt;
|
int old_id = awk->parse.id.stmnt;
|
||||||
|
|
||||||
@ -2071,7 +2088,7 @@ static qse_awk_nde_t* parse_statement (qse_awk_t* awk, qse_size_t line)
|
|||||||
awk->parse.id.stmnt = awk->tok.type;
|
awk->parse.id.stmnt = awk->tok.type;
|
||||||
|
|
||||||
/* proceed parsing the statement */
|
/* proceed parsing the statement */
|
||||||
nde = parse_statement_nb (awk, line);
|
nde = parse_stmt_nb (awk, xloc);
|
||||||
|
|
||||||
/* restore the statement id saved previously */
|
/* restore the statement id saved previously */
|
||||||
awk->parse.id.stmnt = old_id;
|
awk->parse.id.stmnt = old_id;
|
||||||
@ -2081,7 +2098,8 @@ static qse_awk_nde_t* parse_statement (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* parse a non-block statement */
|
/* parse a non-block statement */
|
||||||
static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line)
|
static qse_awk_nde_t* parse_stmt_nb (
|
||||||
|
qse_awk_t* awk, const qse_awk_loc_t* xloc)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde;
|
qse_awk_nde_t* nde;
|
||||||
|
|
||||||
@ -2089,14 +2107,14 @@ static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line)
|
|||||||
if (MATCH(awk,TOK_IF))
|
if (MATCH(awk,TOK_IF))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
return parse_if (awk, line);
|
return parse_if (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_WHILE))
|
else if (MATCH(awk,TOK_WHILE))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
awk->parse.depth.cur.loop++;
|
awk->parse.depth.cur.loop++;
|
||||||
nde = parse_while (awk, line);
|
nde = parse_while (awk, xloc->lin);
|
||||||
awk->parse.depth.cur.loop--;
|
awk->parse.depth.cur.loop--;
|
||||||
|
|
||||||
return nde;
|
return nde;
|
||||||
@ -2106,7 +2124,7 @@ static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line)
|
|||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
awk->parse.depth.cur.loop++;
|
awk->parse.depth.cur.loop++;
|
||||||
nde = parse_for (awk, line);
|
nde = parse_for (awk, xloc->lin);
|
||||||
awk->parse.depth.cur.loop--;
|
awk->parse.depth.cur.loop--;
|
||||||
|
|
||||||
return nde;
|
return nde;
|
||||||
@ -2118,7 +2136,7 @@ static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line)
|
|||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
awk->parse.depth.cur.loop++;
|
awk->parse.depth.cur.loop++;
|
||||||
nde = parse_dowhile (awk, line);
|
nde = parse_dowhile (awk, xloc->lin);
|
||||||
awk->parse.depth.cur.loop--;
|
awk->parse.depth.cur.loop--;
|
||||||
|
|
||||||
return nde;
|
return nde;
|
||||||
@ -2126,61 +2144,61 @@ static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line)
|
|||||||
else if (MATCH(awk,TOK_BREAK))
|
else if (MATCH(awk,TOK_BREAK))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_break (awk, line);
|
nde = parse_break (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_CONTINUE))
|
else if (MATCH(awk,TOK_CONTINUE))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_continue (awk, line);
|
nde = parse_continue (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_RETURN))
|
else if (MATCH(awk,TOK_RETURN))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_return (awk, line);
|
nde = parse_return (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_EXIT))
|
else if (MATCH(awk,TOK_EXIT))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_exit (awk, line);
|
nde = parse_exit (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_NEXT))
|
else if (MATCH(awk,TOK_NEXT))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_next (awk, line);
|
nde = parse_next (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_NEXTFILE))
|
else if (MATCH(awk,TOK_NEXTFILE))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_nextfile (awk, line, 0);
|
nde = parse_nextfile (awk, xloc->lin, 0);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_NEXTOFILE))
|
else if (MATCH(awk,TOK_NEXTOFILE))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_nextfile (awk, line, 1);
|
nde = parse_nextfile (awk, xloc->lin, 1);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_DELETE))
|
else if (MATCH(awk,TOK_DELETE))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_delete (awk, line);
|
nde = parse_delete (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_RESET))
|
else if (MATCH(awk,TOK_RESET))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_reset (awk, line);
|
nde = parse_reset (awk, xloc->lin);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_PRINT))
|
else if (MATCH(awk,TOK_PRINT))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_print (awk, line, QSE_AWK_NDE_PRINT);
|
nde = parse_print (awk, xloc->lin, QSE_AWK_NDE_PRINT);
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOK_PRINTF))
|
else if (MATCH(awk,TOK_PRINTF))
|
||||||
{
|
{
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
nde = parse_print (awk, line, QSE_AWK_NDE_PRINTF);
|
nde = parse_print (awk, xloc->lin, QSE_AWK_NDE_PRINTF);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nde = parse_expression (awk, line);
|
nde = parse_expr_dc (awk, xloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nde == QSE_NULL) return QSE_NULL;
|
if (nde == QSE_NULL) return QSE_NULL;
|
||||||
@ -2209,24 +2227,6 @@ static qse_awk_nde_t* parse_statement_nb (qse_awk_t* awk, qse_size_t line)
|
|||||||
return nde;
|
return nde;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_expression (qse_awk_t* awk, qse_size_t line)
|
|
||||||
{
|
|
||||||
qse_awk_nde_t* nde;
|
|
||||||
|
|
||||||
if (awk->parse.depth.max.expr > 0 &&
|
|
||||||
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
|
|
||||||
{
|
|
||||||
SETERR_LOC (awk, QSE_AWK_EEXPRNST, line);
|
|
||||||
return QSE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
awk->parse.depth.cur.expr++;
|
|
||||||
nde = parse_expression0 (awk, line);
|
|
||||||
awk->parse.depth.cur.expr--;
|
|
||||||
|
|
||||||
return nde;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int assign_to_opcode (qse_awk_t* awk)
|
static int assign_to_opcode (qse_awk_t* awk)
|
||||||
{
|
{
|
||||||
/* synchronize it with qse_awk_assop_type_t in run.h */
|
/* synchronize it with qse_awk_assop_type_t in run.h */
|
||||||
@ -2256,70 +2256,12 @@ static int assign_to_opcode (qse_awk_t* awk)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_expression0 (qse_awk_t* awk, qse_size_t line)
|
static qse_awk_nde_t* parse_expr_basic (
|
||||||
{
|
qse_awk_t* awk, const qse_awk_loc_t* xloc)
|
||||||
qse_awk_nde_t* x, * y;
|
|
||||||
qse_awk_nde_ass_t* nde;
|
|
||||||
int opcode;
|
|
||||||
|
|
||||||
x = parse_basic_expr (awk, line);
|
|
||||||
if (x == QSE_NULL) return QSE_NULL;
|
|
||||||
|
|
||||||
opcode = assign_to_opcode (awk);
|
|
||||||
if (opcode <= -1)
|
|
||||||
{
|
|
||||||
/* no assignment operator found. */
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
QSE_ASSERT (x->next == QSE_NULL);
|
|
||||||
if (!is_var(x) && x->type != QSE_AWK_NDE_POS)
|
|
||||||
{
|
|
||||||
qse_awk_clrpt (awk, x);
|
|
||||||
SETERR_LOC (awk, QSE_AWK_EASSIGN, line);
|
|
||||||
return QSE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (get_token(awk) <= -1)
|
|
||||||
{
|
|
||||||
qse_awk_clrpt (awk, x);
|
|
||||||
return QSE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*y = parse_basic_expr (awk);*/
|
|
||||||
y = parse_expression (awk, awk->tok.loc.lin);
|
|
||||||
if (y == QSE_NULL)
|
|
||||||
{
|
|
||||||
qse_awk_clrpt (awk, x);
|
|
||||||
return QSE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
nde = (qse_awk_nde_ass_t*)
|
|
||||||
QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_nde_ass_t));
|
|
||||||
if (nde == QSE_NULL)
|
|
||||||
{
|
|
||||||
qse_awk_clrpt (awk, x);
|
|
||||||
qse_awk_clrpt (awk, y);
|
|
||||||
|
|
||||||
SETERR_LOC (awk, QSE_AWK_ENOMEM, line);
|
|
||||||
return QSE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
nde->type = QSE_AWK_NDE_ASS;
|
|
||||||
nde->line = line;
|
|
||||||
nde->next = QSE_NULL;
|
|
||||||
nde->opcode = opcode;
|
|
||||||
nde->left = x;
|
|
||||||
nde->right = y;
|
|
||||||
|
|
||||||
return (qse_awk_nde_t*)nde;
|
|
||||||
}
|
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_basic_expr (qse_awk_t* awk, qse_size_t line)
|
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* nde, * n1, * n2;
|
qse_awk_nde_t* nde, * n1, * n2;
|
||||||
|
|
||||||
nde = parse_logical_or (awk, line);
|
nde = parse_logical_or (awk, xloc->lin);
|
||||||
if (nde == QSE_NULL) return QSE_NULL;
|
if (nde == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (MATCH(awk,TOK_QUEST))
|
if (MATCH(awk,TOK_QUEST))
|
||||||
@ -2328,8 +2270,10 @@ static qse_awk_nde_t* parse_basic_expr (qse_awk_t* awk, qse_size_t line)
|
|||||||
|
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
/*n1 = parse_basic_expr (awk, awk->tok.loc.lin);*/
|
{
|
||||||
n1 = parse_expression (awk, awk->tok.loc.lin);
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
n1 = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (n1 == QSE_NULL)
|
if (n1 == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, nde);
|
qse_awk_clrpt (awk, nde);
|
||||||
@ -2343,8 +2287,10 @@ static qse_awk_nde_t* parse_basic_expr (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
/*n2 = parse_basic_expr (awk, awk->tok.loc.lin);*/
|
{
|
||||||
n2 = parse_expression (awk, awk->tok.loc.lin);
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
n2 = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (n2 == QSE_NULL)
|
if (n2 == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, nde);
|
qse_awk_clrpt (awk, nde);
|
||||||
@ -2359,13 +2305,12 @@ static qse_awk_nde_t* parse_basic_expr (qse_awk_t* awk, qse_size_t line)
|
|||||||
qse_awk_clrpt (awk, nde);
|
qse_awk_clrpt (awk, nde);
|
||||||
qse_awk_clrpt (awk, n1);
|
qse_awk_clrpt (awk, n1);
|
||||||
qse_awk_clrpt (awk, n2);
|
qse_awk_clrpt (awk, n2);
|
||||||
|
SETERR_LOC (awk, QSE_AWK_ENOMEM, xloc->lin);
|
||||||
SETERR_LOC (awk, QSE_AWK_ENOMEM, line);
|
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp->type = QSE_AWK_NDE_CND;
|
tmp->type = QSE_AWK_NDE_CND;
|
||||||
tmp->line = line;
|
tmp->line = xloc->lin;
|
||||||
tmp->next = QSE_NULL;
|
tmp->next = QSE_NULL;
|
||||||
tmp->test = nde;
|
tmp->test = nde;
|
||||||
tmp->left = n1;
|
tmp->left = n1;
|
||||||
@ -2377,6 +2322,87 @@ static qse_awk_nde_t* parse_basic_expr (qse_awk_t* awk, qse_size_t line)
|
|||||||
return nde;
|
return nde;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static qse_awk_nde_t* parse_expr (
|
||||||
|
qse_awk_t* awk, const qse_awk_loc_t* xloc)
|
||||||
|
{
|
||||||
|
qse_awk_nde_t* x, * y;
|
||||||
|
qse_awk_nde_ass_t* nde;
|
||||||
|
int opcode;
|
||||||
|
|
||||||
|
x = parse_expr_basic (awk, xloc);
|
||||||
|
if (x == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
|
opcode = assign_to_opcode (awk);
|
||||||
|
if (opcode <= -1)
|
||||||
|
{
|
||||||
|
/* no assignment operator found. */
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSE_ASSERT (x->next == QSE_NULL);
|
||||||
|
if (!is_var(x) && x->type != QSE_AWK_NDE_POS)
|
||||||
|
{
|
||||||
|
qse_awk_clrpt (awk, x);
|
||||||
|
SETERR_LOC (awk, QSE_AWK_EASSIGN, xloc->lin);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (get_token(awk) <= -1)
|
||||||
|
{
|
||||||
|
qse_awk_clrpt (awk, x);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
y = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
|
if (y == QSE_NULL)
|
||||||
|
{
|
||||||
|
qse_awk_clrpt (awk, x);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nde = (qse_awk_nde_ass_t*)
|
||||||
|
QSE_AWK_ALLOC (awk, QSE_SIZEOF(qse_awk_nde_ass_t));
|
||||||
|
if (nde == QSE_NULL)
|
||||||
|
{
|
||||||
|
qse_awk_clrpt (awk, x);
|
||||||
|
qse_awk_clrpt (awk, y);
|
||||||
|
|
||||||
|
SETERR_LOC (awk, QSE_AWK_ENOMEM, xloc->lin);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nde->type = QSE_AWK_NDE_ASS;
|
||||||
|
nde->line = xloc->lin;
|
||||||
|
nde->next = QSE_NULL;
|
||||||
|
nde->opcode = opcode;
|
||||||
|
nde->left = x;
|
||||||
|
nde->right = y;
|
||||||
|
|
||||||
|
return (qse_awk_nde_t*)nde;
|
||||||
|
}
|
||||||
|
|
||||||
|
static qse_awk_nde_t* parse_expr_dc (
|
||||||
|
qse_awk_t* awk, const qse_awk_loc_t* xloc)
|
||||||
|
{
|
||||||
|
qse_awk_nde_t* nde;
|
||||||
|
|
||||||
|
if (awk->parse.depth.max.expr > 0 &&
|
||||||
|
awk->parse.depth.cur.expr >= awk->parse.depth.max.expr)
|
||||||
|
{
|
||||||
|
SETERR_LOC (awk, QSE_AWK_EEXPRNST, xloc->lin);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
awk->parse.depth.cur.expr++;
|
||||||
|
nde = parse_expr (awk, xloc);
|
||||||
|
awk->parse.depth.cur.expr--;
|
||||||
|
|
||||||
|
return nde;
|
||||||
|
}
|
||||||
|
|
||||||
static qse_awk_nde_t* parse_binary_expr (
|
static qse_awk_nde_t* parse_binary_expr (
|
||||||
qse_awk_t* awk, qse_size_t line, int skipnl, const binmap_t* binmap,
|
qse_awk_t* awk, qse_size_t line, int skipnl, const binmap_t* binmap,
|
||||||
qse_awk_nde_t*(*next_level_func)(qse_awk_t*,qse_size_t))
|
qse_awk_nde_t*(*next_level_func)(qse_awk_t*,qse_size_t))
|
||||||
@ -3116,7 +3142,10 @@ static qse_awk_nde_t* parse_primary_nogetline (qse_awk_t* awk, qse_size_t line)
|
|||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
/* parse the sub-expression inside the parentheses */
|
/* parse the sub-expression inside the parentheses */
|
||||||
nde = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
nde = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (nde == QSE_NULL) return QSE_NULL;
|
if (nde == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
/* parse subsequent expressions separated by a comma, if any */
|
/* parse subsequent expressions separated by a comma, if any */
|
||||||
@ -3137,7 +3166,10 @@ static qse_awk_nde_t* parse_primary_nogetline (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
while (MATCH(awk,TOK_NEWLINE));
|
while (MATCH(awk,TOK_NEWLINE));
|
||||||
|
|
||||||
tmp = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
tmp = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (tmp == QSE_NULL)
|
if (tmp == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, nde);
|
qse_awk_clrpt (awk, nde);
|
||||||
@ -3230,7 +3262,7 @@ static qse_awk_nde_t* parse_primary_nogetline (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: is this correct? */
|
/* TODO: is this correct? */
|
||||||
/*in = parse_expression (awk);*/
|
/*in = parse_expr_dc (awk);*/
|
||||||
in = parse_primary (awk, awk->tok.loc.lin);
|
in = parse_primary (awk, awk->tok.loc.lin);
|
||||||
if (in == QSE_NULL)
|
if (in == QSE_NULL)
|
||||||
{
|
{
|
||||||
@ -3646,7 +3678,10 @@ static qse_awk_nde_t* parse_hashidx (
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
tmp = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (tmp == QSE_NULL)
|
if (tmp == QSE_NULL)
|
||||||
{
|
{
|
||||||
if (idx != QSE_NULL) qse_awk_clrpt (awk, idx);
|
if (idx != QSE_NULL) qse_awk_clrpt (awk, idx);
|
||||||
@ -3825,7 +3860,10 @@ static qse_awk_nde_t* parse_fncall (
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
nde = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
nde = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (nde == QSE_NULL)
|
if (nde == QSE_NULL)
|
||||||
{
|
{
|
||||||
if (head != QSE_NULL) qse_awk_clrpt (awk, head);
|
if (head != QSE_NULL) qse_awk_clrpt (awk, head);
|
||||||
@ -3948,7 +3986,10 @@ static qse_awk_nde_t* parse_if (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
test = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
test = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (test == QSE_NULL) return QSE_NULL;
|
if (test == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (!MATCH(awk,TOK_RPAREN))
|
if (!MATCH(awk,TOK_RPAREN))
|
||||||
@ -3965,7 +4006,10 @@ static qse_awk_nde_t* parse_if (qse_awk_t* awk, qse_size_t line)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
then_part = parse_statement (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t tloc = awk->tok.loc;
|
||||||
|
then_part = parse_stmt (awk, &tloc);
|
||||||
|
}
|
||||||
if (then_part == QSE_NULL)
|
if (then_part == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, test);
|
qse_awk_clrpt (awk, test);
|
||||||
@ -3992,7 +4036,10 @@ static qse_awk_nde_t* parse_if (qse_awk_t* awk, qse_size_t line)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
else_part = parse_statement (awk, awk->ptok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
else_part = parse_stmt (awk, &eloc);
|
||||||
|
}
|
||||||
if (else_part == QSE_NULL)
|
if (else_part == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, then_part);
|
qse_awk_clrpt (awk, then_part);
|
||||||
@ -4036,13 +4083,15 @@ static qse_awk_nde_t* parse_while (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
if (get_token(awk) <= -1) return QSE_NULL;
|
if (get_token(awk) <= -1) return QSE_NULL;
|
||||||
|
|
||||||
test = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
test = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (test == QSE_NULL) return QSE_NULL;
|
if (test == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (!MATCH(awk,TOK_RPAREN))
|
if (!MATCH(awk,TOK_RPAREN))
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, test);
|
qse_awk_clrpt (awk, test);
|
||||||
|
|
||||||
SETERR_TOK (awk, QSE_AWK_ERPAREN);
|
SETERR_TOK (awk, QSE_AWK_ERPAREN);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
@ -4053,7 +4102,10 @@ static qse_awk_nde_t* parse_while (qse_awk_t* awk, qse_size_t line)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
body = parse_statement (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t wloc = awk->tok.loc;
|
||||||
|
body = parse_stmt (awk, &wloc);
|
||||||
|
}
|
||||||
if (body == QSE_NULL)
|
if (body == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, test);
|
qse_awk_clrpt (awk, test);
|
||||||
@ -4101,14 +4153,17 @@ static qse_awk_nde_t* parse_for (qse_awk_t* awk, qse_size_t line)
|
|||||||
* is wrapped by a parenthesis */
|
* is wrapped by a parenthesis */
|
||||||
int no_foreach = MATCH(awk,TOK_LPAREN);
|
int no_foreach = MATCH(awk,TOK_LPAREN);
|
||||||
|
|
||||||
init = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
init = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (init == QSE_NULL) return QSE_NULL;
|
if (init == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
if (!no_foreach && init->type == QSE_AWK_NDE_EXP_BIN &&
|
if (!no_foreach && init->type == QSE_AWK_NDE_EXP_BIN &&
|
||||||
((qse_awk_nde_exp_t*)init)->opcode == QSE_AWK_BINOP_IN &&
|
((qse_awk_nde_exp_t*)init)->opcode == QSE_AWK_BINOP_IN &&
|
||||||
is_plain_var(((qse_awk_nde_exp_t*)init)->left))
|
is_plain_var(((qse_awk_nde_exp_t*)init)->left))
|
||||||
{
|
{
|
||||||
/* switch to foreach */
|
/* switch to foreach - for (x in y) */
|
||||||
|
|
||||||
if (!MATCH(awk,TOK_RPAREN))
|
if (!MATCH(awk,TOK_RPAREN))
|
||||||
{
|
{
|
||||||
@ -4123,7 +4178,10 @@ static qse_awk_nde_t* parse_for (qse_awk_t* awk, qse_size_t line)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
body = parse_statement (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t floc = awk->tok.loc;
|
||||||
|
body = parse_stmt (awk, &floc);
|
||||||
|
}
|
||||||
if (body == QSE_NULL)
|
if (body == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, init);
|
qse_awk_clrpt (awk, init);
|
||||||
@ -4173,7 +4231,10 @@ static qse_awk_nde_t* parse_for (qse_awk_t* awk, qse_size_t line)
|
|||||||
if (MATCH(awk,TOK_SEMICOLON)) test = QSE_NULL;
|
if (MATCH(awk,TOK_SEMICOLON)) test = QSE_NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
test = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
test = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (test == QSE_NULL)
|
if (test == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, init);
|
qse_awk_clrpt (awk, init);
|
||||||
@ -4206,7 +4267,10 @@ static qse_awk_nde_t* parse_for (qse_awk_t* awk, qse_size_t line)
|
|||||||
if (MATCH(awk,TOK_RPAREN)) incr = QSE_NULL;
|
if (MATCH(awk,TOK_RPAREN)) incr = QSE_NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
incr = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
incr = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (incr == QSE_NULL)
|
if (incr == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, init);
|
qse_awk_clrpt (awk, init);
|
||||||
@ -4233,7 +4297,10 @@ static qse_awk_nde_t* parse_for (qse_awk_t* awk, qse_size_t line)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
body = parse_statement (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t floc = awk->tok.loc;
|
||||||
|
body = parse_stmt (awk, &floc);
|
||||||
|
}
|
||||||
if (body == QSE_NULL)
|
if (body == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, init);
|
qse_awk_clrpt (awk, init);
|
||||||
@ -4273,7 +4340,10 @@ static qse_awk_nde_t* parse_dowhile (qse_awk_t* awk, qse_size_t line)
|
|||||||
|
|
||||||
QSE_ASSERT (awk->ptok.type == TOK_DO);
|
QSE_ASSERT (awk->ptok.type == TOK_DO);
|
||||||
|
|
||||||
body = parse_statement (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t dwloc = awk->tok.loc;
|
||||||
|
body = parse_stmt (awk, &dwloc);
|
||||||
|
}
|
||||||
if (body == QSE_NULL) return QSE_NULL;
|
if (body == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
while (MATCH(awk,TOK_NEWLINE))
|
while (MATCH(awk,TOK_NEWLINE))
|
||||||
@ -4313,7 +4383,10 @@ static qse_awk_nde_t* parse_dowhile (qse_awk_t* awk, qse_size_t line)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
test = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
test = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (test == QSE_NULL)
|
if (test == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, body);
|
qse_awk_clrpt (awk, body);
|
||||||
@ -4434,7 +4507,10 @@ static qse_awk_nde_t* parse_return (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
val = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
val = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (val == QSE_NULL)
|
if (val == QSE_NULL)
|
||||||
{
|
{
|
||||||
QSE_AWK_FREE (awk, nde);
|
QSE_AWK_FREE (awk, nde);
|
||||||
@ -4472,7 +4548,10 @@ static qse_awk_nde_t* parse_exit (qse_awk_t* awk, qse_size_t line)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
val = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
val = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (val == QSE_NULL)
|
if (val == QSE_NULL)
|
||||||
{
|
{
|
||||||
QSE_AWK_FREE (awk, nde);
|
QSE_AWK_FREE (awk, nde);
|
||||||
@ -4641,7 +4720,10 @@ static qse_awk_nde_t* parse_print (qse_awk_t* awk, qse_size_t line, int type)
|
|||||||
qse_awk_nde_t* args_tail;
|
qse_awk_nde_t* args_tail;
|
||||||
qse_awk_nde_t* tail_prev;
|
qse_awk_nde_t* tail_prev;
|
||||||
|
|
||||||
args = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
args = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (args == QSE_NULL) return QSE_NULL;
|
if (args == QSE_NULL) return QSE_NULL;
|
||||||
|
|
||||||
args_tail = args;
|
args_tail = args;
|
||||||
@ -4663,7 +4745,10 @@ static qse_awk_nde_t* parse_print (qse_awk_t* awk, qse_size_t line, int type)
|
|||||||
}
|
}
|
||||||
while (MATCH(awk,TOK_NEWLINE));
|
while (MATCH(awk,TOK_NEWLINE));
|
||||||
|
|
||||||
args_tail->next = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
args_tail->next = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (args_tail->next == QSE_NULL)
|
if (args_tail->next == QSE_NULL)
|
||||||
{
|
{
|
||||||
qse_awk_clrpt (awk, args);
|
qse_awk_clrpt (awk, args);
|
||||||
@ -4753,7 +4838,10 @@ static qse_awk_nde_t* parse_print (qse_awk_t* awk, qse_size_t line, int type)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
out = parse_expression (awk, awk->tok.loc.lin);
|
{
|
||||||
|
qse_awk_loc_t eloc = awk->tok.loc;
|
||||||
|
out = parse_expr_dc (awk, &eloc);
|
||||||
|
}
|
||||||
if (out == QSE_NULL)
|
if (out == QSE_NULL)
|
||||||
{
|
{
|
||||||
if (args != QSE_NULL) qse_awk_clrpt (awk, args);
|
if (args != QSE_NULL) qse_awk_clrpt (awk, args);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: tree.c 232 2009-07-14 08:06:14Z hyunghwan.chung $
|
* $Id: tree.c 265 2009-08-24 01:50:38Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ static const qse_char_t* print_outop_str[] =
|
|||||||
#define PUT_SRCSTR(awk,str) \
|
#define PUT_SRCSTR(awk,str) \
|
||||||
do { if (qse_awk_putsrcstr (awk, str) == -1) return -1; } while (0)
|
do { if (qse_awk_putsrcstr (awk, str) == -1) return -1; } while (0)
|
||||||
|
|
||||||
#define PUT_NEWLINE(awk) \
|
#define PUT_NL(awk) \
|
||||||
do { \
|
do { \
|
||||||
if (awk->option & QSE_AWK_CRLF) PUT_SRCSTR (awk, QSE_T("\r")); \
|
if (awk->option & QSE_AWK_CRLF) PUT_SRCSTR (awk, QSE_T("\r")); \
|
||||||
PUT_SRCSTR (awk, QSE_T("\n")); \
|
PUT_SRCSTR (awk, QSE_T("\n")); \
|
||||||
@ -116,19 +116,19 @@ static const qse_char_t* print_outop_str[] =
|
|||||||
#define PRINT_TABS(awk,depth) \
|
#define PRINT_TABS(awk,depth) \
|
||||||
do { if (print_tabs(awk,depth) == -1) return -1; } while (0)
|
do { if (print_tabs(awk,depth) == -1) return -1; } while (0)
|
||||||
|
|
||||||
#define PRINT_EXPRESSION(awk,nde) \
|
#define PRINT_EXPR(awk,nde) \
|
||||||
do { if (print_expression(awk,nde) == -1) return -1; } while (0)
|
do { if (print_expr(awk,nde) == -1) return -1; } while (0)
|
||||||
|
|
||||||
#define PRINT_EXPRESSION_LIST(awk,nde) \
|
#define PRINT_EXPR_LIST(awk,nde) \
|
||||||
do { if (print_expression_list(awk,nde) == -1) return -1; } while (0)
|
do { if (print_expr_list(awk,nde) == -1) return -1; } while (0)
|
||||||
|
|
||||||
#define PRINT_STATEMENTS(awk,nde,depth) \
|
#define PRINT_STMTS(awk,nde,depth) \
|
||||||
do { if (print_statements(awk,nde,depth) == -1) return -1; } while (0)
|
do { if (print_stmts(awk,nde,depth) == -1) return -1; } while (0)
|
||||||
|
|
||||||
static int print_tabs (qse_awk_t* awk, int depth);
|
static int print_tabs (qse_awk_t* awk, int depth);
|
||||||
static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde);
|
static int print_expr (qse_awk_t* awk, qse_awk_nde_t* nde);
|
||||||
static int print_expression_list (qse_awk_t* awk, qse_awk_nde_t* tree);
|
static int print_expr_list (qse_awk_t* awk, qse_awk_nde_t* tree);
|
||||||
static int print_statements (qse_awk_t* awk, qse_awk_nde_t* tree, int depth);
|
static int print_stmts (qse_awk_t* awk, qse_awk_nde_t* tree, int depth);
|
||||||
|
|
||||||
static int print_tabs (qse_awk_t* awk, int depth)
|
static int print_tabs (qse_awk_t* awk, int depth)
|
||||||
{
|
{
|
||||||
@ -141,7 +141,7 @@ static int print_tabs (qse_awk_t* awk, int depth)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
static int print_expr (qse_awk_t* awk, qse_awk_nde_t* nde)
|
||||||
{
|
{
|
||||||
qse_cstr_t kw;
|
qse_cstr_t kw;
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
while (p != QSE_NULL)
|
while (p != QSE_NULL)
|
||||||
{
|
{
|
||||||
PRINT_EXPRESSION (awk, p);
|
PRINT_EXPR (awk, p);
|
||||||
if (p->next != QSE_NULL)
|
if (p->next != QSE_NULL)
|
||||||
PUT_SRCSTR (awk, QSE_T(","));
|
PUT_SRCSTR (awk, QSE_T(","));
|
||||||
p = p->next;
|
p = p->next;
|
||||||
@ -167,11 +167,11 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
{
|
{
|
||||||
qse_awk_nde_ass_t* px = (qse_awk_nde_ass_t*)nde;
|
qse_awk_nde_ass_t* px = (qse_awk_nde_ass_t*)nde;
|
||||||
|
|
||||||
PRINT_EXPRESSION (awk, px->left);
|
PRINT_EXPR (awk, px->left);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PUT_SRCSTR (awk, assop_str[px->opcode]);
|
PUT_SRCSTR (awk, assop_str[px->opcode]);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PRINT_EXPRESSION (awk, px->right);
|
PRINT_EXPR (awk, px->right);
|
||||||
|
|
||||||
QSE_ASSERT (px->right->next == QSE_NULL);
|
QSE_ASSERT (px->right->next == QSE_NULL);
|
||||||
break;
|
break;
|
||||||
@ -182,7 +182,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
qse_awk_nde_exp_t* px = (qse_awk_nde_exp_t*)nde;
|
qse_awk_nde_exp_t* px = (qse_awk_nde_exp_t*)nde;
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PRINT_EXPRESSION (awk, px->left);
|
PRINT_EXPR (awk, px->left);
|
||||||
QSE_ASSERT (px->left->next == QSE_NULL);
|
QSE_ASSERT (px->left->next == QSE_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
@ -191,7 +191,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
|
|
||||||
if (px->right->type == QSE_AWK_NDE_ASS)
|
if (px->right->type == QSE_AWK_NDE_ASS)
|
||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PRINT_EXPRESSION (awk, px->right);
|
PRINT_EXPR (awk, px->right);
|
||||||
if (px->right->type == QSE_AWK_NDE_ASS)
|
if (px->right->type == QSE_AWK_NDE_ASS)
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
QSE_ASSERT (px->right->next == QSE_NULL);
|
QSE_ASSERT (px->right->next == QSE_NULL);
|
||||||
@ -207,7 +207,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PUT_SRCSTR (awk, unrop_str[px->opcode]);
|
PUT_SRCSTR (awk, unrop_str[px->opcode]);
|
||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PRINT_EXPRESSION (awk, px->left);
|
PRINT_EXPR (awk, px->left);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
break;
|
break;
|
||||||
@ -220,7 +220,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
|
|
||||||
PUT_SRCSTR (awk, incop_str[px->opcode]);
|
PUT_SRCSTR (awk, incop_str[px->opcode]);
|
||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PRINT_EXPRESSION (awk, px->left);
|
PRINT_EXPR (awk, px->left);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -231,7 +231,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
QSE_ASSERT (px->right == QSE_NULL);
|
QSE_ASSERT (px->right == QSE_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PRINT_EXPRESSION (awk, px->left);
|
PRINT_EXPR (awk, px->left);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
PUT_SRCSTR (awk, incop_str[px->opcode]);
|
PUT_SRCSTR (awk, incop_str[px->opcode]);
|
||||||
break;
|
break;
|
||||||
@ -242,12 +242,12 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
qse_awk_nde_cnd_t* px = (qse_awk_nde_cnd_t*)nde;
|
qse_awk_nde_cnd_t* px = (qse_awk_nde_cnd_t*)nde;
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T("("));
|
PUT_SRCSTR (awk, QSE_T("("));
|
||||||
PRINT_EXPRESSION (awk, px->test);
|
PRINT_EXPR (awk, px->test);
|
||||||
PUT_SRCSTR (awk, QSE_T(")?"));
|
PUT_SRCSTR (awk, QSE_T(")?"));
|
||||||
|
|
||||||
PRINT_EXPRESSION (awk, px->left);
|
PRINT_EXPR (awk, px->left);
|
||||||
PUT_SRCSTR (awk, QSE_T(":"));
|
PUT_SRCSTR (awk, QSE_T(":"));
|
||||||
PRINT_EXPRESSION (awk, px->right);
|
PRINT_EXPR (awk, px->right);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,7 +347,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
);
|
);
|
||||||
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
PUT_SRCSTR (awk, QSE_T("["));
|
PUT_SRCSTR (awk, QSE_T("["));
|
||||||
PRINT_EXPRESSION_LIST (awk, px->idx);
|
PRINT_EXPR_LIST (awk, px->idx);
|
||||||
PUT_SRCSTR (awk, QSE_T("]"));
|
PUT_SRCSTR (awk, QSE_T("]"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -370,7 +370,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
|
|
||||||
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
|
PUT_SRCSTRX (awk, px->id.name.ptr, px->id.name.len);
|
||||||
PUT_SRCSTR (awk, QSE_T("["));
|
PUT_SRCSTR (awk, QSE_T("["));
|
||||||
PRINT_EXPRESSION_LIST (awk, px->idx);
|
PRINT_EXPR_LIST (awk, px->idx);
|
||||||
PUT_SRCSTR (awk, QSE_T("]"));
|
PUT_SRCSTR (awk, QSE_T("]"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -459,7 +459,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTR (awk, QSE_T("["));
|
PUT_SRCSTR (awk, QSE_T("["));
|
||||||
}
|
}
|
||||||
QSE_ASSERT (px->idx != QSE_NULL);
|
QSE_ASSERT (px->idx != QSE_NULL);
|
||||||
PRINT_EXPRESSION_LIST (awk, px->idx);
|
PRINT_EXPR_LIST (awk, px->idx);
|
||||||
PUT_SRCSTR (awk, QSE_T("]"));
|
PUT_SRCSTR (awk, QSE_T("]"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -515,7 +515,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTR (awk, QSE_T("["));
|
PUT_SRCSTR (awk, QSE_T("["));
|
||||||
}
|
}
|
||||||
QSE_ASSERT (px->idx != QSE_NULL);
|
QSE_ASSERT (px->idx != QSE_NULL);
|
||||||
PRINT_EXPRESSION_LIST (awk, px->idx);
|
PRINT_EXPR_LIST (awk, px->idx);
|
||||||
PUT_SRCSTR (awk, QSE_T("]"));
|
PUT_SRCSTR (awk, QSE_T("]"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -523,7 +523,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
case QSE_AWK_NDE_POS:
|
case QSE_AWK_NDE_POS:
|
||||||
{
|
{
|
||||||
PUT_SRCSTR (awk, QSE_T("$"));
|
PUT_SRCSTR (awk, QSE_T("$"));
|
||||||
PRINT_EXPRESSION (awk, ((qse_awk_nde_pos_t*)nde)->val);
|
PRINT_EXPR (awk, ((qse_awk_nde_pos_t*)nde)->val);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,7 +533,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTRX (awk,
|
PUT_SRCSTRX (awk,
|
||||||
px->what.fnc.name.ptr, px->what.fnc.name.len);
|
px->what.fnc.name.ptr, px->what.fnc.name.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||||
PRINT_EXPRESSION_LIST (awk, px->args);
|
PRINT_EXPR_LIST (awk, px->args);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -544,7 +544,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTRX (awk,
|
PUT_SRCSTRX (awk,
|
||||||
px->what.fun.name.ptr, px->what.fun.name.len);
|
px->what.fun.name.ptr, px->what.fun.name.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||||
PRINT_EXPRESSION_LIST (awk, px->args);
|
PRINT_EXPR_LIST (awk, px->args);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -559,7 +559,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
(px->in_type == QSE_AWK_IN_PIPE ||
|
(px->in_type == QSE_AWK_IN_PIPE ||
|
||||||
px->in_type == QSE_AWK_IN_RWPIPE))
|
px->in_type == QSE_AWK_IN_RWPIPE))
|
||||||
{
|
{
|
||||||
PRINT_EXPRESSION (awk, px->in);
|
PRINT_EXPR (awk, px->in);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PUT_SRCSTR (awk, getline_inop_str[px->in_type]);
|
PUT_SRCSTR (awk, getline_inop_str[px->in_type]);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
@ -570,7 +570,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
if (px->var != QSE_NULL)
|
if (px->var != QSE_NULL)
|
||||||
{
|
{
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PRINT_EXPRESSION (awk, px->var);
|
PRINT_EXPR (awk, px->var);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (px->in != QSE_NULL &&
|
if (px->in != QSE_NULL &&
|
||||||
@ -579,7 +579,7 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PUT_SRCSTR (awk, getline_inop_str[px->in_type]);
|
PUT_SRCSTR (awk, getline_inop_str[px->in_type]);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PRINT_EXPRESSION (awk, px->in);
|
PRINT_EXPR (awk, px->in);
|
||||||
}
|
}
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
@ -595,13 +595,13 @@ static int print_expression (qse_awk_t* awk, qse_awk_nde_t* nde)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_expression_list (qse_awk_t* awk, qse_awk_nde_t* tree)
|
static int print_expr_list (qse_awk_t* awk, qse_awk_nde_t* tree)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* p = tree;
|
qse_awk_nde_t* p = tree;
|
||||||
|
|
||||||
while (p != QSE_NULL)
|
while (p != QSE_NULL)
|
||||||
{
|
{
|
||||||
PRINT_EXPRESSION (awk, p);
|
PRINT_EXPR (awk, p);
|
||||||
p = p->next;
|
p = p->next;
|
||||||
if (p != QSE_NULL) PUT_SRCSTR (awk, QSE_T(","));
|
if (p != QSE_NULL) PUT_SRCSTR (awk, QSE_T(","));
|
||||||
}
|
}
|
||||||
@ -609,7 +609,7 @@ static int print_expression_list (qse_awk_t* awk, qse_awk_nde_t* tree)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
static int print_stmt (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
||||||
{
|
{
|
||||||
qse_size_t i;
|
qse_size_t i;
|
||||||
qse_cstr_t kw;
|
qse_cstr_t kw;
|
||||||
@ -620,7 +620,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
{
|
{
|
||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,7 +631,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
|
|
||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
PUT_SRCSTR (awk, QSE_T("{"));
|
PUT_SRCSTR (awk, QSE_T("{"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
|
|
||||||
if (px->nlcls > 0)
|
if (px->nlcls > 0)
|
||||||
{
|
{
|
||||||
@ -666,13 +666,13 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
);
|
);
|
||||||
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
PUT_SRCSTRX (awk, awk->tmp.fmt, n);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
}
|
}
|
||||||
|
|
||||||
PRINT_STATEMENTS (awk, px->body, depth + 1);
|
PRINT_STMTS (awk, px->body, depth + 1);
|
||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
PUT_SRCSTR (awk, QSE_T("}"));
|
PUT_SRCSTR (awk, QSE_T("}"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,26 +684,26 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_IF, &kw);
|
qse_awk_getkw (awk, KW_IF, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||||
PRINT_EXPRESSION (awk, px->test);
|
PRINT_EXPR (awk, px->test);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
|
|
||||||
QSE_ASSERT (px->then_part != QSE_NULL);
|
QSE_ASSERT (px->then_part != QSE_NULL);
|
||||||
if (px->then_part->type == QSE_AWK_NDE_BLK)
|
if (px->then_part->type == QSE_AWK_NDE_BLK)
|
||||||
PRINT_STATEMENTS (awk, px->then_part, depth);
|
PRINT_STMTS (awk, px->then_part, depth);
|
||||||
else
|
else
|
||||||
PRINT_STATEMENTS (awk, px->then_part, depth + 1);
|
PRINT_STMTS (awk, px->then_part, depth + 1);
|
||||||
|
|
||||||
if (px->else_part != QSE_NULL)
|
if (px->else_part != QSE_NULL)
|
||||||
{
|
{
|
||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
qse_awk_getkw (awk, KW_ELSE, &kw);
|
qse_awk_getkw (awk, KW_ELSE, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
if (px->else_part->type == QSE_AWK_NDE_BLK)
|
if (px->else_part->type == QSE_AWK_NDE_BLK)
|
||||||
PRINT_STATEMENTS (awk, px->else_part, depth);
|
PRINT_STMTS (awk, px->else_part, depth);
|
||||||
else
|
else
|
||||||
PRINT_STATEMENTS (awk, px->else_part, depth + 1);
|
PRINT_STMTS (awk, px->else_part, depth + 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -716,16 +716,16 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_WHILE, &kw);
|
qse_awk_getkw (awk, KW_WHILE, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||||
PRINT_EXPRESSION (awk, px->test);
|
PRINT_EXPR (awk, px->test);
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
if (px->body->type == QSE_AWK_NDE_BLK)
|
if (px->body->type == QSE_AWK_NDE_BLK)
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth);
|
PRINT_STMTS (awk, px->body, depth);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth + 1);
|
PRINT_STMTS (awk, px->body, depth + 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -737,23 +737,23 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
qse_awk_getkw (awk, KW_DO, &kw);
|
qse_awk_getkw (awk, KW_DO, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
if (px->body->type == QSE_AWK_NDE_BLK)
|
if (px->body->type == QSE_AWK_NDE_BLK)
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth);
|
PRINT_STMTS (awk, px->body, depth);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth + 1);
|
PRINT_STMTS (awk, px->body, depth + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
qse_awk_getkw (awk, KW_WHILE, &kw);
|
qse_awk_getkw (awk, KW_WHILE, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||||
PRINT_EXPRESSION (awk, px->test);
|
PRINT_EXPR (awk, px->test);
|
||||||
PUT_SRCSTR (awk, QSE_T(");"));
|
PUT_SRCSTR (awk, QSE_T(");"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -767,28 +767,28 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
PUT_SRCSTR (awk, QSE_T(" ("));
|
PUT_SRCSTR (awk, QSE_T(" ("));
|
||||||
if (px->init != QSE_NULL)
|
if (px->init != QSE_NULL)
|
||||||
{
|
{
|
||||||
PRINT_EXPRESSION (awk, px->init);
|
PRINT_EXPR (awk, px->init);
|
||||||
}
|
}
|
||||||
PUT_SRCSTR (awk, QSE_T("; "));
|
PUT_SRCSTR (awk, QSE_T("; "));
|
||||||
if (px->test != QSE_NULL)
|
if (px->test != QSE_NULL)
|
||||||
{
|
{
|
||||||
PRINT_EXPRESSION (awk, px->test);
|
PRINT_EXPR (awk, px->test);
|
||||||
}
|
}
|
||||||
PUT_SRCSTR (awk, QSE_T("; "));
|
PUT_SRCSTR (awk, QSE_T("; "));
|
||||||
if (px->incr != QSE_NULL)
|
if (px->incr != QSE_NULL)
|
||||||
{
|
{
|
||||||
PRINT_EXPRESSION (awk, px->incr);
|
PRINT_EXPR (awk, px->incr);
|
||||||
}
|
}
|
||||||
PUT_SRCSTR (awk, QSE_T(")"));
|
PUT_SRCSTR (awk, QSE_T(")"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
|
|
||||||
if (px->body->type == QSE_AWK_NDE_BLK)
|
if (px->body->type == QSE_AWK_NDE_BLK)
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth);
|
PRINT_STMTS (awk, px->body, depth);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth + 1);
|
PRINT_STMTS (awk, px->body, depth + 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -801,15 +801,15 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_FOR, &kw);
|
qse_awk_getkw (awk, KW_FOR, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PRINT_EXPRESSION (awk, px->test);
|
PRINT_EXPR (awk, px->test);
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
if (px->body->type == QSE_AWK_NDE_BLK)
|
if (px->body->type == QSE_AWK_NDE_BLK)
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth);
|
PRINT_STMTS (awk, px->body, depth);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PRINT_STATEMENTS (awk, px->body, depth + 1);
|
PRINT_STMTS (awk, px->body, depth + 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -820,7 +820,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_BREAK, &kw);
|
qse_awk_getkw (awk, KW_BREAK, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -830,7 +830,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_CONTINUE, &kw);
|
qse_awk_getkw (awk, KW_CONTINUE, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -842,7 +842,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_RETURN, &kw);
|
qse_awk_getkw (awk, KW_RETURN, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -851,9 +851,9 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
QSE_ASSERT (((qse_awk_nde_return_t*)p)->val->next == QSE_NULL);
|
QSE_ASSERT (((qse_awk_nde_return_t*)p)->val->next == QSE_NULL);
|
||||||
|
|
||||||
PRINT_EXPRESSION (awk, ((qse_awk_nde_return_t*)p)->val);
|
PRINT_EXPR (awk, ((qse_awk_nde_return_t*)p)->val);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -868,7 +868,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_EXIT, &kw);
|
qse_awk_getkw (awk, KW_EXIT, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -876,9 +876,9 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
QSE_ASSERT (px->val->next == QSE_NULL);
|
QSE_ASSERT (px->val->next == QSE_NULL);
|
||||||
PRINT_EXPRESSION (awk, px->val);
|
PRINT_EXPR (awk, px->val);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -889,7 +889,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
qse_awk_getkw (awk, KW_NEXT, &kw);
|
qse_awk_getkw (awk, KW_NEXT, &kw);
|
||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -907,7 +907,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
PUT_SRCSTRX (awk, kw.ptr, kw.len);
|
||||||
}
|
}
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -952,7 +952,7 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
if (px->args != QSE_NULL)
|
if (px->args != QSE_NULL)
|
||||||
{
|
{
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PRINT_EXPRESSION_LIST (awk, px->args);
|
PRINT_EXPR_LIST (awk, px->args);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (px->out != QSE_NULL)
|
if (px->out != QSE_NULL)
|
||||||
@ -960,33 +960,33 @@ static int print_statement (qse_awk_t* awk, qse_awk_nde_t* p, int depth)
|
|||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PUT_SRCSTR (awk, print_outop_str[px->out_type]);
|
PUT_SRCSTR (awk, print_outop_str[px->out_type]);
|
||||||
PUT_SRCSTR (awk, QSE_T(" "));
|
PUT_SRCSTR (awk, QSE_T(" "));
|
||||||
PRINT_EXPRESSION (awk, px->out);
|
PRINT_EXPR (awk, px->out);
|
||||||
}
|
}
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
PRINT_TABS (awk, depth);
|
PRINT_TABS (awk, depth);
|
||||||
PRINT_EXPRESSION (awk, p);
|
PRINT_EXPR (awk, p);
|
||||||
PUT_SRCSTR (awk, QSE_T(";"));
|
PUT_SRCSTR (awk, QSE_T(";"));
|
||||||
PUT_NEWLINE (awk);
|
PUT_NL (awk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_statements (qse_awk_t* awk, qse_awk_nde_t* tree, int depth)
|
static int print_stmts (qse_awk_t* awk, qse_awk_nde_t* tree, int depth)
|
||||||
{
|
{
|
||||||
qse_awk_nde_t* p = tree;
|
qse_awk_nde_t* p = tree;
|
||||||
|
|
||||||
while (p != QSE_NULL)
|
while (p != QSE_NULL)
|
||||||
{
|
{
|
||||||
if (print_statement (awk, p, depth) == -1) return -1;
|
if (print_stmt (awk, p, depth) == -1) return -1;
|
||||||
p = p->next;
|
p = p->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -995,12 +995,12 @@ static int print_statements (qse_awk_t* awk, qse_awk_nde_t* tree, int depth)
|
|||||||
|
|
||||||
int qse_awk_prnpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
int qse_awk_prnpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
||||||
{
|
{
|
||||||
return print_statements (awk, tree, 0);
|
return print_stmts (awk, tree, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qse_awk_prnnde (qse_awk_t* awk, qse_awk_nde_t* tree)
|
int qse_awk_prnnde (qse_awk_t* awk, qse_awk_nde_t* tree)
|
||||||
{
|
{
|
||||||
return print_statement (awk, tree, 0);
|
return print_stmt (awk, tree, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qse_awk_prnptnpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
int qse_awk_prnptnpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
||||||
@ -1009,7 +1009,7 @@ int qse_awk_prnptnpt (qse_awk_t* awk, qse_awk_nde_t* tree)
|
|||||||
|
|
||||||
while (nde != QSE_NULL)
|
while (nde != QSE_NULL)
|
||||||
{
|
{
|
||||||
if (print_expression (awk, nde) == -1) return -1;
|
if (print_expr (awk, nde) == -1) return -1;
|
||||||
if (nde->next == QSE_NULL) break;
|
if (nde->next == QSE_NULL) break;
|
||||||
|
|
||||||
PUT_SRCSTR (awk, QSE_T(","));
|
PUT_SRCSTR (awk, QSE_T(","));
|
||||||
|
Loading…
Reference in New Issue
Block a user