This commit is contained in:
parent
d066edf575
commit
6a50833e9b
@ -1380,7 +1380,7 @@ static int run_main (
|
|||||||
|
|
||||||
/* stack set up properly. ready to exeucte statement blocks */
|
/* stack set up properly. ready to exeucte statement blocks */
|
||||||
for (nde = run->awk->tree.begin;
|
for (nde = run->awk->tree.begin;
|
||||||
n == 0 && nde != ASE_NULL && run->exit_level != EXIT_ABORT;
|
n == 0 && nde != ASE_NULL && run->exit_level < EXIT_GLOBAL;
|
||||||
nde = nde->next)
|
nde = nde->next)
|
||||||
{
|
{
|
||||||
ase_awk_nde_blk_t* blk;
|
ase_awk_nde_blk_t* blk;
|
||||||
@ -1396,13 +1396,15 @@ static int run_main (
|
|||||||
if (n == 0 &&
|
if (n == 0 &&
|
||||||
(run->awk->tree.chain != ASE_NULL ||
|
(run->awk->tree.chain != ASE_NULL ||
|
||||||
run->awk->tree.end != ASE_NULL) &&
|
run->awk->tree.end != ASE_NULL) &&
|
||||||
run->exit_level != EXIT_ABORT)
|
run->exit_level < EXIT_GLOBAL)
|
||||||
{
|
{
|
||||||
if (run_pattern_blocks (run) == -1) n = -1;
|
if (run_pattern_blocks (run) == -1) n = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* the first END block is executed if the program is not
|
||||||
|
* explicitly aborted with ase_awk_stop */
|
||||||
for (nde = run->awk->tree.end;
|
for (nde = run->awk->tree.end;
|
||||||
n == 0 && nde != ASE_NULL && run->exit_level != EXIT_ABORT;
|
n == 0 && nde != ASE_NULL && run->exit_level < EXIT_ABORT;
|
||||||
nde = nde->next)
|
nde = nde->next)
|
||||||
{
|
{
|
||||||
ase_awk_nde_blk_t* blk;
|
ase_awk_nde_blk_t* blk;
|
||||||
@ -1413,6 +1415,12 @@ static int run_main (
|
|||||||
run->active_block = blk;
|
run->active_block = blk;
|
||||||
run->exit_level = EXIT_NONE;
|
run->exit_level = EXIT_NONE;
|
||||||
if (run_block (run, blk) == -1) n = -1;
|
if (run_block (run, blk) == -1) n = -1;
|
||||||
|
else if (run->exit_level >= EXIT_GLOBAL)
|
||||||
|
{
|
||||||
|
/* once exit is called inside one of END blocks,
|
||||||
|
* subsequent END blocks must not be executed */
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* restore stack */
|
/* restore stack */
|
||||||
@ -1477,8 +1485,7 @@ static int run_pattern_blocks (ase_awk_run_t* run)
|
|||||||
run->inrec.eof = ase_false;
|
run->inrec.eof = ase_false;
|
||||||
|
|
||||||
/* run each pattern block */
|
/* run each pattern block */
|
||||||
while (run->exit_level != EXIT_GLOBAL &&
|
while (run->exit_level < EXIT_GLOBAL)
|
||||||
run->exit_level != EXIT_ABORT)
|
|
||||||
{
|
{
|
||||||
run->exit_level = EXIT_NONE;
|
run->exit_level = EXIT_NONE;
|
||||||
|
|
||||||
@ -1511,8 +1518,7 @@ static int run_pattern_block_chain (ase_awk_run_t* run, ase_awk_chain_t* chain)
|
|||||||
{
|
{
|
||||||
ase_size_t block_no = 0;
|
ase_size_t block_no = 0;
|
||||||
|
|
||||||
while (run->exit_level != EXIT_GLOBAL &&
|
while (run->exit_level < EXIT_GLOBAL && chain != ASE_NULL)
|
||||||
run->exit_level != EXIT_ABORT && chain != ASE_NULL)
|
|
||||||
{
|
{
|
||||||
if (run->exit_level == EXIT_NEXT)
|
if (run->exit_level == EXIT_NEXT)
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include <ase/utl/stdio.h>
|
#include <ase/utl/stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static ase_char_t* str_to_str (
|
static ase_char_t* str_to_str (
|
||||||
ase_awk_run_t* run, const ase_char_t* str, ase_size_t str_len,
|
ase_awk_run_t* run, const ase_char_t* str, ase_size_t str_len,
|
||||||
int opt, ase_str_t* buf, ase_size_t* len);
|
int opt, ase_str_t* buf, ase_size_t* len);
|
||||||
@ -90,7 +89,7 @@ ase_awk_val_t* ase_awk_makeintval (ase_awk_run_t* run, ase_long_t v)
|
|||||||
val->nde = ASE_NULL;
|
val->nde = ASE_NULL;
|
||||||
|
|
||||||
#ifdef DEBUG_VAL
|
#ifdef DEBUG_VAL
|
||||||
ase_dprintf (ASE_T("makeintval => %p\n"), val);
|
ase_dprintf (ASE_T("makeintval => %ld [%p]\n"), (long)v, val);
|
||||||
#endif
|
#endif
|
||||||
return (ase_awk_val_t*)val;
|
return (ase_awk_val_t*)val;
|
||||||
}
|
}
|
||||||
@ -120,7 +119,7 @@ ase_awk_val_t* ase_awk_makerealval (ase_awk_run_t* run, ase_real_t v)
|
|||||||
val->nde = ASE_NULL;
|
val->nde = ASE_NULL;
|
||||||
|
|
||||||
#ifdef DEBUG_VAL
|
#ifdef DEBUG_VAL
|
||||||
ase_dprintf (ASE_T("makerealval => %p\n"), val);
|
ase_dprintf (ASE_T("makerealval => %Lf [%p]\n"), (double)v, val);
|
||||||
#endif
|
#endif
|
||||||
return (ase_awk_val_t*)val;
|
return (ase_awk_val_t*)val;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user