*** empty log message ***

This commit is contained in:
hyung-hwan 2006-05-09 15:21:26 +00:00
parent 39f19102f0
commit e56cebdff1
3 changed files with 83 additions and 5 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.88 2006-05-09 03:00:25 bacon Exp $ * $Id: run.c,v 1.89 2006-05-09 15:21:26 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -41,6 +41,7 @@ static void __close_run (xp_awk_run_t* run);
static int __run_main (xp_awk_run_t* run); static int __run_main (xp_awk_run_t* run);
static int __run_pattern_blocks (xp_awk_run_t* run); static int __run_pattern_blocks (xp_awk_run_t* run);
static int __run_pattern_block_chain (xp_awk_run_t* run, xp_awk_chain_t* chain);
static int __run_block (xp_awk_run_t* run, xp_awk_nde_blk_t* nde); static int __run_block (xp_awk_run_t* run, xp_awk_nde_blk_t* nde);
static int __run_statement (xp_awk_run_t* run, xp_awk_nde_t* nde); static int __run_statement (xp_awk_run_t* run, xp_awk_nde_t* nde);
static int __run_if_statement (xp_awk_run_t* run, xp_awk_nde_if_t* nde); static int __run_if_statement (xp_awk_run_t* run, xp_awk_nde_if_t* nde);
@ -445,6 +446,7 @@ static int __run_pattern_blocks (xp_awk_run_t* run)
run->exit_level != EXIT_ABORT) run->exit_level != EXIT_ABORT)
{ {
int x; int x;
run->exit_level = EXIT_NONE; run->exit_level = EXIT_NONE;
x = __read_text_input(run); x = __read_text_input(run);
@ -460,14 +462,18 @@ static int __run_pattern_blocks (xp_awk_run_t* run)
/* /*
xp_printf (XP_T("**** line [%s]\n"), XP_STR_BUF(&run->input.line)); xp_printf (XP_T("**** line [%s]\n"), XP_STR_BUF(&run->input.line));
* TODO: execute pattern blocks.
*/ */
/* for each block { run it } /* for each block { run it }
* TODO: handle according if next and nextfile has been called * TODO: handle according if next and nextfile has been called
*/ */
/* TODO */ /* TODO */
if (__run_block (run, if (__run_pattern_block_chain (run, run->tree->chain) == -1)
(xp_awk_nde_blk_t*)run->tree->begin) == -1) n = -1; {
/* don't care about the result of input close */
run->txtio (XP_AWK_INPUT_CLOSE,
run->txtio_arg, XP_NULL, 0);
return -1;
}
} }
n = run->txtio (XP_AWK_INPUT_CLOSE, run->txtio_arg, XP_NULL, 0); n = run->txtio (XP_AWK_INPUT_CLOSE, run->txtio_arg, XP_NULL, 0);
@ -476,6 +482,57 @@ xp_printf (XP_T("**** line [%s]\n"), XP_STR_BUF(&run->input.line));
return 0; return 0;
} }
static int __run_pattern_block_chain (xp_awk_run_t* run, xp_awk_chain_t* chain)
{
xp_awk_nde_t* ptn;
while (chain != XP_NULL)
{
ptn = chain->pattern;
if (ptn == XP_NULL)
{
/* just execute the block */
if (__run_block (run, (xp_awk_nde_blk_t*)chain->action) == -1) return -1;
}
else
{
xp_awk_val_t* v1;
v1 = __eval_expression (run, ptn);
if (v1 == XP_NULL) return -1;
xp_awk_refupval (v1);
if (ptn->next == XP_NULL)
{
if (xp_awk_boolval(v1))
{
if (__run_block (run, (xp_awk_nde_blk_t*)chain->action) == -1)
{
xp_awk_refdownval (run, v1);
return -1;
}
}
xp_awk_refdownval (run, v1);
}
else
{
xp_assert (ptn->next->next == XP_NULL);
/* TODO: implement this */
xp_awk_refdownval (run, v1);
xp_printf (XP_TEXT("ERROR: pattern, pattern NOT OMPLEMENTED\n"));
PANIC_I (run, XP_AWK_EINTERNAL);
}
}
chain = chain->next;
}
return 0;
}
static int __run_block (xp_awk_run_t* run, xp_awk_nde_blk_t* nde) static int __run_block (xp_awk_run_t* run, xp_awk_nde_blk_t* nde)
{ {
xp_awk_nde_t* p; xp_awk_nde_t* p;

17
ase/test/awk/t6.awk Normal file
View File

@ -0,0 +1,17 @@
BEGIN
{
for (i = -10; i < 10; i++)
{
if (i == 5) exit; /*break;*/
}
j = -10;
while (j < 10)
{
if (j == 5) break;
j++;
}
}

4
ase/test/awk/t7.awk Normal file
View File

@ -0,0 +1,4 @@
BEGIN { i = 20; j = 0; }
{ i++; }
i % 2 { j++; }
/*END { i = i + 1234; j = j + 1234; }*/