*** empty log message ***

This commit is contained in:
hyung-hwan 2006-11-03 14:46:33 +00:00
parent ab969f2171
commit df7f506cb9

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.253 2006-11-02 11:36:41 bacon Exp $ * $Id: run.c,v 1.254 2006-11-03 14:46:33 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -81,6 +81,9 @@ static int __run_nextfile (ase_awk_run_t* run, ase_awk_nde_nextfile_t* nde);
static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde); static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde);
static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde); static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde);
static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde); static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde);
static int __formatted_output (
ase_awk_run_t* run, int out_type, const ase_char_t* dst,
const ase_char_t* fmt, ase_size_t fmt_len, ase_awk_nde_t* args);
static ase_awk_val_t* __eval_expression (ase_awk_run_t* run, ase_awk_nde_t* nde); static ase_awk_val_t* __eval_expression (ase_awk_run_t* run, ase_awk_nde_t* nde);
static ase_awk_val_t* __eval_expression0 (ase_awk_run_t* run, ase_awk_nde_t* nde); static ase_awk_val_t* __eval_expression0 (ase_awk_run_t* run, ase_awk_nde_t* nde);
@ -1411,7 +1414,7 @@ static int __run_block (ase_awk_run_t* run, ase_awk_nde_blk_t* nde)
p = nde->body; p = nde->body;
nlocals = nde->nlocals; nlocals = nde->nlocals;
/*xp_printf (ASE_T("securing space for local variables nlocals = %d\n"), (int)nlocals);*/ /*ase_tprintf (ASE_T("securing space for local variables nlocals = %d\n"), (int)nlocals);*/
saved_stack_top = run->stack_top; saved_stack_top = run->stack_top;
/* secure space for local variables */ /* secure space for local variables */
@ -1428,10 +1431,10 @@ static int __run_block (ase_awk_run_t* run, ase_awk_nde_blk_t* nde)
/* refupval is not required for ase_awk_val_nil */ /* refupval is not required for ase_awk_val_nil */
} }
/*xp_printf (ASE_T("executing block statements\n"));*/ /*ase_tprintf (ASE_T("executing block statements\n"));*/
while (p != ASE_NULL && run->exit_level == EXIT_NONE) while (p != ASE_NULL && run->exit_level == EXIT_NONE)
{ {
/*xp_printf (ASE_T("running a statement\n"));*/ /*ase_tprintf (ASE_T("running a statement\n"));*/
if (__run_statement(run,p) == -1) if (__run_statement(run,p) == -1)
{ {
n = -1; n = -1;
@ -1440,7 +1443,7 @@ static int __run_block (ase_awk_run_t* run, ase_awk_nde_blk_t* nde)
p = p->next; p = p->next;
} }
/*xp_printf (ASE_T("popping off local variables\n"));*/ /*ase_tprintf (ASE_T("popping off local variables\n"));*/
/* pop off local variables */ /* pop off local variables */
nlocals = nde->nlocals; nlocals = nde->nlocals;
while (nlocals > 0) while (nlocals > 0)
@ -1802,12 +1805,12 @@ static int __walk_foreach (ase_awk_pair_t* pair, void* arg)
static int __run_foreach (ase_awk_run_t* run, ase_awk_nde_foreach_t* nde) static int __run_foreach (ase_awk_run_t* run, ase_awk_nde_foreach_t* nde)
{ {
int n; int n;
ase_awk_nde_exp_t* test; ase_awk_nde_ease_tt* test;
ase_awk_val_t* rv; ase_awk_val_t* rv;
ase_awk_map_t* map; ase_awk_map_t* map;
struct __foreach_walker_t walker; struct __foreach_walker_t walker;
test = (ase_awk_nde_exp_t*)nde->test; test = (ase_awk_nde_ease_tt*)nde->test;
ASE_AWK_ASSERT (run->awk, test->type == ASE_AWK_NDE_EXP_BIN && ASE_AWK_ASSERT (run->awk, test->type == ASE_AWK_NDE_EXP_BIN &&
test->opcode == ASE_AWK_BINOP_IN); test->opcode == ASE_AWK_BINOP_IN);
@ -1857,14 +1860,14 @@ static int __run_return (ase_awk_run_t* run, ase_awk_nde_return_t* nde)
* by the parser first of all */ * by the parser first of all */
ASE_AWK_ASSERT (run->awk, nde->val->next == ASE_NULL); ASE_AWK_ASSERT (run->awk, nde->val->next == ASE_NULL);
/*xp_printf (ASE_T("returning....\n"));*/ /*ase_tprintf (ASE_T("returning....\n"));*/
val = __eval_expression (run, nde->val); val = __eval_expression (run, nde->val);
if (val == ASE_NULL) return -1; if (val == ASE_NULL) return -1;
ase_awk_refdownval (run, STACK_RETVAL(run)); ase_awk_refdownval (run, STACK_RETVAL(run));
STACK_RETVAL(run) = val; STACK_RETVAL(run) = val;
ase_awk_refupval (val); /* see __eval_call for the trick */ ase_awk_refupval (val); /* see __eval_call for the trick */
/*xp_printf (ASE_T("set return value....\n"));*/ /*ase_tprintf (ASE_T("set return value....\n"));*/
} }
run->exit_level = EXIT_FUNCTION; run->exit_level = EXIT_FUNCTION;
@ -1957,10 +1960,12 @@ static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
{ {
ase_awk_pair_t* pair; ase_awk_pair_t* pair;
ASE_AWK_ASSERT (run->awk, (var->type == ASE_AWK_NDE_NAMED && ASE_AWK_ASSERTX (run->awk,
var->idx == ASE_NULL) || (var->type == ASE_AWK_NDE_NAMED && var->idx == ASE_NULL) ||
(var->type == ASE_AWK_NDE_NAMEDIDX && (var->type == ASE_AWK_NDE_NAMEDIDX && var->idx != ASE_NULL),
var->idx != ASE_NULL)); "if a named variable has an index part and "
"a named indexed variable doesn't have an index "
"part, the program is definitely wrong");
pair = ase_awk_map_get ( pair = ase_awk_map_get (
&run->named, var->id.name, var->id.name_len); &run->named, var->id.name, var->id.name_len);
@ -2149,24 +2154,23 @@ static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde) static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
{ {
ase_awk_nde_print_t* p = (ase_awk_nde_print_t*)nde;
ase_char_t* out = ASE_NULL; ase_char_t* out = ASE_NULL;
const ase_char_t* dst; const ase_char_t* dst;
ase_awk_val_t* v; ase_awk_val_t* v;
int n; int n;
ASE_AWK_ASSERT (run->awk, ASE_AWK_ASSERT (run->awk,
(p->out_type == ASE_AWK_OUT_PIPE && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_PIPE && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_COPROC && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_COPROC && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_FILE && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_FILE && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_FILE_APPEND && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_FILE_APPEND && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_CONSOLE && p->out == ASE_NULL)); (nde->out_type == ASE_AWK_OUT_CONSOLE && nde->out == ASE_NULL));
if (p->out != ASE_NULL) if (nde->out != ASE_NULL)
{ {
ase_size_t len; ase_size_t len;
v = __eval_expression (run, p->out); v = __eval_expression (run, nde->out);
if (v == ASE_NULL) return -1; if (v == ASE_NULL) return -1;
ase_awk_refupval (v); ase_awk_refupval (v);
@ -2209,10 +2213,10 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
dst = (out == ASE_NULL)? ASE_T(""): out; dst = (out == ASE_NULL)? ASE_T(""): out;
if (p->args == ASE_NULL) if (nde->args == ASE_NULL)
{ {
n = ase_awk_writeextio_str ( n = ase_awk_writeextio_str (
run, p->out_type, dst, run, nde->out_type, dst,
ASE_AWK_STR_BUF(&run->inrec.line), ASE_AWK_STR_BUF(&run->inrec.line),
ASE_AWK_STR_LEN(&run->inrec.line)); ASE_AWK_STR_LEN(&run->inrec.line));
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
@ -2227,20 +2231,20 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
{ {
ase_awk_nde_t* head, * np; ase_awk_nde_t* head, * np;
if (p->args->type == ASE_AWK_NDE_GRP) if (nde->args->type == ASE_AWK_NDE_GRP)
{ {
/* parenthesized print */ /* parenthesized print */
ASE_AWK_ASSERT (run->awk, p->args->next == ASE_NULL); ASE_AWK_ASSERT (run->awk, nde->args->next == ASE_NULL);
head = ((ase_awk_nde_grp_t*)p->args)->body; head = ((ase_awk_nde_grp_t*)nde->args)->body;
} }
else head = p->args; else head = nde->args;
for (np = head; np != ASE_NULL; np = np->next) for (np = head; np != ASE_NULL; np = np->next)
{ {
if (np != head) if (np != head)
{ {
n = ase_awk_writeextio_str ( n = ase_awk_writeextio_str (
run, p->out_type, dst, run, nde->out_type, dst,
run->global.ofs.ptr, run->global.ofs.ptr,
run->global.ofs.len); run->global.ofs.len);
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
@ -2258,7 +2262,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
} }
ase_awk_refupval (v); ase_awk_refupval (v);
n = ase_awk_writeextio_val (run, p->out_type, dst, v); n = ase_awk_writeextio_val (run, nde->out_type, dst, v);
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
@ -2275,7 +2279,7 @@ static int __run_print (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
} }
n = ase_awk_writeextio_str ( n = ase_awk_writeextio_str (
run, p->out_type, dst, run, nde->out_type, dst,
run->global.ors.ptr, run->global.ors.len); run->global.ors.ptr, run->global.ors.len);
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
{ {
@ -2305,7 +2309,6 @@ ASE_AWK_ASSERTX (run->awk, !"should never happen - not implemented",
static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde) static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
{ {
ase_awk_nde_print_t* p = (ase_awk_nde_print_t*)nde;
ase_char_t* out = ASE_NULL; ase_char_t* out = ASE_NULL;
const ase_char_t* dst; const ase_char_t* dst;
ase_awk_val_t* v, * fmt; ase_awk_val_t* v, * fmt;
@ -2313,17 +2316,17 @@ static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
int n; int n;
ASE_AWK_ASSERT (run->awk, ASE_AWK_ASSERT (run->awk,
(p->out_type == ASE_AWK_OUT_PIPE && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_PIPE && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_COPROC && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_COPROC && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_FILE && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_FILE && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_FILE_APPEND && p->out != ASE_NULL) || (nde->out_type == ASE_AWK_OUT_FILE_APPEND && nde->out != ASE_NULL) ||
(p->out_type == ASE_AWK_OUT_CONSOLE && p->out == ASE_NULL)); (nde->out_type == ASE_AWK_OUT_CONSOLE && nde->out == ASE_NULL));
if (p->out != ASE_NULL) if (nde->out != ASE_NULL)
{ {
ase_size_t len; ase_size_t len;
v = __eval_expression (run, p->out); v = __eval_expression (run, nde->out);
if (v == ASE_NULL) return -1; if (v == ASE_NULL) return -1;
ase_awk_refupval (v); ase_awk_refupval (v);
@ -2366,17 +2369,17 @@ static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
dst = (out == ASE_NULL)? ASE_T(""): out; dst = (out == ASE_NULL)? ASE_T(""): out;
ASE_AWK_ASSERTX (run->awk, p->args != ASE_NULL, ASE_AWK_ASSERTX (run->awk, nde->args != ASE_NULL,
"a valid printf statement should have at least one argument. " "a valid printf statement should have at least one argument. "
"the parser must ensure this."); "the parser must ensure this.");
if (p->args->type == ASE_AWK_NDE_GRP) if (nde->args->type == ASE_AWK_NDE_GRP)
{ {
/* parenthesized print */ /* parenthesized print */
ASE_AWK_ASSERT (run->awk, p->args->next == ASE_NULL); ASE_AWK_ASSERT (run->awk, nde->args->next == ASE_NULL);
head = ((ase_awk_nde_grp_t*)p->args)->body; head = ((ase_awk_nde_grp_t*)nde->args)->body;
} }
else head = p->args; else head = nde->args;
ASE_AWK_ASSERTX (run->awk, head != ASE_NULL, ASE_AWK_ASSERTX (run->awk, head != ASE_NULL,
"a valid printf statement should have at least one argument. " "a valid printf statement should have at least one argument. "
@ -2394,7 +2397,7 @@ static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
{ {
/* the remaining arguments are ignored as the format cannot /* the remaining arguments are ignored as the format cannot
* contain any % characters */ * contain any % characters */
n = ase_awk_writeextio_val (run, p->out_type, dst, v); n = ase_awk_writeextio_val (run, nde->out_type, dst, v);
if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER) if (n < 0 && run->errnum != ASE_AWK_EIOHANDLER)
{ {
if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out); if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
@ -2404,23 +2407,16 @@ static int __run_printf (ase_awk_run_t* run, ase_awk_nde_print_t* nde)
} }
else else
{ {
/* check the formatting characters */ /* perform the formatted output */
ase_char_t* fmt = ((ase_awk_val_str_t*)v)->buf; if (__formatted_output (
ase_size_t fmt_len = ((ase_awk_val_str_t*)v)->len; run, nde->out_type, dst,
ase_size_t i; ((ase_awk_val_str_t*)v)->buf,
((ase_awk_val_str_t*)v)->len,
for (i = 0; i < fmt_len; i++) head->next) == -1)
{ {
if (fmt[i] == ASE_T('%')) if (out != ASE_NULL) ASE_AWK_FREE (run->awk, out);
{ ase_awk_refdownval (run, v);
/* TODO: */ return -1;
}
else
{
/* TODO: do buffering and call these... */
ase_awk_writeextio_str (
run, p->out_type, dst, &fmt[i], 1);
}
} }
} }
ase_awk_refdownval (run, v); ase_awk_refdownval (run, v);
@ -2431,6 +2427,205 @@ skip_write:
return 0; return 0;
} }
static int __formatted_output (
ase_awk_run_t* run, int out_type, const ase_char_t* dst,
const ase_char_t* fmt, ase_size_t fmt_len, ase_awk_nde_t* args)
{
#if 0
ase_size_t i;
ase_bool_t formatting = ase_false;
for (i = 0; i < fmt_len; i++)
{
if (formatting)
{
if (fmt[i] == ASE_T('-'))
{
}
if (fmt[i] == ASE_T('c'))
else if (fmt[i] == ASE_T('d') || fmt[i] == ASE_T('i'))
else if (fmt[i] == ASE_T('e'))
else if (fmt[i] == ASE_T('f'))
else if (fmt[i] == ASE_T('g'))
else if (fmt[i] == ASE_T('o'))
else if (fmt[i] == ASE_T('s'))
else if (fmt[i] == ASE_T('x'))
else if (fmt[i] == ASE_T('X'))
else /*if (fmt[i] == ASE_T('%'))*/
{
}
formatting = ase_false;
}
else
{
if (fmt[i] == ASE_T('%')) formatting = ase_true;
else
{
/* TODO: do buffering and call these... */
ase_awk_writeextio_str (
run, out_type, dst, &fmt[i], 1);
}
}
}
#endif
const ase_char_t* end = fmt + fmt_len;
const ase_char_t* s;
int modifier;
ase_char_t ch;
while (fmt < end)
{
while (*fmt != ASE_CHAR('\0') && *fmt != ASE_CHAR('%'))
{
ADDC (str, *fmt++);
}
if (fmt < end) break;
ASE_AWK_ASSERTX (run->awk, *fmt == ASE_CHAR('%'),
"the current character must be % as all characters "
"except % have been skippe.d");
s = fmt++; /* remember the position of % */
/* flags */
while (fmt < end)
{
ch = *fmt;
if (ch != ASE_CHAR(' ') &&
ch != ASE_CHAR('+') &&
ch != ASE_CHAR('-') &&
ch != ASE_CHAR('#') &&
ch != ASE_CHAR('0')) break;
fmt++;
}
/* flags */
while (1)
{
if (ch == ASE_CHAR(' ') || ch == ASE_CHAR('+') ||
ch == ASE_CHAR('-') || ch == ASE_CHAR('#'))
{
ADDC (str, ch);
ch = *fmt++;
}
else
{
if (ch == ASE_CHAR('0'))
{
ADDC (str, ch);
ch = *fmt++;
}
break;
}
}
/* check the width */
if (ch == ASE_CHAR('*'))
{
ADDC (str, ch);
ch = *fmt++;
}
else
{
while (ASE_AWK_ISDIGIT (run->awk, ch))
{
ADDC (str, ch);
ch = *fmt++;
}
}
/* precision */
if (ch == ASE_CHAR('.'))
{
ADDC (str, ch);
ch = *fmt++;
if (ch == ASE_CHAR('*'))
{
ADDC (str, ch);
ch = *fmt++;
}
else
{
while (ASE_AWK_ISDIGIT (run->awk, ch))
{
ADDC (str, ch);
ch = *fmt++;
}
}
}
/* modifier */
for (modifier = 0;;)
{
if (ch == ASE_CHAR('h')) modifier = MOD_SHORT;
else if (ch == ASE_CHAR('l'))
{
modifier = (modifier == MOD_LONG)? MOD_LONGLONG: MOD_LONG;
}
else break;
ch = *fmt++;
}
/* type */
if (ch == ASE_CHAR('%')) ADDC (str, ch);
else if (ch == ASE_CHAR('c') || ch == ASE_CHAR('s'))
{
#if !defined(ASE_CHAR_IS_MCHAR) && !defined(_WIN32)
ADDC (str, 'l');
#endif
ADDC (str, ch);
}
else if (ch == ASE_CHAR('C') || ch == ASE_CHAR('S'))
{
#ifdef _WIN32
ADDC (str, ch);
#else
#ifdef ASE_CHAR_IS_MCHAR
ADDC (str, 'l');
#endif
ADDC (str, ase_ttolower(ch));
#endif
}
else if (ch == ASE_CHAR('d') || ch == ASE_CHAR('i') ||
ch == ASE_CHAR('o') || ch == ASE_CHAR('u') ||
ch == ASE_CHAR('x') || ch == ASE_CHAR('X'))
{
if (modifier == MOD_SHORT)
{
ADDC (str, 'h');
}
else if (modifier == MOD_LONG)
{
ADDC (str, 'l');
}
else if (modifier == MOD_LONGLONG)
{
#if defined(_WIN32) && !defined(__LCC__)
ADDC (str, 'I');
ADDC (str, '6');
ADDC (str, '4');
#else
ADDC (str, 'l');
ADDC (str, 'l');
#endif
}
ADDC (str, ch);
}
else if (ch == ASE_CHAR('\0')) break;
else ADDC (str, ch);
}
return 0;
}
static ase_awk_val_t* __eval_expression (ase_awk_run_t* run, ase_awk_nde_t* nde) static ase_awk_val_t* __eval_expression (ase_awk_run_t* run, ase_awk_nde_t* nde)
{ {
ase_awk_val_t* v; ase_awk_val_t* v;
@ -2800,7 +2995,7 @@ static ase_awk_val_t* __do_assignment_map (
if (str == ASE_NULL) return ASE_NULL; if (str == ASE_NULL) return ASE_NULL;
/* /*
xp_printf (ASE_T("**** index str=>%s, map->ref=%d, map->type=%d\n"), str, (int)map->ref, (int)map->type); ase_tprintf (ASE_T("**** index str=>%s, map->ref=%d, map->type=%d\n"), str, (int)map->ref, (int)map->type);
*/ */
n = ase_awk_map_putx (map->map, str, len, val, ASE_NULL); n = ase_awk_map_putx (map->map, str, len, val, ASE_NULL);
if (n < 0) if (n < 0)
@ -2891,10 +3086,10 @@ static ase_awk_val_t* __eval_binary (ase_awk_run_t* run, ase_awk_nde_t* nde)
ASE_NULL /* __eval_binop_nm */ ASE_NULL /* __eval_binop_nm */
}; };
ase_awk_nde_exp_t* exp = (ase_awk_nde_exp_t*)nde; ase_awk_nde_ease_tt* exp = (ase_awk_nde_ease_tt*)nde;
ase_awk_val_t* left, * right, * res; ase_awk_val_t* left, * right, * res;
ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EXP_BIN); ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EASE_BIN);
if (exp->opcode == ASE_AWK_BINOP_LAND) if (exp->opcode == ASE_AWK_BINOP_LAND)
{ {
@ -3970,9 +4165,9 @@ static ase_awk_val_t* __eval_binop_match0 (
static ase_awk_val_t* __eval_unary (ase_awk_run_t* run, ase_awk_nde_t* nde) static ase_awk_val_t* __eval_unary (ase_awk_run_t* run, ase_awk_nde_t* nde)
{ {
ase_awk_val_t* left, * res = ASE_NULL; ase_awk_val_t* left, * res = ASE_NULL;
ase_awk_nde_exp_t* exp = (ase_awk_nde_exp_t*)nde; ase_awk_nde_ease_tt* exp = (ase_awk_nde_ease_tt*)nde;
ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EXP_UNR); ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EASE_UNR);
ASE_AWK_ASSERT (run->awk, exp->left != ASE_NULL && exp->right == ASE_NULL); ASE_AWK_ASSERT (run->awk, exp->left != ASE_NULL && exp->right == ASE_NULL);
ASE_AWK_ASSERT (run->awk, exp->left->next == ASE_NULL); ASE_AWK_ASSERT (run->awk, exp->left->next == ASE_NULL);
@ -4062,9 +4257,9 @@ static ase_awk_val_t* __eval_unary (ase_awk_run_t* run, ase_awk_nde_t* nde)
static ase_awk_val_t* __eval_incpre (ase_awk_run_t* run, ase_awk_nde_t* nde) static ase_awk_val_t* __eval_incpre (ase_awk_run_t* run, ase_awk_nde_t* nde)
{ {
ase_awk_val_t* left, * res; ase_awk_val_t* left, * res;
ase_awk_nde_exp_t* exp = (ase_awk_nde_exp_t*)nde; ase_awk_nde_ease_tt* exp = (ase_awk_nde_ease_tt*)nde;
ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EXP_INCPRE); ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EASE_INCPRE);
ASE_AWK_ASSERT (run->awk, exp->left != ASE_NULL && exp->right == ASE_NULL); ASE_AWK_ASSERT (run->awk, exp->left != ASE_NULL && exp->right == ASE_NULL);
/* this way of checking if the l-value is assignable is /* this way of checking if the l-value is assignable is
@ -4206,9 +4401,9 @@ static ase_awk_val_t* __eval_incpre (ase_awk_run_t* run, ase_awk_nde_t* nde)
static ase_awk_val_t* __eval_incpst (ase_awk_run_t* run, ase_awk_nde_t* nde) static ase_awk_val_t* __eval_incpst (ase_awk_run_t* run, ase_awk_nde_t* nde)
{ {
ase_awk_val_t* left, * res, * res2; ase_awk_val_t* left, * res, * res2;
ase_awk_nde_exp_t* exp = (ase_awk_nde_exp_t*)nde; ase_awk_nde_ease_tt* exp = (ase_awk_nde_ease_tt*)nde;
ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EXP_INCPST); ASE_AWK_ASSERT (run->awk, exp->type == ASE_AWK_NDE_EASE_INCPST);
ASE_AWK_ASSERT (run->awk, exp->left != ASE_NULL && exp->right == ASE_NULL); ASE_AWK_ASSERT (run->awk, exp->left != ASE_NULL && exp->right == ASE_NULL);
/* this way of checking if the l-value is assignable is /* this way of checking if the l-value is assignable is
@ -4554,7 +4749,7 @@ static ase_awk_val_t* __eval_call (
saved_stack_top = run->stack_top; saved_stack_top = run->stack_top;
/*xp_printf (ASE_T("setting up function stack frame stack_top = %ld stack_base = %ld\n"), run->stack_top, run->stack_base); */ /*ase_tprintf (ASE_T("setting up function stack frame stack_top = %ld stack_base = %ld\n"), run->stack_top, run->stack_base); */
if (__raw_push(run,(void*)run->stack_base) == -1) if (__raw_push(run,(void*)run->stack_base) == -1)
{ {
PANIC (run, ASE_AWK_ENOMEM); PANIC (run, ASE_AWK_ENOMEM);
@ -4702,7 +4897,7 @@ static ase_awk_val_t* __eval_call (
run->stack_base = saved_stack_top; run->stack_base = saved_stack_top;
STACK_NARGS(run) = (void*)nargs; STACK_NARGS(run) = (void*)nargs;
/*xp_printf (ASE_T("running function body\n")); */ /*ase_tprintf (ASE_T("running function body\n")); */
if (afn != ASE_NULL) if (afn != ASE_NULL)
{ {
@ -4722,16 +4917,16 @@ static ase_awk_val_t* __eval_call (
n = call->what.bfn.handler (run); n = call->what.bfn.handler (run);
} }
/*xp_printf (ASE_T("block run complete\n")); */ /*ase_tprintf (ASE_T("block run complete\n")); */
/* refdown args in the run.stack */ /* refdown args in the run.stack */
nargs = (ase_size_t)STACK_NARGS(run); nargs = (ase_size_t)STACK_NARGS(run);
/*xp_printf (ASE_T("block run complete nargs = %d\n"), (int)nargs); */ /*ase_tprintf (ASE_T("block run complete nargs = %d\n"), (int)nargs); */
for (i = 0; i < nargs; i++) for (i = 0; i < nargs; i++)
{ {
ase_awk_refdownval (run, STACK_ARG(run,i)); ase_awk_refdownval (run, STACK_ARG(run,i));
} }
/*xp_printf (ASE_T("got return value\n")); */ /*ase_tprintf (ASE_T("got return value\n")); */
/* this trick has been mentioned in __run_return. /* this trick has been mentioned in __run_return.
* adjust the reference count of the return value. * adjust the reference count of the return value.
@ -4746,7 +4941,7 @@ static ase_awk_val_t* __eval_call (
if (run->exit_level == EXIT_FUNCTION) run->exit_level = EXIT_NONE; if (run->exit_level == EXIT_FUNCTION) run->exit_level = EXIT_NONE;
/*xp_printf (ASE_T("returning from function stack_top=%ld, stack_base=%ld\n"), run->stack_top, run->stack_base); */ /*ase_tprintf (ASE_T("returning from function stack_top=%ld, stack_base=%ld\n"), run->stack_top, run->stack_base); */
return (n == -1)? ASE_NULL: v; return (n == -1)? ASE_NULL: v;
} }
@ -5299,7 +5494,7 @@ static int __read_record (ase_awk_run_t* run)
return -1; return -1;
} }
/* /*
xp_printf (ASE_T("len = %d str=[%s]\n"), ase_tprintf (ASE_T("len = %d str=[%s]\n"),
(int)ASE_AWK_STR_LEN(&run->inrec.line), (int)ASE_AWK_STR_LEN(&run->inrec.line),
ASE_AWK_STR_BUF(&run->inrec.line)); ASE_AWK_STR_BUF(&run->inrec.line));
*/ */