*** empty log message ***

This commit is contained in:
hyung-hwan 2006-12-30 08:54:43 +00:00
parent 2ba73c0ae6
commit 36fd3d2383
7 changed files with 160 additions and 65 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.174 2006-12-25 13:45:43 bacon Exp $ * $Id: awk.h,v 1.175 2006-12-30 08:54:43 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWK_H_ #ifndef _ASE_AWK_AWK_H_
@ -247,15 +247,15 @@ enum
ASE_AWK_ESOUTCL, ASE_AWK_ESOUTCL,
ASE_AWK_ESOUTWR, ASE_AWK_ESOUTWR,
ASE_AWK_ECONINOPEN, ASE_AWK_ECINOP,
ASE_AWK_ECONINCLOSE, ASE_AWK_ECINCL,
ASE_AWK_ECONINNEXT, ASE_AWK_ECINNX,
ASE_AWK_ECONINDATA, ASE_AWK_ECINDT,
ASE_AWK_ECONOUTOPEN, ASE_AWK_ECOUTOP,
ASE_AWK_ECONOUTCLOSE, ASE_AWK_ECOUTCL,
ASE_AWK_ECONOUTNEXT, ASE_AWK_ECOUTNX,
ASE_AWK_ECONOUTDATA, ASE_AWK_ECOUTDT,
ASE_AWK_ELXCHR, /* lexer came accross an wrong character */ ASE_AWK_ELXCHR, /* lexer came accross an wrong character */
ASE_AWK_ELXUNG, /* lexer failed to unget a character */ ASE_AWK_ELXUNG, /* lexer failed to unget a character */
@ -302,17 +302,18 @@ enum
ASE_AWK_EPRINTFARG, /* printf must have one or more arguments */ ASE_AWK_EPRINTFARG, /* printf must have one or more arguments */
/* run time error */ /* run time error */
ASE_AWK_EINTERNAL, /* internal error */ ASE_AWK_EINTERN, /* internal error */
ASE_AWK_EDIVBYZERO, /* divide by zero */ ASE_AWK_EDIVBYZERO, /* divide by zero */
ASE_AWK_EOPERAND, /* invalid operand */ ASE_AWK_EOPERAND, /* invalid operand */
ASE_AWK_EPOSIDX, /* wrong position index */ ASE_AWK_EPOSIDX, /* wrong position index */
ASE_AWK_EARGTF, /* too few arguments */ ASE_AWK_EARGTF, /* too few arguments */
ASE_AWK_EARGTM, /* too many arguments */ ASE_AWK_EARGTM, /* too many arguments */
ASE_AWK_ENOSUCHFN, /* no such function */ ASE_AWK_ENOSUCHFN, /* no such function */
ASE_AWK_ENOASS, /* value not assignable */ ASE_AWK_ENOTIDX, /* variable not indexable */
ASE_AWK_ENOIDX, /* variable not indexable */ ASE_AWK_ENOTDEL, /* variable not deletable */
ASE_AWK_ENODEL, /* variable not deletable */ ASE_AWK_ENOTMAP, /* value not a map */
ASE_AWK_ENOTREFERENCEABLE, /* not referenceable value */ ASE_AWK_ENOTREF, /* value not referenceable */
ASE_AWK_ENOTASS, /* value not assignable */
ASE_AWK_EIDXVALASSMAP, /* indexed value cannot be assigned a map */ ASE_AWK_EIDXVALASSMAP, /* indexed value cannot be assigned a map */
ASE_AWK_EPOSVALASSMAP, /* a positional cannot be assigned a map */ ASE_AWK_EPOSVALASSMAP, /* a positional cannot be assigned a map */
ASE_AWK_EMAPTOSCALAR, /* cannot change a map to a scalar value */ ASE_AWK_EMAPTOSCALAR, /* cannot change a map to a scalar value */

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk_i.h,v 1.95 2006-12-25 12:01:01 bacon Exp $ * $Id: awk_i.h,v 1.96 2006-12-30 08:54:43 bacon Exp $
*/ */
#ifndef _ASE_AWK_AWKI_H_ #ifndef _ASE_AWK_AWKI_H_
@ -333,6 +333,8 @@ struct ase_awk_run_t
} max; } max;
} depth; } depth;
ase_size_t runlin; /* line no. of the node being executed currently */
int errnum; int errnum;
ase_size_t errlin; ase_size_t errlin;
ase_char_t errmsg[256]; ase_char_t errmsg[256];

View File

@ -1,5 +1,5 @@
/* /*
* $Id: err.c,v 1.66 2006-12-25 13:45:43 bacon Exp $ * $Id: err.c,v 1.67 2006-12-30 08:54:43 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -143,10 +143,11 @@ const ase_char_t* ase_awk_geterrstr (int errnum)
ASE_T("too few arguments"), ASE_T("too few arguments"),
ASE_T("too many arguments"), ASE_T("too many arguments"),
ASE_T("no such function"), ASE_T("no such function"),
ASE_T("value not assignable"),
ASE_T("variable not indexable"), ASE_T("variable not indexable"),
ASE_T("variable not deletable"), ASE_T("variable not deletable"),
ASE_T("value not a map"),
ASE_T("value not referenceable"), ASE_T("value not referenceable"),
ASE_T("value not assignable"),
ASE_T("an indexed value cannot be assigned a map"), ASE_T("an indexed value cannot be assigned a map"),
ASE_T("a positional value cannot be assigned a map"), ASE_T("a positional value cannot be assigned a map"),
ASE_T("cannot change a map to a scalar value"), ASE_T("cannot change a map to a scalar value"),

View File

@ -1,5 +1,5 @@
/* /*
* $Id: extio.c,v 1.67 2006-12-17 14:56:06 bacon Exp $ * $Id: extio.c,v 1.68 2006-12-30 08:54:43 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -615,7 +615,7 @@ int ase_awk_nextextio_read (
/* something is totally wrong */ /* something is totally wrong */
ASE_AWK_ASSERT (run->awk, ASE_AWK_ASSERT (run->awk,
!"should never happen - cannot find the relevant extio entry"); !"should never happen - cannot find the relevant extio entry");
run->errnum = ASE_AWK_EINTERNAL; run->errnum = ASE_AWK_EINTERN;
return -1; return -1;
} }
@ -694,7 +694,7 @@ int ase_awk_nextextio_write (
ASE_AWK_ASSERT (run->awk, ASE_AWK_ASSERT (run->awk,
!"should never happen - cannot find the relevant extio entry"); !"should never happen - cannot find the relevant extio entry");
run->errnum = ASE_AWK_EINTERNAL; run->errnum = ASE_AWK_EINTERN;
return -1; return -1;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: map.c,v 1.33 2006-12-11 08:44:52 bacon Exp $ * $Id: map.c,v 1.34 2006-12-30 08:54:43 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -21,6 +21,10 @@ ase_awk_map_t* ase_awk_map_open (
ase_awk_map_t* map, void* owner, ase_size_t capa, ase_awk_map_t* map, void* owner, ase_size_t capa,
void(*freeval)(void*,void*), ase_awk_t* awk) void(*freeval)(void*,void*), ase_awk_t* awk)
{ {
ASE_AWK_ASSERTX (awk, capa > 0,
"the capacity of a map should be greater than 0");
if (map == ASE_NULL) if (map == ASE_NULL)
{ {
map = (ase_awk_map_t*) ASE_AWK_MALLOC ( map = (ase_awk_map_t*) ASE_AWK_MALLOC (

View File

@ -1,5 +1,5 @@
/* /*
* $Id: parse.c,v 1.233 2006-12-26 13:26:24 bacon Exp $ * $Id: parse.c,v 1.234 2006-12-30 08:54:01 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -2009,7 +2009,7 @@ static ase_awk_nde_t* __parse_in (ase_awk_t* awk, ase_size_t line)
ase_awk_seterror ( ase_awk_seterror (
awk, ASE_AWK_ENOTVAR, line2, awk, ASE_AWK_ENOTVAR, line2,
ASE_T("right-hand side of the 'in' operator not a normal variable")); ASE_T("right-hand side of the 'in' operator not a variable"));
return ASE_NULL; return ASE_NULL;
} }

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.311 2006-12-26 13:27:02 bacon Exp $ * $Id: run.c,v 1.312 2006-12-30 08:54:22 bacon Exp $
*/ */
#include <ase/awk/awk_i.h> #include <ase/awk/awk_i.h>
@ -50,6 +50,10 @@ enum exit_level_t
(idx) < ASE_TYPE_MAX(ase_long_t) && \ (idx) < ASE_TYPE_MAX(ase_long_t) && \
(idx) < ASE_TYPE_MAX(ase_size_t)) (idx) < ASE_TYPE_MAX(ase_size_t))
static int __set_global (
ase_awk_run_t* run, ase_size_t idx,
ase_awk_nde_var_t* var, ase_awk_val_t* val);
static void __add_run (ase_awk_t* awk, ase_awk_run_t* run); static void __add_run (ase_awk_t* awk, ase_awk_run_t* run);
static void __del_run (ase_awk_t* awk, ase_awk_run_t* run); static void __del_run (ase_awk_t* awk, ase_awk_run_t* run);
@ -236,21 +240,46 @@ ase_awk_val_t* ase_awk_getglobal (ase_awk_run_t* run, ase_size_t idx)
int ase_awk_setglobal (ase_awk_run_t* run, ase_size_t idx, ase_awk_val_t* val) int ase_awk_setglobal (ase_awk_run_t* run, ase_size_t idx, ase_awk_val_t* val)
{ {
ase_awk_val_t* old = STACK_GLOBAL (run, idx); return __set_global (run, idx, ASE_NULL, val);
}
static int __set_global (
ase_awk_run_t* run, ase_size_t idx,
ase_awk_nde_var_t* var, ase_awk_val_t* val)
{
ase_awk_val_t* old;
old = STACK_GLOBAL (run, idx);
if (old->type == ASE_AWK_VAL_MAP) if (old->type == ASE_AWK_VAL_MAP)
{ {
/* once a variable becomes an array, /* once a variable becomes an array,
* it cannot be changed to a scalar variable */ * it cannot be changed to a scalar variable */
PANIC_I (run, ASE_AWK_EMAPTOSCALAR);
if (var != ASE_NULL)
{
run->awk->sysfns.sprintf (
run->errmsg, ASE_COUNTOF(run->errmsg),
ASE_T("array '%.*s' not assignable with a scalar"),
var->id.name_len, var->id.name);
ase_awk_setrunerror (
run, ASE_AWK_EMAPTOSCALAR, var->line, run->errmsg);
}
else
{
ase_awk_setrunerror (run, ASE_AWK_EMAPTOSCALAR, 0,
ASE_T("array not assignable with a scalar"));
}
return -1;
} }
/* TODO: is this correct?? */ /* builtin variables except ARGV cannot be assigned an array */
if (val->type == ASE_AWK_VAL_MAP && if (val->type == ASE_AWK_VAL_MAP &&
(idx >= ASE_AWK_GLOBAL_ARGC && idx <= ASE_AWK_GLOBAL_SUBSEP) && (idx >= ASE_AWK_GLOBAL_ARGC && idx <= ASE_AWK_GLOBAL_SUBSEP) &&
idx != ASE_AWK_GLOBAL_ARGV) idx != ASE_AWK_GLOBAL_ARGV)
{ {
/* TODO: better error code */ /* TODO: better error code */
PANIC_I (run, ASE_AWK_ESCALARTOMAP); run->errnum = ASE_AWK_ESCALARTOMAP;
return -1;
} }
if (idx == ASE_AWK_GLOBAL_CONVFMT) if (idx == ASE_AWK_GLOBAL_CONVFMT)
@ -1544,7 +1573,7 @@ static int __run_pattern_blocks (ase_awk_run_t* run)
if (n == -1) if (n == -1)
{ {
if (run->errnum == ASE_AWK_EIOHANDLER) if (run->errnum == ASE_AWK_EIOHANDLER)
PANIC_I (run, ASE_AWK_ECONINCLOSE); PANIC_I (run, ASE_AWK_ECINCL);
else return -1; else return -1;
} }
*/ */
@ -1709,7 +1738,7 @@ static int __run_block0 (ase_awk_run_t* run, ase_awk_nde_blk_t* nde)
ase_awk_refdownval (run, run->inrec.d0); ase_awk_refdownval (run, run->inrec.d0);
if (run->errnum == ASE_AWK_EIOHANDLER) if (run->errnum == ASE_AWK_EIOHANDLER)
PANIC_I (run, ASE_AWK_ECONOUTDATA); PANIC_I (run, ASE_AWK_ECOUTDT);
else return -1; else return -1;
} }
@ -1721,7 +1750,7 @@ static int __run_block0 (ase_awk_run_t* run, ase_awk_nde_blk_t* nde)
ase_awk_refdownval (run, run->inrec.d0); ase_awk_refdownval (run, run->inrec.d0);
if (run->errnum == ASE_AWK_EIOHANDLER) if (run->errnum == ASE_AWK_EIOHANDLER)
PANIC_I (run, ASE_AWK_ECONOUTDATA); PANIC_I (run, ASE_AWK_ECOUTDT);
else return -1; else return -1;
} }
@ -2101,7 +2130,12 @@ static int __walk_foreach (ase_awk_pair_t* pair, void* arg)
str = (ase_awk_val_t*) ase_awk_makestrval ( str = (ase_awk_val_t*) ase_awk_makestrval (
w->run, pair->key, ase_awk_strlen(pair->key)); w->run, pair->key, ase_awk_strlen(pair->key));
if (str == ASE_NULL) PANIC_I (w->run, ASE_AWK_ENOMEM); if (str == ASE_NULL)
{
ase_awk_setrunerror (
w->run, ASE_AWK_ENOMEM, w->var->line, ASE_NULL);
return -1;
}
ase_awk_refupval (w->run, str); ase_awk_refupval (w->run, str);
if (__do_assignment (w->run, w->var, str) == ASE_NULL) if (__do_assignment (w->run, w->var, str) == ASE_NULL)
@ -2129,7 +2163,8 @@ static int __run_foreach (ase_awk_run_t* run, ase_awk_nde_foreach_t* nde)
struct __foreach_walker_t walker; struct __foreach_walker_t walker;
test = (ase_awk_nde_exp_t*)nde->test; test = (ase_awk_nde_exp_t*)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);
/* chained expressions should not be allowed /* chained expressions should not be allowed
@ -2143,7 +2178,11 @@ static int __run_foreach (ase_awk_run_t* run, ase_awk_nde_foreach_t* nde)
if (rv->type != ASE_AWK_VAL_MAP) if (rv->type != ASE_AWK_VAL_MAP)
{ {
ase_awk_refdownval (run, rv); ase_awk_refdownval (run, rv);
PANIC_I (run, ASE_AWK_ENOIDX);
ase_awk_setrunerror (
run, ASE_AWK_ENOTMAP, test->right->line,
ASE_T("right-hand side of the 'in' operator not an array"));
return -1;
} }
map = ((ase_awk_val_map_t*)rv)->map; map = ((ase_awk_val_map_t*)rv)->map;
@ -2263,7 +2302,7 @@ static int __run_nextinfile (ase_awk_run_t* run, ase_awk_nde_nextfile_t* nde)
if (n == -1) if (n == -1)
{ {
if (run->errnum == ASE_AWK_EIOHANDLER) if (run->errnum == ASE_AWK_EIOHANDLER)
run->errnum = ASE_AWK_ECONINNEXT; run->errnum = ASE_AWK_ECINNX;
ase_awk_setrunerror ( ase_awk_setrunerror (
run, run->errnum, nde->line, ASE_NULL); run, run->errnum, nde->line, ASE_NULL);
return -1; return -1;
@ -2296,7 +2335,7 @@ static int __run_nextoutfile (ase_awk_run_t* run, ase_awk_nde_nextfile_t* nde)
if (n == -1) if (n == -1)
{ {
if (run->errnum == ASE_AWK_EIOHANDLER) if (run->errnum == ASE_AWK_EIOHANDLER)
run->errnum = ASE_AWK_ECONOUTNEXT; run->errnum = ASE_AWK_ECOUTNX;
ase_awk_setrunerror ( ase_awk_setrunerror (
run, run->errnum, nde->line, ASE_NULL); run, run->errnum, nde->line, ASE_NULL);
return -1; return -1;
@ -2383,7 +2422,7 @@ static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
ASE_T("'%.*s' not deletable"), ASE_T("'%.*s' not deletable"),
var->id.name_len, var->id.name); var->id.name_len, var->id.name);
ase_awk_setrunerror ( ase_awk_setrunerror (
run, ASE_AWK_ENODEL, var->line, run, ASE_AWK_ENOTDEL, var->line,
run->errmsg); run->errmsg);
return -1; return -1;
} }
@ -2499,7 +2538,7 @@ static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
ASE_T("'%.*s' not deletable"), ASE_T("'%.*s' not deletable"),
var->id.name_len, var->id.name); var->id.name_len, var->id.name);
ase_awk_setrunerror ( ase_awk_setrunerror (
run, ASE_AWK_ENODEL, var->line, run, ASE_AWK_ENOTDEL, var->line,
run->errmsg); run->errmsg);
return -1; return -1;
} }
@ -2551,7 +2590,7 @@ static int __run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
!"should never happen - wrong target for delete", !"should never happen - wrong target for delete",
"the delete statement cannot be called with other nodes than the variables such as a named variable, a named indexed variable, etc"); "the delete statement cannot be called with other nodes than the variables such as a named variable, a named indexed variable, etc");
ase_awk_setrunerror ( ase_awk_setrunerror (
run, ASE_AWK_EINTERNAL, var->line, run, ASE_AWK_EINTERN, var->line,
ASE_T("delete statement called with a wrong target")); ASE_T("delete statement called with a wrong target"));
return -1; return -1;
} }
@ -2953,7 +2992,7 @@ static ase_awk_val_t* __eval_group (ase_awk_run_t* run, ase_awk_nde_t* nde)
/* __eval_binop_in evaluates the ASE_AWK_NDE_GRP specially. /* __eval_binop_in evaluates the ASE_AWK_NDE_GRP specially.
* so this function should never be reached. */ * so this function should never be reached. */
ASE_AWK_ASSERT (run->awk, !"should never happen - NDE_GRP only for in"); ASE_AWK_ASSERT (run->awk, !"should never happen - NDE_GRP only for in");
ase_awk_setrunerror (run, ASE_AWK_EINTERNAL, nde->line, ASE_NULL); ase_awk_setrunerror (run, ASE_AWK_EINTERN, nde->line, ASE_NULL);
return ASE_NULL; return ASE_NULL;
} }
@ -3029,7 +3068,9 @@ static ase_awk_val_t* __do_assignment (
if (val->type == ASE_AWK_VAL_MAP) if (val->type == ASE_AWK_VAL_MAP)
{ {
/* a map cannot be assigned to a variable */ /* a map cannot be assigned to a variable */
PANIC (run, ASE_AWK_ENOASS); ase_awk_setrunerror (
run, ASE_AWK_ENOTASS, var->line, ASE_NULL);
return ASE_NULL;
} }
if (var->type == ASE_AWK_NDE_NAMED || if (var->type == ASE_AWK_NDE_NAMED ||
@ -3052,8 +3093,11 @@ static ase_awk_val_t* __do_assignment (
} }
else else
{ {
ASE_AWK_ASSERT (run->awk, !"should never happen - invalid variable type"); ASE_AWK_ASSERT (run->awk,
PANIC (run, ASE_AWK_EINTERNAL); !"should never happen - invalid variable type");
ase_awk_setrunerror (
run, ASE_AWK_EINTERN, var->line, ASE_NULL);
return ASE_NULL;
} }
return ret; return ret;
@ -3082,19 +3126,32 @@ static ase_awk_val_t* __do_assignment_scalar (
{ {
/* once a variable becomes an array, /* once a variable becomes an array,
* it cannot be changed to a scalar variable */ * it cannot be changed to a scalar variable */
PANIC (run, ASE_AWK_EMAPTOSCALAR); run->awk->sysfns.sprintf (
run->errmsg, ASE_COUNTOF(run->errmsg),
ASE_T("array '%.*s' not assignable with a scalar"),
var->id.name_len, var->id.name);
ase_awk_setrunerror (
run, ASE_AWK_EMAPTOSCALAR, var->line, run->errmsg);
return ASE_NULL;
} }
n = ase_awk_map_putx (&run->named, n = ase_awk_map_putx (&run->named,
var->id.name, var->id.name_len, val, ASE_NULL); var->id.name, var->id.name_len, val, ASE_NULL);
if (n < 0) PANIC (run, ASE_AWK_ENOMEM); if (n < 0)
{
ase_awk_setrunerror (
run, ASE_AWK_ENOMEM, var->line, run->errmsg);
return ASE_NULL;
}
ase_awk_refupval (run, val); ase_awk_refupval (run, val);
} }
else if (var->type == ASE_AWK_NDE_GLOBAL) else if (var->type == ASE_AWK_NDE_GLOBAL)
{ {
if (ase_awk_setglobal ( if (__set_global (run, var->id.idxa, var, val) == -1)
run, var->id.idxa, val) == -1) return ASE_NULL; {
return ASE_NULL;
}
} }
else if (var->type == ASE_AWK_NDE_LOCAL) else if (var->type == ASE_AWK_NDE_LOCAL)
{ {
@ -3103,7 +3160,13 @@ static ase_awk_val_t* __do_assignment_scalar (
{ {
/* once the variable becomes an array, /* once the variable becomes an array,
* it cannot be changed to a scalar variable */ * it cannot be changed to a scalar variable */
PANIC (run, ASE_AWK_EMAPTOSCALAR); run->awk->sysfns.sprintf (
run->errmsg, ASE_COUNTOF(run->errmsg),
ASE_T("array '%.*s' not assignable with a scalar"),
var->id.name_len, var->id.name);
ase_awk_setrunerror (
run, ASE_AWK_EMAPTOSCALAR, var->line, run->errmsg);
return ASE_NULL;
} }
ase_awk_refdownval (run, old); ase_awk_refdownval (run, old);
@ -3117,7 +3180,13 @@ static ase_awk_val_t* __do_assignment_scalar (
{ {
/* once the variable becomes an array, /* once the variable becomes an array,
* it cannot be changed to a scalar variable */ * it cannot be changed to a scalar variable */
PANIC (run, ASE_AWK_EMAPTOSCALAR); run->awk->sysfns.sprintf (
run->errmsg, ASE_COUNTOF(run->errmsg),
ASE_T("array '%.*s' not assignable with a scalar"),
var->id.name_len, var->id.name);
ase_awk_setrunerror (
run, ASE_AWK_EMAPTOSCALAR, var->line, run->errmsg);
return ASE_NULL;
} }
ase_awk_refdownval (run, old); ase_awk_refdownval (run, old);
@ -3167,7 +3236,12 @@ static ase_awk_val_t* __do_assignment_map (
ase_awk_val_t* tmp; ase_awk_val_t* tmp;
tmp = ase_awk_makemapval (run); tmp = ase_awk_makemapval (run);
if (tmp == ASE_NULL) PANIC (run, ASE_AWK_ENOMEM); if (tmp == ASE_NULL)
{
ase_awk_setrunerror (
run, ASE_AWK_ENOMEM, var->line, ASE_NULL);
return ASE_NULL;
}
if (var->type == ASE_AWK_NDE_NAMEDIDX) if (var->type == ASE_AWK_NDE_NAMEDIDX)
{ {
@ -3179,7 +3253,10 @@ static ase_awk_val_t* __do_assignment_map (
{ {
ase_awk_refupval (run, tmp); ase_awk_refupval (run, tmp);
ase_awk_refdownval (run, tmp); ase_awk_refdownval (run, tmp);
PANIC (run, ASE_AWK_ENOMEM);
ase_awk_setrunerror (
run, ASE_AWK_ENOMEM, var->line, ASE_NULL);
return ASE_NULL;
} }
ase_awk_refupval (run, tmp); ase_awk_refupval (run, tmp);
@ -3211,7 +3288,10 @@ static ase_awk_val_t* __do_assignment_map (
} }
else if (map->type != ASE_AWK_VAL_MAP) else if (map->type != ASE_AWK_VAL_MAP)
{ {
PANIC (run, ASE_AWK_ENOIDX); /* variable assigned is not a map */
ase_awk_setrunerror (
run, ASE_AWK_ENOTIDX, var->line, ASE_NULL);
return ASE_NULL;
} }
str = __idxnde_to_str (run, var->idx, &len); str = __idxnde_to_str (run, var->idx, &len);
@ -3474,8 +3554,9 @@ static ase_awk_val_t* __eval_binop_in (
right->type != ASE_AWK_NDE_NAMED) right->type != ASE_AWK_NDE_NAMED)
{ {
/* the compiler should have handled this case */ /* the compiler should have handled this case */
ASE_AWK_ASSERT (run->awk, !"should never happen - in needs a plain variable"); ASE_AWK_ASSERT (run->awk,
PANIC (run, ASE_AWK_EINTERNAL); !"should never happen - in needs a plain variable");
PANIC (run, ASE_AWK_EINTERN);
return ASE_NULL; return ASE_NULL;
} }
@ -4658,9 +4739,10 @@ static ase_awk_val_t* __eval_incpre (ase_awk_run_t* run, ase_awk_nde_t* nde)
} }
else else
{ {
ASE_AWK_ASSERT (run->awk, !"should never happen - invalid opcode"); ASE_AWK_ASSERT (run->awk,
!"should never happen - invalid opcode");
ase_awk_refdownval (run, left); ase_awk_refdownval (run, left);
PANIC (run, ASE_AWK_EINTERNAL); PANIC (run, ASE_AWK_EINTERN);
} }
if (__do_assignment (run, exp->left, res) == ASE_NULL) if (__do_assignment (run, exp->left, res) == ASE_NULL)
@ -4874,9 +4956,10 @@ static ase_awk_val_t* __eval_incpst (ase_awk_run_t* run, ase_awk_nde_t* nde)
} }
else else
{ {
ASE_AWK_ASSERT (run->awk, !"should never happen - invalid opcode"); ASE_AWK_ASSERT (run->awk,
!"should never happen - invalid opcode");
ase_awk_refdownval (run, left); ase_awk_refdownval (run, left);
PANIC (run, ASE_AWK_EINTERNAL); PANIC (run, ASE_AWK_EINTERN);
} }
if (__do_assignment (run, exp->left, res2) == ASE_NULL) if (__do_assignment (run, exp->left, res2) == ASE_NULL)
@ -5331,7 +5414,7 @@ static int __get_reference (
return 0; return 0;
} }
run->errnum = ASE_AWK_ENOTREFERENCEABLE; run->errnum = ASE_AWK_ENOTREF;
return -1; return -1;
} }
@ -5357,7 +5440,7 @@ static ase_awk_val_t** __get_reference_indexed (
} }
else if ((*val)->type != ASE_AWK_VAL_MAP) else if ((*val)->type != ASE_AWK_VAL_MAP)
{ {
PANIC (run, ASE_AWK_ENOIDX); PANIC (run, ASE_AWK_ENOTMAP);
} }
ASE_AWK_ASSERT (run->awk, nde->idx != ASE_NULL); ASE_AWK_ASSERT (run->awk, nde->idx != ASE_NULL);
@ -5479,7 +5562,7 @@ static ase_awk_val_t* __eval_indexed (
} }
else if ((*val)->type != ASE_AWK_VAL_MAP) else if ((*val)->type != ASE_AWK_VAL_MAP)
{ {
PANIC (run, ASE_AWK_ENOIDX); PANIC (run, ASE_AWK_ENOTMAP);
} }
ASE_AWK_ASSERT (run->awk, nde->idx != ASE_NULL); ASE_AWK_ASSERT (run->awk, nde->idx != ASE_NULL);
@ -5744,7 +5827,7 @@ static int __read_record (ase_awk_run_t* run)
ase_awk_clrrec (run, ase_false); ase_awk_clrrec (run, ase_false);
run->errnum = run->errnum =
(errnum == ASE_AWK_EIOHANDLER)? (errnum == ASE_AWK_EIOHANDLER)?
ASE_AWK_ECONINDATA: errnum; ASE_AWK_ECINDT: errnum;
return -1; return -1;
} }
/* /*
@ -5891,7 +5974,9 @@ static ase_char_t* __idxnde_to_str (
if (ase_awk_str_open ( if (ase_awk_str_open (
&idxstr, DEF_BUF_CAPA, run->awk) == ASE_NULL) &idxstr, DEF_BUF_CAPA, run->awk) == ASE_NULL)
{ {
PANIC (run, ASE_AWK_ENOMEM); ase_awk_setrunerror (
run, ASE_AWK_ENOMEM, nde->line, ASE_NULL);
return ASE_NULL;
} }
while (nde != ASE_NULL) while (nde != ASE_NULL)
@ -5912,7 +5997,9 @@ static ase_char_t* __idxnde_to_str (
{ {
ase_awk_refdownval (run, idx); ase_awk_refdownval (run, idx);
ase_awk_str_close (&idxstr); ase_awk_str_close (&idxstr);
PANIC (run, ASE_AWK_ENOMEM); ase_awk_setrunerror (
run, ASE_AWK_ENOMEM, nde->line, ASE_NULL);
return ASE_NULL;
} }
if (ase_awk_valtostr ( if (ase_awk_valtostr (