pike.git/
src/
opcodes.c
Branch:
Tag:
Non-build tags
All tags
No tags
2003-08-13
2003-08-13 15:45:53 by Henrik Grubbström (Grubba) <grubba@grubba.org>
136bad720fb6ed09db1630ae0ff704df18825b61 (
82
lines) (+
49
/-
33
)
[
Show
|
Annotate
]
Branch:
7.9
Improved error diagnostics for indexing of integers.
Rev: src/opcodes.c:1.150
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.
149
2003/08/
05
12
:
58
:
42
mast
Exp $
+
|| $Id: opcodes.c,v 1.
150
2003/08/
13
15
:
45
:
53
grubba
Exp $
*/ #include "global.h"
30:
#define sp Pike_sp
-
RCSID("$Id: opcodes.c,v 1.
149
2003/08/
05
12
:
58
:
42
mast
Exp $");
+
RCSID("$Id: opcodes.c,v 1.
150
2003/08/
13
15
:
45
:
53
grubba
Exp $");
void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind) {
42:
switch(what->type) {
-
#ifdef AUTO_BIGNUM
-
case T_INT:
-
{
-
INT_TYPE val = what->u.integer;
-
-
convert_svalue_to_bignum(what);
-
index_no_free(to, what, ind);
-
if(IS_UNDEFINED(to)) {
-
if (val) {
-
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 %s.\n",
-
val, get_name_of_type (ind->type));
-
} else {
-
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 with %s.\n",
-
get_name_of_type (ind->type));
-
}
-
}
-
}
-
break;
-
#endif /* AUTO_BIGNUM */
-
+
case T_ARRAY: simple_array_index_no_free(to,what->u.array,ind); break;
132:
} /* FALL THROUGH */
+
#ifdef AUTO_BIGNUM
+
case T_INT:
+
if (ind->type == T_STRING) {
+
INT_TYPE val = what->u.integer;
+
+
convert_svalue_to_bignum(what);
+
index_no_free(to, what, ind);
+
if(IS_UNDEFINED(to)) {
+
if (val) {
+
if (!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 a wide string.\n",
+
val);
+
} else {
+
if(!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 with a wide string.\n");
+
}
+
}
+
break;
+
}
+
+
/* FALL_THROUGH */
+
#endif /* AUTO_BIGNUM */
+
default: if (ind->type == T_INT) Pike_error ("Cannot index %s with %"PRINTPIKEINT"d.\n",
-
get_name_of_type
(what->type), ind->u.integer);
+
(what->type == T_INT && !what->u.integer)?
+
"the NULL value":
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);
+
(what->type == T_INT && !what->u.integer)?
+
"the NULL value":
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),
+
Pike_error ("Cannot index %s with \"%s\".\n",
+
(what->type == T_INT && !what->u.integer)?
+
"the NULL value":
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),
+
Pike_error ("Cannot index %s with %s.\n",
+
(what->type == T_INT && !what->u.integer)?
+
"the NULL value":
get_name_of_type(what->type),
get_name_of_type (ind->type)); } }
2125:
ptrdiff_t matched_chars; int x; INT32 i;
+
+
check_c_stack(sizeof(struct sscanf_set)*2 + 512);
+
switch(data->size_shift*3 + format->size_shift) { /* input_shift : match_shift */ case 0: