*** empty log message ***
This commit is contained in:
parent
abc5ea4502
commit
11c34a6b0e
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.h,v 1.42 2006-04-05 15:56:20 bacon Exp $
|
* $Id: awk.h,v 1.43 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_AWK_H_
|
#ifndef _XP_AWK_AWK_H_
|
||||||
@ -66,7 +66,8 @@ enum
|
|||||||
XP_AWK_ELVALUE, /* l-value required */
|
XP_AWK_ELVALUE, /* l-value required */
|
||||||
|
|
||||||
/* run time error */
|
/* run time error */
|
||||||
XP_AWK_EDIVBYZERO /* divide by zero */
|
XP_AWK_EDIVBYZERO, /* divide by zero */
|
||||||
|
XP_AWK_EOPERAND /* invalid operand */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: err.c,v 1.4 2006-04-05 15:56:20 bacon Exp $
|
* $Id: err.c,v 1.5 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -40,7 +40,8 @@ const xp_char_t* xp_awk_geterrstr (xp_awk_t* awk)
|
|||||||
XP_TEXT("undefined identifier"),
|
XP_TEXT("undefined identifier"),
|
||||||
XP_TEXT("l-value required"),
|
XP_TEXT("l-value required"),
|
||||||
|
|
||||||
XP_TEXT("divide by zero")
|
XP_TEXT("divide by zero"),
|
||||||
|
XP_TEXT("invalid operand")
|
||||||
};
|
};
|
||||||
|
|
||||||
if (awk->errnum >= 0 && awk->errnum < xp_countof(__errstr)) {
|
if (awk->errnum >= 0 && awk->errnum < xp_countof(__errstr)) {
|
||||||
|
358
ase/awk/run.c
358
ase/awk/run.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.35 2006-04-05 15:56:20 bacon Exp $
|
* $Id: run.c,v 1.36 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -104,6 +104,7 @@ int __printval (xp_awk_pair_t* pair)
|
|||||||
int xp_awk_run (xp_awk_t* awk)
|
int xp_awk_run (xp_awk_t* awk)
|
||||||
{
|
{
|
||||||
xp_size_t nglobals;
|
xp_size_t nglobals;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
// TODO: clear run stack/exit_level
|
// TODO: clear run stack/exit_level
|
||||||
awk->run.exit_level = EXIT_NONE;
|
awk->run.exit_level = EXIT_NONE;
|
||||||
@ -122,29 +123,39 @@ int xp_awk_run (xp_awk_t* awk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (awk->tree.begin != XP_NULL)
|
if (n == 0 && awk->tree.begin != XP_NULL)
|
||||||
{
|
{
|
||||||
xp_assert (awk->tree.begin->type == XP_AWK_NDE_BLK);
|
xp_assert (awk->tree.begin->type == XP_AWK_NDE_BLK);
|
||||||
if (__run_block (awk,
|
if (__run_block (awk,
|
||||||
(xp_awk_nde_blk_t*)awk->tree.begin) == -1) return -1;
|
(xp_awk_nde_blk_t*)awk->tree.begin) == -1) n = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (awk->tree.end != XP_NULL)
|
if (n == 0 && awk->tree.end != XP_NULL)
|
||||||
{
|
{
|
||||||
xp_assert (awk->tree.end->type == XP_AWK_NDE_BLK);
|
xp_assert (awk->tree.end->type == XP_AWK_NDE_BLK);
|
||||||
if (__run_block (awk,
|
if (__run_block (awk,
|
||||||
(xp_awk_nde_blk_t*)awk->tree.end) == -1) return -1;
|
(xp_awk_nde_blk_t*)awk->tree.end) == -1) n = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_printf (XP_TEXT("---------------------------\n"));
|
nglobals = awk->tree.nglobals;
|
||||||
|
while (nglobals > 0)
|
||||||
|
{
|
||||||
|
--nglobals;
|
||||||
|
xp_awk_refdownval (awk, STACK_GLOBAL(awk,nglobals));
|
||||||
|
__raw_pop (awk);
|
||||||
|
}
|
||||||
|
|
||||||
|
xp_printf (XP_TEXT("-BEGIN------------------------\n"));
|
||||||
xp_awk_map_walk (&awk->run.named, __printval);
|
xp_awk_map_walk (&awk->run.named, __printval);
|
||||||
return 0;
|
xp_printf (XP_TEXT("-END--------------------------\n"));
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __run_block (xp_awk_t* awk, xp_awk_nde_blk_t* nde)
|
static int __run_block (xp_awk_t* awk, xp_awk_nde_blk_t* nde)
|
||||||
{
|
{
|
||||||
xp_awk_nde_t* p;
|
xp_awk_nde_t* p;
|
||||||
xp_size_t nlocals;
|
xp_size_t nlocals;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
xp_assert (nde->type == XP_AWK_NDE_BLK);
|
xp_assert (nde->type == XP_AWK_NDE_BLK);
|
||||||
|
|
||||||
@ -168,7 +179,11 @@ static int __run_block (xp_awk_t* awk, xp_awk_nde_blk_t* nde)
|
|||||||
//xp_printf (XP_TEXT("executing block statements\n"));
|
//xp_printf (XP_TEXT("executing block statements\n"));
|
||||||
while (p != XP_NULL && awk->run.exit_level == EXIT_NONE)
|
while (p != XP_NULL && awk->run.exit_level == EXIT_NONE)
|
||||||
{
|
{
|
||||||
if (__run_statement(awk,p) == -1) return -1;
|
if (__run_statement(awk,p) == -1)
|
||||||
|
{
|
||||||
|
n = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
p = p->next;
|
p = p->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +197,7 @@ static int __run_block (xp_awk_t* awk, xp_awk_nde_blk_t* nde)
|
|||||||
__raw_pop (awk);
|
__raw_pop (awk);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __run_statement (xp_awk_t* awk, xp_awk_nde_t* nde)
|
static int __run_statement (xp_awk_t* awk, xp_awk_nde_t* nde)
|
||||||
@ -812,17 +827,48 @@ static xp_awk_val_t* __eval_binop_eq (
|
|||||||
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* res = XP_NULL;
|
xp_awk_val_t* res = XP_NULL;
|
||||||
|
xp_long_t r = 0;
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
r = ((xp_awk_val_int_t*)left)->val ==
|
||||||
((xp_awk_val_int_t*)left)->val ==
|
((xp_awk_val_int_t*)right)->val;
|
||||||
((xp_awk_val_int_t*)right)->val;
|
}
|
||||||
res = xp_awk_makeintval (awk, r);
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
// TOOD: error handling
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val ==
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val ==
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val ==
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
r = xp_strxncmp (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len) == 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = xp_awk_makeintval (awk, r);
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -830,17 +876,48 @@ static xp_awk_val_t* __eval_binop_ne (
|
|||||||
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* res = XP_NULL;
|
xp_awk_val_t* res = XP_NULL;
|
||||||
|
xp_long_t r = 0;
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
r = ((xp_awk_val_int_t*)left)->val !=
|
||||||
((xp_awk_val_int_t*)left)->val !=
|
((xp_awk_val_int_t*)right)->val;
|
||||||
((xp_awk_val_int_t*)right)->val;
|
}
|
||||||
res = xp_awk_makeintval (awk, r);
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
// TOOD: error handling
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val !=
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val !=
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val !=
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
r = xp_strxncmp (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len) != 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = xp_awk_makeintval (awk, r);
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -848,17 +925,48 @@ static xp_awk_val_t* __eval_binop_gt (
|
|||||||
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* res = XP_NULL;
|
xp_awk_val_t* res = XP_NULL;
|
||||||
|
xp_long_t r = 0;
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
r = ((xp_awk_val_int_t*)left)->val >
|
||||||
((xp_awk_val_int_t*)left)->val >
|
((xp_awk_val_int_t*)right)->val;
|
||||||
((xp_awk_val_int_t*)right)->val;
|
}
|
||||||
res = xp_awk_makeintval (awk, r);
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
// TOOD: error handling
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val >
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val >
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val >
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
r = xp_strxncmp (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len) > 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = xp_awk_makeintval (awk, r);
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -866,17 +974,48 @@ static xp_awk_val_t* __eval_binop_ge (
|
|||||||
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* res = XP_NULL;
|
xp_awk_val_t* res = XP_NULL;
|
||||||
|
xp_long_t r = 0;
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
r = ((xp_awk_val_int_t*)left)->val >=
|
||||||
((xp_awk_val_int_t*)left)->val >=
|
((xp_awk_val_int_t*)right)->val;
|
||||||
((xp_awk_val_int_t*)right)->val;
|
}
|
||||||
res = xp_awk_makeintval (awk, r);
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
// TOOD: error handling
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val >=
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val >=
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val >=
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
r = xp_strxncmp (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len) >= 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = xp_awk_makeintval (awk, r);
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -884,17 +1023,48 @@ static xp_awk_val_t* __eval_binop_lt (
|
|||||||
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* res = XP_NULL;
|
xp_awk_val_t* res = XP_NULL;
|
||||||
|
xp_long_t r = 0;
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
r = ((xp_awk_val_int_t*)left)->val <
|
||||||
((xp_awk_val_int_t*)left)->val <
|
((xp_awk_val_int_t*)right)->val;
|
||||||
((xp_awk_val_int_t*)right)->val;
|
}
|
||||||
res = xp_awk_makeintval (awk, r);
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
// TOOD: error handling
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val <
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val <
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val <
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
r = xp_strxncmp (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len) < 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = xp_awk_makeintval (awk, r);
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -902,17 +1072,48 @@ static xp_awk_val_t* __eval_binop_le (
|
|||||||
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
xp_awk_t* awk, xp_awk_val_t* left, xp_awk_val_t* right)
|
||||||
{
|
{
|
||||||
xp_awk_val_t* res = XP_NULL;
|
xp_awk_val_t* res = XP_NULL;
|
||||||
|
xp_long_t r = 0;
|
||||||
|
|
||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
r = ((xp_awk_val_int_t*)left)->val <=
|
||||||
((xp_awk_val_int_t*)left)->val <=
|
((xp_awk_val_int_t*)right)->val;
|
||||||
((xp_awk_val_int_t*)right)->val;
|
}
|
||||||
res = xp_awk_makeintval (awk, r);
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
// TOOD: error handling
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val <=
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val <=
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val <=
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
r = xp_strxncmp (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len) <= 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res = xp_awk_makeintval (awk, r);
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -928,9 +1129,13 @@ static xp_awk_val_t* __eval_binop_lshift (
|
|||||||
((xp_awk_val_int_t*)left)->val <<
|
((xp_awk_val_int_t*)left)->val <<
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -946,9 +1151,13 @@ static xp_awk_val_t* __eval_binop_rshift (
|
|||||||
((xp_awk_val_int_t*)left)->val >>
|
((xp_awk_val_int_t*)left)->val >>
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -964,7 +1173,6 @@ static xp_awk_val_t* __eval_binop_plus (
|
|||||||
((xp_awk_val_int_t*)left)->val +
|
((xp_awk_val_int_t*)left)->val +
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
|
||||||
}
|
}
|
||||||
else if (left->type == XP_AWK_VAL_REAL &&
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
right->type == XP_AWK_VAL_REAL)
|
right->type == XP_AWK_VAL_REAL)
|
||||||
@ -990,11 +1198,22 @@ static xp_awk_val_t* __eval_binop_plus (
|
|||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makerealval (awk, r);
|
res = xp_awk_makerealval (awk, r);
|
||||||
}
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_STR &&
|
||||||
|
right->type == XP_AWK_VAL_STR)
|
||||||
|
{
|
||||||
|
res = xp_awk_makestrval2 (
|
||||||
|
((xp_awk_val_str_t*)left)->buf,
|
||||||
|
((xp_awk_val_str_t*)left)->len,
|
||||||
|
((xp_awk_val_str_t*)right)->buf,
|
||||||
|
((xp_awk_val_str_t*)right)->len);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* TODO: trigger error */
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
// TODO: addition between integer and astring??? 1 + "123"
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1010,7 +1229,6 @@ static xp_awk_val_t* __eval_binop_minus (
|
|||||||
((xp_awk_val_int_t*)left)->val -
|
((xp_awk_val_int_t*)left)->val -
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
|
||||||
}
|
}
|
||||||
else if (left->type == XP_AWK_VAL_REAL &&
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
right->type == XP_AWK_VAL_REAL)
|
right->type == XP_AWK_VAL_REAL)
|
||||||
@ -1038,9 +1256,10 @@ static xp_awk_val_t* __eval_binop_minus (
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* TODO: trigger error */
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1052,13 +1271,42 @@ static xp_awk_val_t* __eval_binop_mul (
|
|||||||
if (left->type == XP_AWK_VAL_INT &&
|
if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_long_t r =
|
xp_long_t r;
|
||||||
((xp_awk_val_int_t*)left)->val *
|
|
||||||
((xp_awk_val_int_t*)right)->val;
|
r = ((xp_awk_val_int_t*)left)->val *
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
xp_real_t r;
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val *
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
res = xp_awk_makerealval (awk, r);
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
|
right->type == XP_AWK_VAL_REAL)
|
||||||
|
{
|
||||||
|
xp_real_t r;
|
||||||
|
r = ((xp_awk_val_int_t*)left)->val *
|
||||||
|
((xp_awk_val_real_t*)right)->val;
|
||||||
|
res = xp_awk_makerealval (awk, r);
|
||||||
|
}
|
||||||
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
|
right->type == XP_AWK_VAL_INT)
|
||||||
|
{
|
||||||
|
xp_real_t r;
|
||||||
|
r = ((xp_awk_val_real_t*)left)->val *
|
||||||
|
((xp_awk_val_int_t*)right)->val;
|
||||||
|
res = xp_awk_makerealval (awk, r);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1080,23 +1328,19 @@ static xp_awk_val_t* __eval_binop_div (
|
|||||||
r = ((xp_awk_val_int_t*)left)->val /
|
r = ((xp_awk_val_int_t*)left)->val /
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
|
||||||
}
|
}
|
||||||
else if (left->type == XP_AWK_VAL_REAL &&
|
else if (left->type == XP_AWK_VAL_REAL &&
|
||||||
right->type == XP_AWK_VAL_REAL)
|
right->type == XP_AWK_VAL_REAL)
|
||||||
{
|
{
|
||||||
xp_real_t r;
|
xp_real_t r;
|
||||||
|
|
||||||
r = ((xp_awk_val_real_t*)left)->val /
|
r = ((xp_awk_val_real_t*)left)->val /
|
||||||
((xp_awk_val_real_t*)right)->val;
|
((xp_awk_val_real_t*)right)->val;
|
||||||
res = xp_awk_makerealval (awk, r);
|
res = xp_awk_makerealval (awk, r);
|
||||||
// TOOD: error handling
|
|
||||||
}
|
}
|
||||||
else if (left->type == XP_AWK_VAL_INT &&
|
else if (left->type == XP_AWK_VAL_INT &&
|
||||||
right->type == XP_AWK_VAL_REAL)
|
right->type == XP_AWK_VAL_REAL)
|
||||||
{
|
{
|
||||||
xp_real_t r;
|
xp_real_t r;
|
||||||
|
|
||||||
r = ((xp_awk_val_int_t*)left)->val /
|
r = ((xp_awk_val_int_t*)left)->val /
|
||||||
((xp_awk_val_real_t*)right)->val;
|
((xp_awk_val_real_t*)right)->val;
|
||||||
res = xp_awk_makerealval (awk, r);
|
res = xp_awk_makerealval (awk, r);
|
||||||
@ -1105,16 +1349,16 @@ static xp_awk_val_t* __eval_binop_div (
|
|||||||
right->type == XP_AWK_VAL_INT)
|
right->type == XP_AWK_VAL_INT)
|
||||||
{
|
{
|
||||||
xp_real_t r;
|
xp_real_t r;
|
||||||
|
|
||||||
r = ((xp_awk_val_real_t*)left)->val /
|
r = ((xp_awk_val_real_t*)left)->val /
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makerealval (awk, r);
|
res = xp_awk_makerealval (awk, r);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: invalid operands for div
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1136,13 +1380,13 @@ static xp_awk_val_t* __eval_binop_mod (
|
|||||||
r = ((xp_awk_val_int_t*)left)->val %
|
r = ((xp_awk_val_int_t*)left)->val %
|
||||||
((xp_awk_val_int_t*)right)->val;
|
((xp_awk_val_int_t*)right)->val;
|
||||||
res = xp_awk_makeintval (awk, r);
|
res = xp_awk_makeintval (awk, r);
|
||||||
// TOOD: error handling
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: mod is only for integers
|
PANIC (awk, XP_AWK_EOPERAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (res == XP_NULL) PANIC (awk, XP_AWK_ENOMEM);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
49
ase/awk/sa.c
49
ase/awk/sa.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: sa.c,v 1.14 2006-04-04 16:03:14 bacon Exp $
|
* $Id: sa.c,v 1.15 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -34,7 +34,22 @@ xp_char_t* xp_strxdup (const xp_char_t* str, xp_size_t len)
|
|||||||
tmp = (xp_char_t*) xp_malloc ((len + 1) * xp_sizeof(xp_char_t));
|
tmp = (xp_char_t*) xp_malloc ((len + 1) * xp_sizeof(xp_char_t));
|
||||||
if (tmp == XP_NULL) return XP_NULL;
|
if (tmp == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
xp_strxncpy (tmp, len + 1, str, len);
|
xp_strncpy (tmp, str, len);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
xp_char_t* xp_strxdup2 (
|
||||||
|
const xp_char_t* str1, xp_size_t len1,
|
||||||
|
const xp_char_t* str2, xp_size_t len2)
|
||||||
|
{
|
||||||
|
xp_char_t* tmp;
|
||||||
|
|
||||||
|
tmp = (xp_char_t*) xp_malloc (
|
||||||
|
(len1 + len2 + 1) * xp_sizeof(xp_char_t));
|
||||||
|
if (tmp == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
|
xp_strncpy (tmp, str1, len1);
|
||||||
|
xp_strncpy (tmp + len1, str2, len2);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,17 +60,12 @@ xp_size_t xp_strcpy (xp_char_t* buf, const xp_char_t* str)
|
|||||||
return buf - org - 1;
|
return buf - org - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_size_t xp_strxncpy (
|
xp_size_t xp_strncpy (xp_char_t* buf, const xp_char_t* str, xp_size_t len)
|
||||||
xp_char_t* buf, xp_size_t bsz, const xp_char_t* str, xp_size_t len)
|
|
||||||
{
|
{
|
||||||
xp_size_t n;
|
const xp_char_t* end = str + len;
|
||||||
|
while (str < end) *buf++ = *str++;
|
||||||
if (bsz <= 0) return 0;
|
*buf = XP_CHAR('\0');
|
||||||
if ((n = bsz - 1) > len) n = len;
|
return len;
|
||||||
xp_memcpy (buf, str, n * xp_sizeof(xp_char_t));
|
|
||||||
buf[n] = XP_CHAR('\0');
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2)
|
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2)
|
||||||
@ -66,6 +76,21 @@ int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int xp_strxncmp (
|
||||||
|
const xp_char_t* s1, xp_size_t len1,
|
||||||
|
const xp_char_t* s2, xp_size_t len2)
|
||||||
|
{
|
||||||
|
const xp_char_t* end1 = s1 + len1;
|
||||||
|
const xp_char_t* end2 = s2 + len2;
|
||||||
|
|
||||||
|
while (s1 < end1 && s2 < end2 && *s1 == *s2) {
|
||||||
|
s1++; s2++;
|
||||||
|
}
|
||||||
|
if (s1 == end1 && s2 == end2) return 0;
|
||||||
|
if (*s1 == *s2) return (s1 < end1)? 1: -1;
|
||||||
|
return (*s1 > *s2)? 1: -1;
|
||||||
|
}
|
||||||
|
|
||||||
int xp_printf (const xp_char_t* fmt, ...)
|
int xp_printf (const xp_char_t* fmt, ...)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
17
ase/awk/sa.h
17
ase/awk/sa.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: sa.h,v 1.19 2006-04-04 16:03:14 bacon Exp $
|
* $Id: sa.h,v 1.20 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_SA_H_
|
#ifndef _XP_AWK_SA_H_
|
||||||
@ -89,16 +89,25 @@ xp_char_t* xp_strdup (const xp_char_t* str);
|
|||||||
#define xp_strxdup xp_awk_strxdup
|
#define xp_strxdup xp_awk_strxdup
|
||||||
xp_char_t* xp_strxdup (const xp_char_t* str, xp_size_t len);
|
xp_char_t* xp_strxdup (const xp_char_t* str, xp_size_t len);
|
||||||
|
|
||||||
|
#define xp_strxdup2 xp_awk_strxdup2
|
||||||
|
xp_char_t* xp_strxdup2 (
|
||||||
|
const xp_char_t* str1, xp_size_t len1,
|
||||||
|
const xp_char_t* str2, xp_size_t len2);
|
||||||
|
|
||||||
#define xp_strcpy xp_awk_strcpy
|
#define xp_strcpy xp_awk_strcpy
|
||||||
xp_size_t xp_strcpy (xp_char_t* buf, const xp_char_t* str);
|
xp_size_t xp_strcpy (xp_char_t* buf, const xp_char_t* str);
|
||||||
|
|
||||||
#define xp_strxncpy xp_awk_strxncpy
|
#define xp_strncpy xp_awk_strncpy
|
||||||
xp_size_t xp_strxncpy (
|
xp_size_t xp_strncpy (xp_char_t* buf, const xp_char_t* str, xp_size_t len);
|
||||||
xp_char_t* buf, xp_size_t bsz, const xp_char_t* str, xp_size_t len);
|
|
||||||
|
|
||||||
#define xp_strcmp xp_awk_strcmp
|
#define xp_strcmp xp_awk_strcmp
|
||||||
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2);
|
int xp_strcmp (const xp_char_t* s1, const xp_char_t* s2);
|
||||||
|
|
||||||
|
#define xp_strxncmp xp_awk_strxncmp
|
||||||
|
int xp_strxncmp (
|
||||||
|
const xp_char_t* s1, xp_size_t len1,
|
||||||
|
const xp_char_t* s2, xp_size_t len2);
|
||||||
|
|
||||||
#define xp_printf xp_awk_printf
|
#define xp_printf xp_awk_printf
|
||||||
int xp_printf (const xp_char_t* fmt, ...);
|
int xp_printf (const xp_char_t* fmt, ...);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: val.c,v 1.15 2006-04-04 16:50:36 bacon Exp $
|
* $Id: val.c,v 1.16 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -97,6 +97,27 @@ xp_awk_val_t* xp_awk_makestrval (const xp_char_t* str, xp_size_t len)
|
|||||||
return (xp_awk_val_t*)val;
|
return (xp_awk_val_t*)val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xp_awk_val_t* xp_awk_makestrval2 (
|
||||||
|
const xp_char_t* str1, xp_size_t len1,
|
||||||
|
const xp_char_t* str2, xp_size_t len2)
|
||||||
|
{
|
||||||
|
xp_awk_val_str_t* val;
|
||||||
|
|
||||||
|
val = (xp_awk_val_str_t*)xp_malloc(xp_sizeof(xp_awk_val_str_t));
|
||||||
|
if (val == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
|
val->type = XP_AWK_VAL_STR;
|
||||||
|
val->ref = 0;
|
||||||
|
val->len = len1 + len2;
|
||||||
|
val->buf = xp_strxdup2 (str1, len1, str2, len2);
|
||||||
|
if (val->buf == XP_NULL) {
|
||||||
|
xp_free (val);
|
||||||
|
return XP_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (xp_awk_val_t*)val;
|
||||||
|
}
|
||||||
|
|
||||||
xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val)
|
xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val)
|
||||||
{
|
{
|
||||||
return val == XP_NULL || val == xp_awk_val_nil ||
|
return val == XP_NULL || val == xp_awk_val_nil ||
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: val.h,v 1.12 2006-03-28 16:33:09 bacon Exp $
|
* $Id: val.h,v 1.13 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_VAL_H_
|
#ifndef _XP_AWK_VAL_H_
|
||||||
@ -78,6 +78,9 @@ extern xp_awk_val_t* xp_awk_val_nil;
|
|||||||
xp_awk_val_t* xp_awk_makeintval (xp_awk_t* awk, xp_long_t v);
|
xp_awk_val_t* xp_awk_makeintval (xp_awk_t* awk, xp_long_t v);
|
||||||
xp_awk_val_t* xp_awk_makerealval (xp_awk_t* awk, xp_real_t v);
|
xp_awk_val_t* xp_awk_makerealval (xp_awk_t* awk, xp_real_t v);
|
||||||
xp_awk_val_t* xp_awk_makestrval (const xp_char_t* str, xp_size_t len);
|
xp_awk_val_t* xp_awk_makestrval (const xp_char_t* str, xp_size_t len);
|
||||||
|
xp_awk_val_t* xp_awk_makestrval2 (
|
||||||
|
const xp_char_t* str1, xp_size_t len1,
|
||||||
|
const xp_char_t* str2, xp_size_t len2);
|
||||||
//xp_awk_val_t* xp_awk_makemapval ();
|
//xp_awk_val_t* xp_awk_makemapval ();
|
||||||
|
|
||||||
xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val);
|
xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.c,v 1.15 2006-03-31 18:09:26 bacon Exp $
|
* $Id: awk.c,v 1.16 2006-04-06 16:25:37 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk.h>
|
#include <xp/awk/awk.h>
|
||||||
@ -72,7 +72,7 @@ int xp_main (int argc, char* argv[])
|
|||||||
|
|
||||||
xp_awk_setparseopt (awk,
|
xp_awk_setparseopt (awk,
|
||||||
XP_AWK_EXPLICIT | XP_AWK_UNIQUE |
|
XP_AWK_EXPLICIT | XP_AWK_UNIQUE |
|
||||||
XP_AWK_SHADING | XP_AWK_IMPLICIT);
|
XP_AWK_SHADING | XP_AWK_IMPLICIT | XP_AWK_SHIFT);
|
||||||
|
|
||||||
if (xp_awk_parse(awk) == -1) {
|
if (xp_awk_parse(awk) == -1) {
|
||||||
xp_printf (
|
xp_printf (
|
||||||
@ -87,6 +87,7 @@ int xp_main (int argc, char* argv[])
|
|||||||
XP_TEXT("error: cannot run program - [%d] %s\n"),
|
XP_TEXT("error: cannot run program - [%d] %s\n"),
|
||||||
xp_awk_geterrnum(awk), xp_awk_geterrstr(awk));
|
xp_awk_geterrnum(awk), xp_awk_geterrstr(awk));
|
||||||
xp_awk_close (awk);
|
xp_awk_close (awk);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_awk_close (awk);
|
xp_awk_close (awk);
|
||||||
|
Loading…
Reference in New Issue
Block a user