From 012777d4254e32e402488b4e8c9dfe3822e04b59 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Thu, 28 Sep 2006 14:21:45 +0000 Subject: [PATCH] *** empty log message *** --- ase/awk/parse.c | 18 +++++++++++++++++- ase/awk/tree.c | 8 +++++--- ase/awk/val.c | 10 +++++----- ase/test/awk/comp.awk | 6 ++++-- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/ase/awk/parse.c b/ase/awk/parse.c index 335d8f94..32fbcd91 100644 --- a/ase/awk/parse.c +++ b/ase/awk/parse.c @@ -1,5 +1,5 @@ /* - * $Id: parse.c,v 1.183 2006-09-27 14:13:33 bacon Exp $ + * $Id: parse.c,v 1.184 2006-09-28 14:21:23 bacon Exp $ */ #include @@ -1432,6 +1432,14 @@ static xp_awk_nde_t* __parse_binary_expr ( xp_awk_clrpt (awk, right); ((xp_awk_nde_int_t*)left)->val = l; + + if (((xp_awk_nde_int_t*)left)->str != XP_NULL) + { + XP_AWK_FREE (awk, ((xp_awk_nde_int_t*)left)->str); + ((xp_awk_nde_int_t*)left)->str = XP_NULL; + ((xp_awk_nde_int_t*)left)->len = 0; + } + continue; } else if (left->type == XP_AWK_NDE_REAL && @@ -1451,6 +1459,14 @@ static xp_awk_nde_t* __parse_binary_expr ( xp_awk_clrpt (awk, right); ((xp_awk_nde_real_t*)left)->val = l; + + if (((xp_awk_nde_real_t*)left)->str != XP_NULL) + { + XP_AWK_FREE (awk, ((xp_awk_nde_real_t*)left)->str); + ((xp_awk_nde_real_t*)left)->str = XP_NULL; + ((xp_awk_nde_real_t*)left)->len = 0; + } + continue; } /* TODO: enhance constant folding more... */ diff --git a/ase/awk/tree.c b/ase/awk/tree.c index 4713d948..263b3c04 100644 --- a/ase/awk/tree.c +++ b/ase/awk/tree.c @@ -1,5 +1,5 @@ /* - * $Id: tree.c,v 1.76 2006-09-28 06:56:30 bacon Exp $ + * $Id: tree.c,v 1.77 2006-09-28 14:21:23 bacon Exp $ */ #include @@ -991,14 +991,16 @@ void xp_awk_clrpt (xp_awk_t* awk, xp_awk_nde_t* tree) case XP_AWK_NDE_INT: { - XP_AWK_FREE (awk, ((xp_awk_nde_int_t*)p)->str); + if (((xp_awk_nde_int_t*)p)->str != XP_NULL) + XP_AWK_FREE (awk, ((xp_awk_nde_int_t*)p)->str); XP_AWK_FREE (awk, p); break; } case XP_AWK_NDE_REAL: { - XP_AWK_FREE (awk, ((xp_awk_nde_real_t*)p)->str); + if (((xp_awk_nde_real_t*)p)->str != XP_NULL) + XP_AWK_FREE (awk, ((xp_awk_nde_real_t*)p)->str); XP_AWK_FREE (awk, p); break; } diff --git a/ase/awk/val.c b/ase/awk/val.c index c1e9dcbc..5e505d1d 100644 --- a/ase/awk/val.c +++ b/ase/awk/val.c @@ -1,5 +1,5 @@ /* - * $Id: val.c,v 1.63 2006-09-28 06:56:30 bacon Exp $ + * $Id: val.c,v 1.64 2006-09-28 14:21:23 bacon Exp $ */ #include @@ -384,7 +384,7 @@ xp_char_t* xp_awk_valtostr ( { xp_awk_val_int_t* vi = (xp_awk_val_int_t*)v; - if (vi->nde != XP_NULL) + if (vi->nde != XP_NULL && vi->nde->str != XP_NULL) { return __str_to_str ( run, vi->nde->str, vi->nde->len, @@ -400,7 +400,7 @@ xp_char_t* xp_awk_valtostr ( { xp_awk_val_real_t* vr = (xp_awk_val_real_t*)v; - if (vr->nde != XP_NULL) + if (vr->nde != XP_NULL && vr->nde->str != XP_NULL) { return __str_to_str ( run, vr->nde->str, vr->nde->len, @@ -564,10 +564,10 @@ static xp_char_t* __val_real_to_str ( #if (XP_SIZEOF_LONG_DOUBLE != 0) run->awk->syscas->sprintf ( - tbuf, xp_countof(tbuf), XP_T("%Lf"), (long double)v->val); + tbuf, xp_countof(tbuf), XP_T("%.30Lg"), (long double)v->val); #elif (XP_SIZEOF_DOUBLE != 0) run->awk->syscas->sprintf ( - tbuf, xp_countof(tbuf), XP_T("%f"), (double)v->val); + tbuf, xp_countof(tbuf), XP_T("%.30g"), (double)v->val); #else #error unsupported floating-point data type #endif diff --git a/ase/test/awk/comp.awk b/ase/test/awk/comp.awk index 41b7c551..9f82c47a 100644 --- a/ase/test/awk/comp.awk +++ b/ase/test/awk/comp.awk @@ -39,6 +39,8 @@ BEGIN { print "\" \" > a: " (" " > a); print "\" \" < a: " (" " < a); - a[10] = 2; - print a == 1; + #a[10] = 2; + #print a == 1; + + print (0.234 + 1.01123); }