From 1cbc7b9db5d06ee48dd36399f22d933bf5c8f01a Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Tue, 1 Jan 2008 07:30:18 +0000 Subject: [PATCH] --- ase/awk/run.c | 22 +++++++++++++++++++++- ase/test/awk/Awk.cpp | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ase/awk/run.c b/ase/awk/run.c index 6a6004a6..e50d2bd2 100644 --- a/ase/awk/run.c +++ b/ase/awk/run.c @@ -3011,6 +3011,7 @@ static ase_awk_val_t* eval_expression (ase_awk_run_t* run, ase_awk_nde_t* nde) ase_awk_val_t* v; int n, errnum; +#if 0 if (run->exit_level >= EXIT_GLOBAL) { /* returns ASE_NULL as if an error occurred but @@ -3020,6 +3021,7 @@ static ase_awk_val_t* eval_expression (ase_awk_run_t* run, ase_awk_nde_t* nde) run->errnum = ASE_AWK_ENOERR; return ASE_NULL; } +#endif v = eval_expression0 (run, nde); if (v == ASE_NULL) return ASE_NULL; @@ -3109,10 +3111,28 @@ static ase_awk_val_t* eval_expression0 (ase_awk_run_t* run, ase_awk_nde_t* nde) eval_getline }; + ase_awk_val_t* v; + + ASE_ASSERT (nde->type >= ASE_AWK_NDE_GRP && (nde->type - ASE_AWK_NDE_GRP) < ASE_COUNTOF(eval_func)); - return eval_func[nde->type-ASE_AWK_NDE_GRP] (run, nde); + v = eval_func[nde->type-ASE_AWK_NDE_GRP] (run, nde); + + if (v != ASE_NULL && run->exit_level >= EXIT_GLOBAL) + { + ase_awk_refupval (run, v); + ase_awk_refdownval (run, v); + + /* returns ASE_NULL as if an error occurred but + * clears the error number. run_main will + * detect this condition and treat it as a + * non-error condition.*/ + run->errnum = ASE_AWK_ENOERR; + return ASE_NULL; + } + + return v; } static ase_awk_val_t* eval_group (ase_awk_run_t* run, ase_awk_nde_t* nde) diff --git a/ase/test/awk/Awk.cpp b/ase/test/awk/Awk.cpp index be75df4b..b967338b 100644 --- a/ase/test/awk/Awk.cpp +++ b/ase/test/awk/Awk.cpp @@ -645,7 +645,7 @@ static struct { ASE_T("baseone"), TestAwk::OPT_BASEONE }, { ASE_T("stripspaces"), TestAwk::OPT_STRIPSPACES }, { ASE_T("nextofile"), TestAwk::OPT_NEXTOFILE }, - { ASE_T("crfl"), TestAwk::OPT_CRLF }, + { ASE_T("crlf"), TestAwk::OPT_CRLF }, { ASE_T("argstomain"), TestAwk::OPT_ARGSTOMAIN }, { ASE_T("reset"), TestAwk::OPT_RESET }, { ASE_T("maptovar"), TestAwk::OPT_MAPTOVAR },