Partially fixed the critical bug mentioned in the previous revision.

- runcbs->on_enter() is introduced and called when all 
  globals variables are ready.
- changed runcbs->on_start() to return an integer
- run_main() is still under reconstruction. currently it 
  only supports the BEGIN/pattern action/END block exection.
This commit is contained in:
2009-01-23 04:40:57 +00:00
parent 5686bb8ac7
commit 8150f4843d
10 changed files with 543 additions and 145 deletions

View File

@ -463,7 +463,7 @@ const qse_char_t* qse_awk_getglobalname (
return gtab[idx].name;
*/
QSE_ASSERT (idx < QSE_LDA_SIZE(&awk->parse.globals));
QSE_ASSERT (idx < QSE_LDA_SIZE(awk->parse.globals));
*len = QSE_LDA_DLEN(awk->parse.globals,idx);
return QSE_LDA_DPTR(awk->parse.globals,idx);
@ -580,7 +580,7 @@ static int parse (qse_awk_t* awk)
}
}
QSE_ASSERT (awk->tree.nglobals == awk->parse.globals.size);
QSE_ASSERT (awk->tree.nglobals == QSE_LDA_SIZE(awk->parse.globals));
if (awk->src.ios.out != QSE_NULL)
{
@ -628,7 +628,7 @@ static qse_awk_t* parse_progunit (qse_awk_t* awk)
if (get_token(awk) == -1) return QSE_NULL;
QSE_ASSERT (awk->tree.nglobals == QSE_LDA_SIZE(&awk->parse.globals));
QSE_ASSERT (awk->tree.nglobals == QSE_LDA_SIZE(awk->parse.globals));
nglobals = awk->tree.nglobals;
if (collect_globals (awk) == QSE_NULL)
{
@ -912,7 +912,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
}
/* make sure that parameter table is empty */
QSE_ASSERT (QSE_LDA_SIZE(&awk->parse.params) == 0);
QSE_ASSERT (QSE_LDA_SIZE(awk->parse.params) == 0);
/* read parameter list */
if (MATCH(awk,TOKEN_RPAREN))
@ -5868,7 +5868,7 @@ static qse_map_walk_t deparse_func (qse_map_t* map, qse_map_pair_t* pair, void*
qse_size_t i, n;
qse_cstr_t kw;
QSE_ASSERT (qse_strxncmp (QSE_PAIR_KEYPTR(pair), QSE_PAIR_KEYLEN(pair), afn->name.ptr, afn->name.len) == 0);
QSE_ASSERT (qse_strxncmp (QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair), afn->name.ptr, afn->name.len) == 0);
#define PUT_C(x,c) \
if (put_char(x->awk,c)==-1) { \