*** empty log message ***
This commit is contained in:
parent
42c5a97d7e
commit
9ca4d7128a
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.221 2006-10-04 10:11:04 bacon Exp $
|
* $Id: run.c,v 1.222 2006-10-04 14:51:20 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -7,8 +7,8 @@
|
|||||||
/* TODO: remove this dependency...*/
|
/* TODO: remove this dependency...*/
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#define CMP_ERROR -99
|
||||||
#define DEF_BUF_CAPA 256
|
#define DEF_BUF_CAPA 256
|
||||||
|
|
||||||
#define STACK_INCREMENT 512
|
#define STACK_INCREMENT 512
|
||||||
|
|
||||||
#define STACK_AT(run,n) ((run)->stack[(run)->stack_base+(n)])
|
#define STACK_AT(run,n) ((run)->stack[(run)->stack_base+(n)])
|
||||||
@ -36,14 +36,7 @@ enum
|
|||||||
#define PANIC_I(run,code) \
|
#define PANIC_I(run,code) \
|
||||||
do { (run)->errnum = (code); return -1; } while (0)
|
do { (run)->errnum = (code); return -1; } while (0)
|
||||||
|
|
||||||
#if (XP_SIZEOF_LONG_DOUBLE != 0)
|
#define DEFAULT_OFMT XP_T("%.6g")
|
||||||
#define DEFAULT_OFMT XP_T("%.6Lg")
|
|
||||||
#elif (XP_SIZEOF_DOUBLE != 0)
|
|
||||||
#define DEFAULT_OFMT XP_T("%.6g")
|
|
||||||
#else
|
|
||||||
#error Unsupported floating-point type size
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEFAULT_OFS XP_T(" ")
|
#define DEFAULT_OFS XP_T(" ")
|
||||||
#define DEFAULT_ORS XP_T("\n")
|
#define DEFAULT_ORS XP_T("\n")
|
||||||
#define DEFAULT_SUBSEP XP_T("\034")
|
#define DEFAULT_SUBSEP XP_T("\034")
|
||||||
@ -2842,8 +2835,34 @@ static int __cmp_int_real (
|
|||||||
static int __cmp_int_str (
|
static int __cmp_int_str (
|
||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
/* TODO */
|
xp_char_t* str;
|
||||||
return 0;
|
xp_size_t len;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
str = xp_awk_valtostr (run, left, xp_true, XP_NULL, &len);
|
||||||
|
if (str == XP_NULL)
|
||||||
|
{
|
||||||
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
|
return CMP_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (run->global.ignorecase)
|
||||||
|
{
|
||||||
|
n = xp_awk_strxncasecmp (
|
||||||
|
run->awk, str, len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = xp_awk_strxncmp (
|
||||||
|
str, len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len);
|
||||||
|
}
|
||||||
|
|
||||||
|
XP_AWK_FREE (run->awk, str);
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __cmp_real_nil (
|
static int __cmp_real_nil (
|
||||||
@ -2877,8 +2896,34 @@ static int __cmp_real_real (
|
|||||||
static int __cmp_real_str (
|
static int __cmp_real_str (
|
||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
/* TODO */
|
xp_char_t* str;
|
||||||
return 0;
|
xp_size_t len;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
str = xp_awk_valtostr (run, left, xp_true, XP_NULL, &len);
|
||||||
|
if (str == XP_NULL)
|
||||||
|
{
|
||||||
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
|
return CMP_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (run->global.ignorecase)
|
||||||
|
{
|
||||||
|
n = xp_awk_strxncasecmp (
|
||||||
|
run->awk, str, len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = xp_awk_strxncmp (
|
||||||
|
str, len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len);
|
||||||
|
}
|
||||||
|
|
||||||
|
XP_AWK_FREE (run->awk, str);
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __cmp_str_nil (
|
static int __cmp_str_nil (
|
||||||
@ -2941,7 +2986,7 @@ static int __cmp_val (
|
|||||||
{
|
{
|
||||||
/* a map can't be compared againt other values */
|
/* a map can't be compared againt other values */
|
||||||
run->errnum = XP_AWK_EOPERAND;
|
run->errnum = XP_AWK_EOPERAND;
|
||||||
return -99;
|
return CMP_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_assert (left->type >= XP_AWK_VAL_NIL &&
|
xp_assert (left->type >= XP_AWK_VAL_NIL &&
|
||||||
@ -2956,7 +3001,7 @@ static xp_awk_val_t* __eval_binop_eq (
|
|||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
int n = __cmp_val (run, left, right);
|
int n = __cmp_val (run, left, right);
|
||||||
if (n == -99) return XP_NULL;
|
if (n == CMP_ERROR) return XP_NULL;
|
||||||
return (n == 0)? xp_awk_val_one: xp_awk_val_zero;
|
return (n == 0)? xp_awk_val_one: xp_awk_val_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2964,7 +3009,7 @@ static xp_awk_val_t* __eval_binop_ne (
|
|||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
int n = __cmp_val (run, left, right);
|
int n = __cmp_val (run, left, right);
|
||||||
if (n == -99) return XP_NULL;
|
if (n == CMP_ERROR) return XP_NULL;
|
||||||
return (n != 0)? xp_awk_val_one: xp_awk_val_zero;
|
return (n != 0)? xp_awk_val_one: xp_awk_val_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2972,7 +3017,7 @@ static xp_awk_val_t* __eval_binop_gt (
|
|||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
int n = __cmp_val (run, left, right);
|
int n = __cmp_val (run, left, right);
|
||||||
if (n == -99) return XP_NULL;
|
if (n == CMP_ERROR) return XP_NULL;
|
||||||
return (n > 0)? xp_awk_val_one: xp_awk_val_zero;
|
return (n > 0)? xp_awk_val_one: xp_awk_val_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2980,7 +3025,7 @@ static xp_awk_val_t* __eval_binop_ge (
|
|||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
int n = __cmp_val (run, left, right);
|
int n = __cmp_val (run, left, right);
|
||||||
if (n == -99) return XP_NULL;
|
if (n == CMP_ERROR) return XP_NULL;
|
||||||
return (n >= 0)? xp_awk_val_one: xp_awk_val_zero;
|
return (n >= 0)? xp_awk_val_one: xp_awk_val_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2988,7 +3033,7 @@ static xp_awk_val_t* __eval_binop_lt (
|
|||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
int n = __cmp_val (run, left, right);
|
int n = __cmp_val (run, left, right);
|
||||||
if (n == -99) return XP_NULL;
|
if (n == CMP_ERROR) return XP_NULL;
|
||||||
return (n < 0)? xp_awk_val_one: xp_awk_val_zero;
|
return (n < 0)? xp_awk_val_one: xp_awk_val_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2996,7 +3041,7 @@ static xp_awk_val_t* __eval_binop_le (
|
|||||||
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_run_t* run, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
int n = __cmp_val (run, left, right);
|
int n = __cmp_val (run, left, right);
|
||||||
if (n == -99) return XP_NULL;
|
if (n == CMP_ERROR) return XP_NULL;
|
||||||
return (n <= 0)? xp_awk_val_one: xp_awk_val_zero;
|
return (n <= 0)? xp_awk_val_one: xp_awk_val_zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: val.c,v 1.65 2006-09-29 11:18:13 bacon Exp $
|
* $Id: val.c,v 1.66 2006-10-04 14:51:21 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -562,15 +562,23 @@ static xp_char_t* __val_real_to_str (
|
|||||||
/* TODO: change the code */
|
/* TODO: change the code */
|
||||||
xp_char_t tbuf[256], * tmp;
|
xp_char_t tbuf[256], * tmp;
|
||||||
|
|
||||||
|
/* TODO: need to use awk's own version of sprintf so that it would have
|
||||||
|
* problems with handling long double or double... */
|
||||||
|
/*
|
||||||
#if (XP_SIZEOF_LONG_DOUBLE != 0)
|
#if (XP_SIZEOF_LONG_DOUBLE != 0)
|
||||||
run->awk->syscas->sprintf (
|
run->awk->syscas->sprintf (
|
||||||
tbuf, xp_countof(tbuf), XP_T("%.6Lg"), (long double)v->val);
|
tbuf, xp_countof(tbuf), run->global.ofmt.ptr, (long double)v->val);
|
||||||
#elif (XP_SIZEOF_DOUBLE != 0)
|
#elif (XP_SIZEOF_DOUBLE != 0)
|
||||||
|
*/
|
||||||
|
/* TODO: does it need to check if a null character is included in ofmt??? */
|
||||||
run->awk->syscas->sprintf (
|
run->awk->syscas->sprintf (
|
||||||
tbuf, xp_countof(tbuf), XP_T("%.6g"), (double)v->val);
|
tbuf, xp_countof(tbuf),
|
||||||
|
run->global.ofmt.ptr, (double)v->val);
|
||||||
|
/*
|
||||||
#else
|
#else
|
||||||
#error unsupported floating-point data type
|
#error unsupported floating-point data type
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
if (buf == XP_NULL)
|
if (buf == XP_NULL)
|
||||||
{
|
{
|
||||||
|
@ -41,6 +41,38 @@ BEGIN {
|
|||||||
print "\" \" > a:", (" " > a);
|
print "\" \" > a:", (" " > a);
|
||||||
print "\" \" < a:", (" " < a);
|
print "\" \" < a:", (" " < a);
|
||||||
|
|
||||||
|
print "--------------------------";
|
||||||
|
print "10 == \"10\"", (10 == "10");
|
||||||
|
print "10 != \"10\"", (10 != "10");
|
||||||
|
print "10 >= \"10\"", (10 >= "10");
|
||||||
|
print "10 <= \"10\"", (10 <= "10");
|
||||||
|
print "10 > \"10\"", (10 > "10");
|
||||||
|
print "10 < \"10\"", (10 < "10");
|
||||||
|
|
||||||
|
print "--------------------------";
|
||||||
|
print "10 == \"11\"", (10 == "11");
|
||||||
|
print "10 != \"11\"", (10 != "11");
|
||||||
|
print "10 >= \"11\"", (10 >= "11");
|
||||||
|
print "10 <= \"11\"", (10 <= "11");
|
||||||
|
print "10 > \"11\"", (10 > "11");
|
||||||
|
print "10 < \"11\"", (10 < "11");
|
||||||
|
|
||||||
|
print "--------------------------";
|
||||||
|
print "11 == \"10\"", (11 == "10");
|
||||||
|
print "11 != \"10\"", (11 != "10");
|
||||||
|
print "11 >= \"10\"", (11 >= "10");
|
||||||
|
print "11 <= \"10\"", (11 <= "10");
|
||||||
|
print "11 > \"10\"", (11 > "10");
|
||||||
|
print "11 < \"10\"", (11 < "10");
|
||||||
|
|
||||||
|
print "--------------------------";
|
||||||
|
print "10.0 == \"10\"", (10.0 == "10");
|
||||||
|
print "10.0 != \"10\"", (10.0 != "10");
|
||||||
|
print "10.0 >= \"10\"", (10.0 >= "10");
|
||||||
|
print "10.0 <= \"10\"", (10.0 <= "10");
|
||||||
|
print "10.0 > \"10\"", (10.0 > "10");
|
||||||
|
print "10.0 < \"10\"", (10.0 < "10");
|
||||||
|
|
||||||
#a[10] = 2;
|
#a[10] = 2;
|
||||||
#print a == 1;
|
#print a == 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user