2003-04-28
2003-04-28 18:08:35 by Martin Stjernholm <mast@lysator.liu.se>
-
e3f1e8db8c9e717fcdc15321193919d71a5c99c5
(51 lines)
(+34/-17)
[
Show
| Annotate
]
Branch: 7.9
Improved some error messages.
Rev: src/array.c:1.145
Rev: src/opcodes.c:1.146
2:
|| This file is part of Pike. For copyright information see COPYRIGHT.
|| Pike is distributed under GPL, LGPL and MPL. See the file COPYING
|| for more information.
- || $Id: opcodes.c,v 1.145 2003/04/28 00:32:43 mast Exp $
+ || $Id: opcodes.c,v 1.146 2003/04/28 18:08:35 mast Exp $
*/
#include "global.h"
30:
#define sp Pike_sp
- RCSID("$Id: opcodes.c,v 1.145 2003/04/28 00:32:43 mast Exp $");
+ RCSID("$Id: opcodes.c,v 1.146 2003/04/28 18:08:35 mast Exp $");
void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind)
{
- INT32 i;
-
+
#ifdef PIKE_SECURITY
if(what->type <= MAX_COMPLEX)
if(!CHECK_DATA_SECURITY(what->u.array, SECURITY_BIT_INDEX))
53: Inside #if defined(AUTO_BIGNUM)
index_no_free(to, what, ind);
if(IS_UNDEFINED(to)) {
if (val) {
- if (ind->type == T_STRING)
+ if (ind->type == T_STRING && !ind->u.string->size_shift)
Pike_error("Indexing the integer %"PRINTPIKEINT"d "
"with unknown method \"%s\".\n", val, ind->u.string->str);
else
- Pike_error("Indexing the integer %"PRINTPIKEINT"d "
- "with an unknown method.\n", val);
+ Pike_error("Indexing the integer %"PRINTPIKEINT"d with %s.\n",
+ val, get_name_of_type (ind->type));
} else {
- if(ind->type == T_STRING)
+ if(ind->type == T_STRING && !ind->u.string->size_shift)
Pike_error("Indexing the NULL value with \"%s\".\n", ind->u.string->str);
else
- Pike_error("Indexing the NULL value.\n");
+ Pike_error("Indexing the NULL value with %s.\n",
+ get_name_of_type (ind->type));
}
}
}
82:
object_index_no_free(to, what->u.object, ind);
break;
- case T_MULTISET:
- i=multiset_member(what->u.multiset, ind);
+ case T_MULTISET: {
+ int i=multiset_member(what->u.multiset, ind);
to->type=T_INT;
to->subtype=i ? NUMBER_UNDEFINED : 0;
to->u.integer=i;
break;
-
+ }
case T_STRING:
if(ind->type==T_INT)
{
- i=ind->u.integer;
+ INT_TYPE i=ind->u.integer;
if(i<0)
i+=what->u.string->len;
if(i<0 || i>=what->u.string->len)
{
if(what->u.string->len == 0)
- Pike_error("Attempt to index the empty string with %d.\n", i);
+ Pike_error("Attempt to index the empty string with %"PRINTPIKEINT"d.\n", i);
else
- Pike_error("Index %d is out of string range 0 - %ld.\n",
- i, PTRDIFF_T_TO_LONG(what->u.string->len - 1));
+ Pike_error("Index %"PRINTPIKEINT"d is out of string range "
+ "0 - %"PRINTPTRDIFFT"d.\n", i, what->u.string->len - 1);
} else
i=index_shared_string(what->u.string,i);
to->type=T_INT;
109:
to->u.integer=i;
break;
}else{
- Pike_error("Index is not an integer.\n");
+ if (ind->type == T_STRING && !ind->u.string->size_shift)
+ Pike_error ("Expected integer as string index, got \"%s\".\n",
+ ind->u.string->str);
+ else
+ Pike_error ("Expected integer as string index, got %s.\n",
+ get_name_of_type (ind->type));
}
case T_PROGRAM:
127:
/* FALL THROUGH */
default:
- Pike_error("Indexing a basic type.\n");
+ if (ind->type == T_INT)
+ Pike_error ("Cannot index %s with %"PRINTPIKEINT"d.\n",
+ get_name_of_type (what->type), ind->u.integer);
+ else if (ind->type == T_FLOAT)
+ Pike_error ("Cannot index %s with %"PRINTPIKEFLOAT"g.\n",
+ get_name_of_type (what->type), ind->u.float_number);
+ else if (ind->type == T_STRING && !ind->u.string->size_shift)
+ Pike_error ("Cannot index %s with \"%s\".\n", get_name_of_type (what->type),
+ ind->u.string->str);
+ else
+ Pike_error ("Cannot index %s with %s.\n", get_name_of_type (what->type),
+ get_name_of_type (ind->type));
}
}