Use gdb:array_view in call_function_by_hand & friends
[deliverable/binutils-gdb.git] / gdb / valarith.c
CommitLineData
c906108c 1/* Perform arithmetic and other operations on values, for GDB.
1bac305b 2
e2882c85 3 Copyright (C) 1986-2018 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
21#include "value.h"
22#include "symtab.h"
23#include "gdbtypes.h"
24#include "expression.h"
25#include "target.h"
26#include "language.h"
70100014 27#include "target-float.h"
04714b91 28#include "infcall.h"
66c02b9e 29#include "common/byte-vector.h"
c906108c
SS
30
31/* Define whether or not the C operator '/' truncates towards zero for
581e13c1 32 differently signed operands (truncation direction is undefined in C). */
c906108c
SS
33
34#ifndef TRUNCATION_TOWARDS_ZERO
35#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
36#endif
37
ca439ad2
JI
38/* Given a pointer, return the size of its target.
39 If the pointer type is void *, then return 1.
40 If the target type is incomplete, then error out.
41 This isn't a general purpose function, but just a
581e13c1 42 helper for value_ptradd. */
ca439ad2
JI
43
44static LONGEST
45find_size_for_pointer_math (struct type *ptr_type)
46{
47 LONGEST sz = -1;
48 struct type *ptr_target;
49
89eef114 50 gdb_assert (TYPE_CODE (ptr_type) == TYPE_CODE_PTR);
ca439ad2
JI
51 ptr_target = check_typedef (TYPE_TARGET_TYPE (ptr_type));
52
3ae385af 53 sz = type_length_units (ptr_target);
ca439ad2
JI
54 if (sz == 0)
55 {
56 if (TYPE_CODE (ptr_type) == TYPE_CODE_VOID)
57 sz = 1;
58 else
59 {
0d5cff50 60 const char *name;
ca439ad2
JI
61
62 name = TYPE_NAME (ptr_target);
ca439ad2 63 if (name == NULL)
8a3fe4f8
AC
64 error (_("Cannot perform pointer math on incomplete types, "
65 "try casting to a known type, or void *."));
ca439ad2 66 else
8a3fe4f8
AC
67 error (_("Cannot perform pointer math on incomplete type \"%s\", "
68 "try casting to a known type, or void *."), name);
ca439ad2
JI
69 }
70 }
71 return sz;
72}
73
89eef114
UW
74/* Given a pointer ARG1 and an integral value ARG2, return the
75 result of C-style pointer arithmetic ARG1 + ARG2. */
76
f23631e4 77struct value *
2497b498 78value_ptradd (struct value *arg1, LONGEST arg2)
c906108c 79{
89eef114 80 struct type *valptrtype;
ca439ad2 81 LONGEST sz;
8cf6f0b1 82 struct value *result;
c906108c 83
994b9211 84 arg1 = coerce_array (arg1);
89eef114
UW
85 valptrtype = check_typedef (value_type (arg1));
86 sz = find_size_for_pointer_math (valptrtype);
c906108c 87
8cf6f0b1
TT
88 result = value_from_pointer (valptrtype,
89 value_as_address (arg1) + sz * arg2);
90 if (VALUE_LVAL (result) != lval_internalvar)
91 set_value_component_location (result, arg1);
92 return result;
c906108c
SS
93}
94
89eef114
UW
95/* Given two compatible pointer values ARG1 and ARG2, return the
96 result of C-style pointer arithmetic ARG1 - ARG2. */
97
98LONGEST
99value_ptrdiff (struct value *arg1, struct value *arg2)
c906108c
SS
100{
101 struct type *type1, *type2;
89eef114
UW
102 LONGEST sz;
103
994b9211
AC
104 arg1 = coerce_array (arg1);
105 arg2 = coerce_array (arg2);
df407dfe
AC
106 type1 = check_typedef (value_type (arg1));
107 type2 = check_typedef (value_type (arg2));
c906108c 108
89eef114
UW
109 gdb_assert (TYPE_CODE (type1) == TYPE_CODE_PTR);
110 gdb_assert (TYPE_CODE (type2) == TYPE_CODE_PTR);
ca439ad2 111
89eef114
UW
112 if (TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1)))
113 != TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type2))))
3e43a32a
MS
114 error (_("First argument of `-' is a pointer and "
115 "second argument is neither\n"
116 "an integer nor a pointer of the same type."));
c906108c 117
3ae385af 118 sz = type_length_units (check_typedef (TYPE_TARGET_TYPE (type1)));
83b10087
CM
119 if (sz == 0)
120 {
121 warning (_("Type size unknown, assuming 1. "
122 "Try casting to a known type, or void *."));
123 sz = 1;
124 }
125
89eef114 126 return (value_as_long (arg1) - value_as_long (arg2)) / sz;
c906108c
SS
127}
128
129/* Return the value of ARRAY[IDX].
afc05acb
UW
130
131 ARRAY may be of type TYPE_CODE_ARRAY or TYPE_CODE_STRING. If the
132 current language supports C-style arrays, it may also be TYPE_CODE_PTR.
afc05acb 133
c906108c
SS
134 See comments in value_coerce_array() for rationale for reason for
135 doing lower bounds adjustment here rather than there.
136 FIXME: Perhaps we should validate that the index is valid and if
581e13c1 137 verbosity is set, warn about invalid indices (but still use them). */
c906108c 138
f23631e4 139struct value *
2497b498 140value_subscript (struct value *array, LONGEST index)
c906108c 141{
c906108c
SS
142 int c_style = current_language->c_style_arrays;
143 struct type *tarray;
144
994b9211 145 array = coerce_ref (array);
df407dfe 146 tarray = check_typedef (value_type (array));
c906108c
SS
147
148 if (TYPE_CODE (tarray) == TYPE_CODE_ARRAY
149 || TYPE_CODE (tarray) == TYPE_CODE_STRING)
150 {
151 struct type *range_type = TYPE_INDEX_TYPE (tarray);
152 LONGEST lowerbound, upperbound;
c906108c 153
a109c7c1 154 get_discrete_bounds (range_type, &lowerbound, &upperbound);
c906108c 155 if (VALUE_LVAL (array) != lval_memory)
2497b498 156 return value_subscripted_rvalue (array, index, lowerbound);
c906108c
SS
157
158 if (c_style == 0)
159 {
c906108c 160 if (index >= lowerbound && index <= upperbound)
2497b498 161 return value_subscripted_rvalue (array, index, lowerbound);
987504bb
JJ
162 /* Emit warning unless we have an array of unknown size.
163 An array of unknown size has lowerbound 0 and upperbound -1. */
164 if (upperbound > -1)
8a3fe4f8 165 warning (_("array or string index out of range"));
c906108c
SS
166 /* fall doing C stuff */
167 c_style = 1;
168 }
169
2497b498 170 index -= lowerbound;
c906108c
SS
171 array = value_coerce_array (array);
172 }
173
c906108c 174 if (c_style)
2497b498 175 return value_ind (value_ptradd (array, index));
c906108c 176 else
8a3fe4f8 177 error (_("not an array or string"));
c906108c
SS
178}
179
180/* Return the value of EXPR[IDX], expr an aggregate rvalue
181 (eg, a vector register). This routine used to promote floats
182 to doubles, but no longer does. */
183
9eec4d1e 184struct value *
2497b498 185value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound)
c906108c 186{
df407dfe 187 struct type *array_type = check_typedef (value_type (array));
c906108c 188 struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
6b850546
DT
189 ULONGEST elt_size = type_length_units (elt_type);
190 ULONGEST elt_offs = elt_size * (index - lowerbound);
c906108c 191
5ff2bbae
AB
192 if (index < lowerbound
193 || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type)
194 && elt_offs >= type_length_units (array_type))
195 || (VALUE_LVAL (array) != lval_memory
196 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type)))
3f2f83dd
KB
197 {
198 if (type_not_associated (array_type))
199 error (_("no such vector element (vector not associated)"));
200 else if (type_not_allocated (array_type))
201 error (_("no such vector element (vector not allocated)"));
202 else
203 error (_("no such vector element"));
204 }
c906108c 205
8f07e298
BH
206 if (is_dynamic_type (elt_type))
207 {
208 CORE_ADDR address;
209
210 address = value_address (array) + elt_offs;
211 elt_type = resolve_dynamic_type (elt_type, NULL, address);
212 }
213
3fff9862 214 return value_from_component (array, elt_type, elt_offs);
c906108c 215}
afc05acb 216
c906108c 217\f
13d6656b
JB
218/* Check to see if either argument is a structure, or a reference to
219 one. This is called so we know whether to go ahead with the normal
220 binop or look for a user defined function instead.
c906108c
SS
221
222 For now, we do not overload the `=' operator. */
223
224int
be636754
PA
225binop_types_user_defined_p (enum exp_opcode op,
226 struct type *type1, struct type *type2)
c906108c 227{
c906108c
SS
228 if (op == BINOP_ASSIGN || op == BINOP_CONCAT)
229 return 0;
13d6656b 230
be636754 231 type1 = check_typedef (type1);
aa006118 232 if (TYPE_IS_REFERENCE (type1))
13d6656b
JB
233 type1 = check_typedef (TYPE_TARGET_TYPE (type1));
234
4e32eda7 235 type2 = check_typedef (type2);
aa006118 236 if (TYPE_IS_REFERENCE (type2))
13d6656b
JB
237 type2 = check_typedef (TYPE_TARGET_TYPE (type2));
238
c906108c 239 return (TYPE_CODE (type1) == TYPE_CODE_STRUCT
13d6656b 240 || TYPE_CODE (type2) == TYPE_CODE_STRUCT);
c906108c
SS
241}
242
be636754
PA
243/* Check to see if either argument is a structure, or a reference to
244 one. This is called so we know whether to go ahead with the normal
245 binop or look for a user defined function instead.
246
247 For now, we do not overload the `=' operator. */
248
249int
250binop_user_defined_p (enum exp_opcode op,
251 struct value *arg1, struct value *arg2)
252{
253 return binop_types_user_defined_p (op, value_type (arg1), value_type (arg2));
254}
255
c906108c
SS
256/* Check to see if argument is a structure. This is called so
257 we know whether to go ahead with the normal unop or look for a
258 user defined function instead.
259
260 For now, we do not overload the `&' operator. */
261
c5aa993b 262int
f23631e4 263unop_user_defined_p (enum exp_opcode op, struct value *arg1)
c906108c
SS
264{
265 struct type *type1;
a109c7c1 266
c906108c
SS
267 if (op == UNOP_ADDR)
268 return 0;
df407dfe 269 type1 = check_typedef (value_type (arg1));
aa006118 270 if (TYPE_IS_REFERENCE (type1))
eeaafae2
JK
271 type1 = check_typedef (TYPE_TARGET_TYPE (type1));
272 return TYPE_CODE (type1) == TYPE_CODE_STRUCT;
c906108c
SS
273}
274
4c3376c8
SW
275/* Try to find an operator named OPERATOR which takes NARGS arguments
276 specified in ARGS. If the operator found is a static member operator
277 *STATIC_MEMFUNP will be set to 1, and otherwise 0.
278 The search if performed through find_overload_match which will handle
279 member operators, non member operators, operators imported implicitly or
280 explicitly, and perform correct overload resolution in all of the above
281 situations or combinations thereof. */
282
283static struct value *
fe978cb0 284value_user_defined_cpp_op (struct value **args, int nargs, char *oper,
e66d4446 285 int *static_memfuncp, enum noside noside)
4c3376c8
SW
286{
287
288 struct symbol *symp = NULL;
289 struct value *valp = NULL;
4c3376c8 290
fe978cb0 291 find_overload_match (args, nargs, oper, BOTH /* could be method */,
28c64fc2 292 &args[0] /* objp */,
4c3376c8 293 NULL /* pass NULL symbol since symbol is unknown */,
e66d4446 294 &valp, &symp, static_memfuncp, 0, noside);
4c3376c8
SW
295
296 if (valp)
297 return valp;
298
299 if (symp)
300 {
301 /* This is a non member function and does not
302 expect a reference as its first argument
303 rather the explicit structure. */
304 args[0] = value_ind (args[0]);
305 return value_of_variable (symp, 0);
306 }
307
fe978cb0 308 error (_("Could not find %s."), oper);
4c3376c8
SW
309}
310
311/* Lookup user defined operator NAME. Return a value representing the
312 function, otherwise return NULL. */
313
314static struct value *
315value_user_defined_op (struct value **argp, struct value **args, char *name,
e66d4446 316 int *static_memfuncp, int nargs, enum noside noside)
4c3376c8
SW
317{
318 struct value *result = NULL;
319
320 if (current_language->la_language == language_cplus)
e66d4446
SC
321 {
322 result = value_user_defined_cpp_op (args, nargs, name, static_memfuncp,
323 noside);
324 }
4c3376c8
SW
325 else
326 result = value_struct_elt (argp, args, name, static_memfuncp,
327 "structure");
328
329 return result;
330}
331
c906108c
SS
332/* We know either arg1 or arg2 is a structure, so try to find the right
333 user defined function. Create an argument vector that calls
334 arg1.operator @ (arg1,arg2) and return that value (where '@' is any
335 binary operator which is legal for GNU C++).
336
337 OP is the operatore, and if it is BINOP_ASSIGN_MODIFY, then OTHEROP
338 is the opcode saying how to modify it. Otherwise, OTHEROP is
339 unused. */
340
f23631e4
AC
341struct value *
342value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op,
fba45db2 343 enum exp_opcode otherop, enum noside noside)
c906108c 344{
f23631e4 345 struct value **argvec;
c906108c
SS
346 char *ptr;
347 char tstr[13];
348 int static_memfuncp;
349
994b9211
AC
350 arg1 = coerce_ref (arg1);
351 arg2 = coerce_ref (arg2);
c906108c
SS
352
353 /* now we know that what we have to do is construct our
354 arg vector and find the right function to call it with. */
355
df407dfe 356 if (TYPE_CODE (check_typedef (value_type (arg1))) != TYPE_CODE_STRUCT)
8a3fe4f8 357 error (_("Can't do that binary op on that type")); /* FIXME be explicit */
c906108c 358
f23631e4 359 argvec = (struct value **) alloca (sizeof (struct value *) * 4);
c906108c
SS
360 argvec[1] = value_addr (arg1);
361 argvec[2] = arg2;
362 argvec[3] = 0;
363
581e13c1 364 /* Make the right function name up. */
c5aa993b
JM
365 strcpy (tstr, "operator__");
366 ptr = tstr + 8;
c906108c
SS
367 switch (op)
368 {
c5aa993b
JM
369 case BINOP_ADD:
370 strcpy (ptr, "+");
371 break;
372 case BINOP_SUB:
373 strcpy (ptr, "-");
374 break;
375 case BINOP_MUL:
376 strcpy (ptr, "*");
377 break;
378 case BINOP_DIV:
379 strcpy (ptr, "/");
380 break;
381 case BINOP_REM:
382 strcpy (ptr, "%");
383 break;
384 case BINOP_LSH:
385 strcpy (ptr, "<<");
386 break;
387 case BINOP_RSH:
388 strcpy (ptr, ">>");
389 break;
390 case BINOP_BITWISE_AND:
391 strcpy (ptr, "&");
392 break;
393 case BINOP_BITWISE_IOR:
394 strcpy (ptr, "|");
395 break;
396 case BINOP_BITWISE_XOR:
397 strcpy (ptr, "^");
398 break;
399 case BINOP_LOGICAL_AND:
400 strcpy (ptr, "&&");
401 break;
402 case BINOP_LOGICAL_OR:
403 strcpy (ptr, "||");
404 break;
405 case BINOP_MIN:
406 strcpy (ptr, "<?");
407 break;
408 case BINOP_MAX:
409 strcpy (ptr, ">?");
410 break;
411 case BINOP_ASSIGN:
412 strcpy (ptr, "=");
413 break;
414 case BINOP_ASSIGN_MODIFY:
c906108c
SS
415 switch (otherop)
416 {
c5aa993b
JM
417 case BINOP_ADD:
418 strcpy (ptr, "+=");
419 break;
420 case BINOP_SUB:
421 strcpy (ptr, "-=");
422 break;
423 case BINOP_MUL:
424 strcpy (ptr, "*=");
425 break;
426 case BINOP_DIV:
427 strcpy (ptr, "/=");
428 break;
429 case BINOP_REM:
430 strcpy (ptr, "%=");
431 break;
432 case BINOP_BITWISE_AND:
433 strcpy (ptr, "&=");
434 break;
435 case BINOP_BITWISE_IOR:
436 strcpy (ptr, "|=");
437 break;
438 case BINOP_BITWISE_XOR:
439 strcpy (ptr, "^=");
440 break;
441 case BINOP_MOD: /* invalid */
c906108c 442 default:
8a3fe4f8 443 error (_("Invalid binary operation specified."));
c906108c
SS
444 }
445 break;
c5aa993b
JM
446 case BINOP_SUBSCRIPT:
447 strcpy (ptr, "[]");
448 break;
449 case BINOP_EQUAL:
450 strcpy (ptr, "==");
451 break;
452 case BINOP_NOTEQUAL:
453 strcpy (ptr, "!=");
454 break;
455 case BINOP_LESS:
456 strcpy (ptr, "<");
457 break;
458 case BINOP_GTR:
459 strcpy (ptr, ">");
460 break;
461 case BINOP_GEQ:
462 strcpy (ptr, ">=");
463 break;
464 case BINOP_LEQ:
465 strcpy (ptr, "<=");
466 break;
467 case BINOP_MOD: /* invalid */
c906108c 468 default:
8a3fe4f8 469 error (_("Invalid binary operation specified."));
c906108c
SS
470 }
471
4c3376c8 472 argvec[0] = value_user_defined_op (&arg1, argvec + 1, tstr,
e66d4446 473 &static_memfuncp, 2, noside);
c5aa993b 474
c906108c
SS
475 if (argvec[0])
476 {
477 if (static_memfuncp)
478 {
479 argvec[1] = argvec[0];
480 argvec++;
481 }
2ce1cdbf
DE
482 if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_XMETHOD)
483 {
484 /* Static xmethods are not supported yet. */
485 gdb_assert (static_memfuncp == 0);
486 if (noside == EVAL_AVOID_SIDE_EFFECTS)
487 {
488 struct type *return_type
489 = result_type_of_xmethod (argvec[0], 2, argvec + 1);
490
491 if (return_type == NULL)
492 error (_("Xmethod is missing return type."));
493 return value_zero (return_type, VALUE_LVAL (arg1));
494 }
495 return call_xmethod (argvec[0], 2, argvec + 1);
496 }
c906108c
SS
497 if (noside == EVAL_AVOID_SIDE_EFFECTS)
498 {
499 struct type *return_type;
a109c7c1 500
c906108c 501 return_type
df407dfe 502 = TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
c906108c
SS
503 return value_zero (return_type, VALUE_LVAL (arg1));
504 }
e71585ff
PA
505 return call_function_by_hand (argvec[0], NULL,
506 {argvec + 1, 2u - static_memfuncp});
c906108c 507 }
79afc5ef
SW
508 throw_error (NOT_FOUND_ERROR,
509 _("member function %s not found"), tstr);
c906108c
SS
510}
511
512/* We know that arg1 is a structure, so try to find a unary user
581e13c1 513 defined operator that matches the operator in question.
c906108c
SS
514 Create an argument vector that calls arg1.operator @ (arg1)
515 and return that value (where '@' is (almost) any unary operator which
516 is legal for GNU C++). */
517
f23631e4
AC
518struct value *
519value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside)
c906108c 520{
50810684 521 struct gdbarch *gdbarch = get_type_arch (value_type (arg1));
f23631e4 522 struct value **argvec;
5799c0b9 523 char *ptr;
c906108c 524 char tstr[13], mangle_tstr[13];
491b8946 525 int static_memfuncp, nargs;
c906108c 526
994b9211 527 arg1 = coerce_ref (arg1);
c906108c
SS
528
529 /* now we know that what we have to do is construct our
530 arg vector and find the right function to call it with. */
531
df407dfe 532 if (TYPE_CODE (check_typedef (value_type (arg1))) != TYPE_CODE_STRUCT)
8a3fe4f8 533 error (_("Can't do that unary op on that type")); /* FIXME be explicit */
c906108c 534
491b8946 535 argvec = (struct value **) alloca (sizeof (struct value *) * 4);
c906108c
SS
536 argvec[1] = value_addr (arg1);
537 argvec[2] = 0;
538
491b8946
DJ
539 nargs = 1;
540
581e13c1 541 /* Make the right function name up. */
c5aa993b
JM
542 strcpy (tstr, "operator__");
543 ptr = tstr + 8;
544 strcpy (mangle_tstr, "__");
c906108c
SS
545 switch (op)
546 {
c5aa993b
JM
547 case UNOP_PREINCREMENT:
548 strcpy (ptr, "++");
549 break;
550 case UNOP_PREDECREMENT:
491b8946 551 strcpy (ptr, "--");
c5aa993b
JM
552 break;
553 case UNOP_POSTINCREMENT:
554 strcpy (ptr, "++");
22601c15 555 argvec[2] = value_from_longest (builtin_type (gdbarch)->builtin_int, 0);
491b8946
DJ
556 argvec[3] = 0;
557 nargs ++;
c5aa993b
JM
558 break;
559 case UNOP_POSTDECREMENT:
491b8946 560 strcpy (ptr, "--");
22601c15 561 argvec[2] = value_from_longest (builtin_type (gdbarch)->builtin_int, 0);
491b8946
DJ
562 argvec[3] = 0;
563 nargs ++;
c5aa993b
JM
564 break;
565 case UNOP_LOGICAL_NOT:
566 strcpy (ptr, "!");
567 break;
568 case UNOP_COMPLEMENT:
569 strcpy (ptr, "~");
570 break;
571 case UNOP_NEG:
572 strcpy (ptr, "-");
573 break;
36e9969c
NS
574 case UNOP_PLUS:
575 strcpy (ptr, "+");
576 break;
c5aa993b
JM
577 case UNOP_IND:
578 strcpy (ptr, "*");
579 break;
79afc5ef
SW
580 case STRUCTOP_PTR:
581 strcpy (ptr, "->");
582 break;
c906108c 583 default:
8a3fe4f8 584 error (_("Invalid unary operation specified."));
c906108c
SS
585 }
586
4c3376c8 587 argvec[0] = value_user_defined_op (&arg1, argvec + 1, tstr,
e66d4446 588 &static_memfuncp, nargs, noside);
c906108c
SS
589
590 if (argvec[0])
591 {
592 if (static_memfuncp)
593 {
594 argvec[1] = argvec[0];
491b8946 595 nargs --;
c906108c
SS
596 argvec++;
597 }
2ce1cdbf
DE
598 if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_XMETHOD)
599 {
600 /* Static xmethods are not supported yet. */
601 gdb_assert (static_memfuncp == 0);
602 if (noside == EVAL_AVOID_SIDE_EFFECTS)
603 {
604 struct type *return_type
605 = result_type_of_xmethod (argvec[0], 1, argvec + 1);
606
607 if (return_type == NULL)
608 error (_("Xmethod is missing return type."));
609 return value_zero (return_type, VALUE_LVAL (arg1));
610 }
611 return call_xmethod (argvec[0], 1, argvec + 1);
612 }
c906108c
SS
613 if (noside == EVAL_AVOID_SIDE_EFFECTS)
614 {
615 struct type *return_type;
a109c7c1 616
c906108c 617 return_type
df407dfe 618 = TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
c906108c
SS
619 return value_zero (return_type, VALUE_LVAL (arg1));
620 }
e71585ff
PA
621 return call_function_by_hand (argvec[0], NULL,
622 gdb::make_array_view (argvec + 1, nargs));
c906108c 623 }
79afc5ef
SW
624 throw_error (NOT_FOUND_ERROR,
625 _("member function %s not found"), tstr);
c906108c 626}
c906108c 627\f
c5aa993b 628
c906108c
SS
629/* Concatenate two values with the following conditions:
630
c5aa993b
JM
631 (1) Both values must be either bitstring values or character string
632 values and the resulting value consists of the concatenation of
633 ARG1 followed by ARG2.
c906108c 634
c5aa993b 635 or
c906108c 636
c5aa993b
JM
637 One value must be an integer value and the other value must be
638 either a bitstring value or character string value, which is
639 to be repeated by the number of times specified by the integer
640 value.
c906108c
SS
641
642
c5aa993b
JM
643 (2) Boolean values are also allowed and are treated as bit string
644 values of length 1.
c906108c 645
c5aa993b 646 (3) Character values are also allowed and are treated as character
581e13c1 647 string values of length 1. */
c906108c 648
f23631e4
AC
649struct value *
650value_concat (struct value *arg1, struct value *arg2)
c906108c 651{
f23631e4
AC
652 struct value *inval1;
653 struct value *inval2;
654 struct value *outval = NULL;
c906108c
SS
655 int inval1len, inval2len;
656 int count, idx;
c906108c 657 char inchar;
df407dfe
AC
658 struct type *type1 = check_typedef (value_type (arg1));
659 struct type *type2 = check_typedef (value_type (arg2));
3b7538c0 660 struct type *char_type;
c906108c 661
c906108c
SS
662 /* First figure out if we are dealing with two values to be concatenated
663 or a repeat count and a value to be repeated. INVAL1 is set to the
664 first of two concatenated values, or the repeat count. INVAL2 is set
665 to the second of the two concatenated values or the value to be
581e13c1 666 repeated. */
c906108c
SS
667
668 if (TYPE_CODE (type2) == TYPE_CODE_INT)
669 {
670 struct type *tmp = type1;
a109c7c1 671
c906108c
SS
672 type1 = tmp;
673 tmp = type2;
674 inval1 = arg2;
675 inval2 = arg1;
676 }
677 else
678 {
679 inval1 = arg1;
680 inval2 = arg2;
681 }
682
581e13c1 683 /* Now process the input values. */
c906108c
SS
684
685 if (TYPE_CODE (type1) == TYPE_CODE_INT)
686 {
687 /* We have a repeat count. Validate the second value and then
581e13c1 688 construct a value repeated that many times. */
c906108c
SS
689 if (TYPE_CODE (type2) == TYPE_CODE_STRING
690 || TYPE_CODE (type2) == TYPE_CODE_CHAR)
691 {
692 count = longest_to_int (value_as_long (inval1));
693 inval2len = TYPE_LENGTH (type2);
26fcd5d7 694 std::vector<char> ptr (count * inval2len);
c906108c
SS
695 if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
696 {
3b7538c0 697 char_type = type2;
a109c7c1 698
c906108c 699 inchar = (char) unpack_long (type2,
0fd88904 700 value_contents (inval2));
c906108c
SS
701 for (idx = 0; idx < count; idx++)
702 {
26fcd5d7 703 ptr[idx] = inchar;
c906108c
SS
704 }
705 }
706 else
707 {
3b7538c0 708 char_type = TYPE_TARGET_TYPE (type2);
a109c7c1 709
c906108c
SS
710 for (idx = 0; idx < count; idx++)
711 {
26fcd5d7 712 memcpy (&ptr[idx * inval2len], value_contents (inval2),
c906108c
SS
713 inval2len);
714 }
715 }
26fcd5d7 716 outval = value_string (ptr.data (), count * inval2len, char_type);
c906108c 717 }
6b1755ce 718 else if (TYPE_CODE (type2) == TYPE_CODE_BOOL)
c906108c 719 {
6b1755ce 720 error (_("unimplemented support for boolean repeats"));
c906108c
SS
721 }
722 else
723 {
8a3fe4f8 724 error (_("can't repeat values of that type"));
c906108c
SS
725 }
726 }
727 else if (TYPE_CODE (type1) == TYPE_CODE_STRING
c5aa993b 728 || TYPE_CODE (type1) == TYPE_CODE_CHAR)
c906108c 729 {
581e13c1 730 /* We have two character strings to concatenate. */
c906108c
SS
731 if (TYPE_CODE (type2) != TYPE_CODE_STRING
732 && TYPE_CODE (type2) != TYPE_CODE_CHAR)
733 {
8a3fe4f8 734 error (_("Strings can only be concatenated with other strings."));
c906108c
SS
735 }
736 inval1len = TYPE_LENGTH (type1);
737 inval2len = TYPE_LENGTH (type2);
26fcd5d7 738 std::vector<char> ptr (inval1len + inval2len);
c906108c
SS
739 if (TYPE_CODE (type1) == TYPE_CODE_CHAR)
740 {
3b7538c0 741 char_type = type1;
a109c7c1 742
26fcd5d7 743 ptr[0] = (char) unpack_long (type1, value_contents (inval1));
c906108c
SS
744 }
745 else
746 {
3b7538c0 747 char_type = TYPE_TARGET_TYPE (type1);
a109c7c1 748
26fcd5d7 749 memcpy (ptr.data (), value_contents (inval1), inval1len);
c906108c
SS
750 }
751 if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
752 {
26fcd5d7 753 ptr[inval1len] =
0fd88904 754 (char) unpack_long (type2, value_contents (inval2));
c906108c
SS
755 }
756 else
757 {
26fcd5d7 758 memcpy (&ptr[inval1len], value_contents (inval2), inval2len);
c906108c 759 }
26fcd5d7 760 outval = value_string (ptr.data (), inval1len + inval2len, char_type);
c906108c 761 }
6b1755ce 762 else if (TYPE_CODE (type1) == TYPE_CODE_BOOL)
c906108c 763 {
581e13c1 764 /* We have two bitstrings to concatenate. */
6b1755ce 765 if (TYPE_CODE (type2) != TYPE_CODE_BOOL)
c906108c 766 {
6b1755ce 767 error (_("Booleans can only be concatenated "
3e43a32a 768 "with other bitstrings or booleans."));
c906108c 769 }
6b1755ce 770 error (_("unimplemented support for boolean concatenation."));
c5aa993b 771 }
c906108c
SS
772 else
773 {
581e13c1 774 /* We don't know how to concatenate these operands. */
8a3fe4f8 775 error (_("illegal operands for concatenation."));
c906108c
SS
776 }
777 return (outval);
778}
c906108c 779\f
d118ef87
PH
780/* Integer exponentiation: V1**V2, where both arguments are
781 integers. Requires V1 != 0 if V2 < 0. Returns 1 for 0 ** 0. */
581e13c1 782
d118ef87
PH
783static LONGEST
784integer_pow (LONGEST v1, LONGEST v2)
785{
786 if (v2 < 0)
787 {
788 if (v1 == 0)
789 error (_("Attempt to raise 0 to negative power."));
790 else
791 return 0;
792 }
793 else
794 {
581e13c1 795 /* The Russian Peasant's Algorithm. */
d118ef87
PH
796 LONGEST v;
797
798 v = 1;
799 for (;;)
800 {
801 if (v2 & 1L)
802 v *= v1;
803 v2 >>= 1;
804 if (v2 == 0)
805 return v;
806 v1 *= v1;
807 }
808 }
809}
810
811/* Integer exponentiation: V1**V2, where both arguments are
812 integers. Requires V1 != 0 if V2 < 0. Returns 1 for 0 ** 0. */
581e13c1 813
d118ef87
PH
814static ULONGEST
815uinteger_pow (ULONGEST v1, LONGEST v2)
816{
817 if (v2 < 0)
818 {
819 if (v1 == 0)
820 error (_("Attempt to raise 0 to negative power."));
821 else
822 return 0;
823 }
824 else
825 {
581e13c1 826 /* The Russian Peasant's Algorithm. */
d118ef87
PH
827 ULONGEST v;
828
829 v = 1;
830 for (;;)
831 {
832 if (v2 & 1L)
833 v *= v1;
834 v2 >>= 1;
835 if (v2 == 0)
836 return v;
837 v1 *= v1;
838 }
839 }
840}
841
66c02b9e
UW
842/* Obtain argument values for binary operation, converting from
843 other types if one of them is not floating point. */
4ef30785 844static void
66c02b9e
UW
845value_args_as_target_float (struct value *arg1, struct value *arg2,
846 gdb_byte *x, struct type **eff_type_x,
847 gdb_byte *y, struct type **eff_type_y)
4ef30785
TJB
848{
849 struct type *type1, *type2;
850
851 type1 = check_typedef (value_type (arg1));
852 type2 = check_typedef (value_type (arg2));
853
66c02b9e
UW
854 /* At least one of the arguments must be of floating-point type. */
855 gdb_assert (is_floating_type (type1) || is_floating_type (type2));
4ef30785 856
66c02b9e
UW
857 if (is_floating_type (type1) && is_floating_type (type2)
858 && TYPE_CODE (type1) != TYPE_CODE (type2))
4ef30785
TJB
859 /* The DFP extension to the C language does not allow mixing of
860 * decimal float types with other float types in expressions
861 * (see WDTR 24732, page 12). */
3e43a32a
MS
862 error (_("Mixing decimal floating types with "
863 "other floating types is not allowed."));
4ef30785 864
66c02b9e 865 /* Obtain value of arg1, converting from other types if necessary. */
4ef30785 866
66c02b9e 867 if (is_floating_type (type1))
4ef30785 868 {
66c02b9e
UW
869 *eff_type_x = type1;
870 memcpy (x, value_contents (arg1), TYPE_LENGTH (type1));
4ef30785
TJB
871 }
872 else if (is_integral_type (type1))
873 {
66c02b9e 874 *eff_type_x = type2;
3b4b2f16 875 if (TYPE_UNSIGNED (type1))
66c02b9e 876 target_float_from_ulongest (x, *eff_type_x, value_as_long (arg1));
3b4b2f16 877 else
66c02b9e 878 target_float_from_longest (x, *eff_type_x, value_as_long (arg1));
4ef30785
TJB
879 }
880 else
881 error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1),
882 TYPE_NAME (type2));
883
66c02b9e 884 /* Obtain value of arg2, converting from other types if necessary. */
4ef30785 885
66c02b9e 886 if (is_floating_type (type2))
4ef30785 887 {
66c02b9e
UW
888 *eff_type_y = type2;
889 memcpy (y, value_contents (arg2), TYPE_LENGTH (type2));
4ef30785
TJB
890 }
891 else if (is_integral_type (type2))
892 {
66c02b9e 893 *eff_type_y = type1;
3b4b2f16 894 if (TYPE_UNSIGNED (type2))
66c02b9e 895 target_float_from_ulongest (y, *eff_type_y, value_as_long (arg2));
3b4b2f16 896 else
66c02b9e 897 target_float_from_longest (y, *eff_type_y, value_as_long (arg2));
4ef30785
TJB
898 }
899 else
900 error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1),
901 TYPE_NAME (type2));
902}
c5aa993b 903
c906108c
SS
904/* Perform a binary operation on two operands which have reasonable
905 representations as integers or floats. This includes booleans,
906 characters, integers, or floats.
907 Does not support addition and subtraction on pointers;
89eef114 908 use value_ptradd, value_ptrsub or value_ptrdiff for those operations. */
c906108c 909
7346b668
KW
910static struct value *
911scalar_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
c906108c 912{
f23631e4 913 struct value *val;
4066e646
UW
914 struct type *type1, *type2, *result_type;
915
994b9211
AC
916 arg1 = coerce_ref (arg1);
917 arg2 = coerce_ref (arg2);
c906108c 918
4066e646
UW
919 type1 = check_typedef (value_type (arg1));
920 type2 = check_typedef (value_type (arg2));
921
66c02b9e
UW
922 if ((!is_floating_value (arg1) && !is_integral_type (type1))
923 || (!is_floating_value (arg2) && !is_integral_type (type2)))
4066e646 924 error (_("Argument to arithmetic operation not a number or boolean."));
c906108c 925
66c02b9e 926 if (is_floating_type (type1) || is_floating_type (type2))
4ef30785 927 {
66c02b9e 928 /* If only one type is floating-point, use its type.
289bd67a 929 Otherwise use the bigger type. */
66c02b9e 930 if (!is_floating_type (type1))
289bd67a 931 result_type = type2;
66c02b9e 932 else if (!is_floating_type (type2))
4066e646
UW
933 result_type = type1;
934 else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1))
935 result_type = type2;
936 else
937 result_type = type1;
938
301f0ecf 939 val = allocate_value (result_type);
66c02b9e
UW
940
941 struct type *eff_type_v1, *eff_type_v2;
942 gdb::byte_vector v1, v2;
943 v1.resize (TYPE_LENGTH (result_type));
944 v2.resize (TYPE_LENGTH (result_type));
945
946 value_args_as_target_float (arg1, arg2,
947 v1.data (), &eff_type_v1,
948 v2.data (), &eff_type_v2);
949 target_float_binop (op, v1.data (), eff_type_v1,
950 v2.data (), eff_type_v2,
951 value_contents_raw (val), result_type);
c906108c 952 }
4066e646
UW
953 else if (TYPE_CODE (type1) == TYPE_CODE_BOOL
954 || TYPE_CODE (type2) == TYPE_CODE_BOOL)
c5aa993b 955 {
c4093a6a 956 LONGEST v1, v2, v = 0;
a109c7c1 957
c5aa993b
JM
958 v1 = value_as_long (arg1);
959 v2 = value_as_long (arg2);
960
961 switch (op)
962 {
963 case BINOP_BITWISE_AND:
964 v = v1 & v2;
965 break;
966
967 case BINOP_BITWISE_IOR:
968 v = v1 | v2;
969 break;
970
971 case BINOP_BITWISE_XOR:
972 v = v1 ^ v2;
c4093a6a
JM
973 break;
974
975 case BINOP_EQUAL:
976 v = v1 == v2;
977 break;
978
979 case BINOP_NOTEQUAL:
980 v = v1 != v2;
c5aa993b
JM
981 break;
982
983 default:
8a3fe4f8 984 error (_("Invalid operation on booleans."));
c5aa993b
JM
985 }
986
4066e646
UW
987 result_type = type1;
988
301f0ecf 989 val = allocate_value (result_type);
990a07ab 990 store_signed_integer (value_contents_raw (val),
301f0ecf 991 TYPE_LENGTH (result_type),
e17a4113 992 gdbarch_byte_order (get_type_arch (result_type)),
c5aa993b
JM
993 v);
994 }
c906108c
SS
995 else
996 /* Integral operations here. */
c906108c 997 {
4066e646
UW
998 /* Determine type length of the result, and if the operation should
999 be done unsigned. For exponentiation and shift operators,
1000 use the length and type of the left operand. Otherwise,
1001 use the signedness of the operand with the greater length.
1002 If both operands are of equal length, use unsigned operation
1003 if one of the operands is unsigned. */
1004 if (op == BINOP_RSH || op == BINOP_LSH || op == BINOP_EXP)
1005 result_type = type1;
1006 else if (TYPE_LENGTH (type1) > TYPE_LENGTH (type2))
1007 result_type = type1;
1008 else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1))
1009 result_type = type2;
1010 else if (TYPE_UNSIGNED (type1))
1011 result_type = type1;
1012 else if (TYPE_UNSIGNED (type2))
1013 result_type = type2;
1014 else
1015 result_type = type1;
c906108c 1016
4066e646 1017 if (TYPE_UNSIGNED (result_type))
c906108c 1018 {
d118ef87 1019 LONGEST v2_signed = value_as_long (arg2);
c4093a6a 1020 ULONGEST v1, v2, v = 0;
a109c7c1 1021
c906108c 1022 v1 = (ULONGEST) value_as_long (arg1);
d118ef87 1023 v2 = (ULONGEST) v2_signed;
c906108c 1024
c906108c
SS
1025 switch (op)
1026 {
1027 case BINOP_ADD:
1028 v = v1 + v2;
1029 break;
c5aa993b 1030
c906108c
SS
1031 case BINOP_SUB:
1032 v = v1 - v2;
1033 break;
c5aa993b 1034
c906108c
SS
1035 case BINOP_MUL:
1036 v = v1 * v2;
1037 break;
c5aa993b 1038
c906108c 1039 case BINOP_DIV:
ef80d18e 1040 case BINOP_INTDIV:
c3940723
PM
1041 if (v2 != 0)
1042 v = v1 / v2;
1043 else
1044 error (_("Division by zero"));
c906108c 1045 break;
c5aa993b 1046
bd49c137 1047 case BINOP_EXP:
d118ef87 1048 v = uinteger_pow (v1, v2_signed);
bd49c137 1049 break;
c4093a6a 1050
c906108c 1051 case BINOP_REM:
f8597ac3
DE
1052 if (v2 != 0)
1053 v = v1 % v2;
1054 else
1055 error (_("Division by zero"));
c906108c 1056 break;
c5aa993b 1057
c906108c
SS
1058 case BINOP_MOD:
1059 /* Knuth 1.2.4, integer only. Note that unlike the C '%' op,
581e13c1 1060 v1 mod 0 has a defined value, v1. */
c906108c
SS
1061 if (v2 == 0)
1062 {
1063 v = v1;
1064 }
1065 else
1066 {
c5aa993b 1067 v = v1 / v2;
581e13c1 1068 /* Note floor(v1/v2) == v1/v2 for unsigned. */
c906108c
SS
1069 v = v1 - (v2 * v);
1070 }
1071 break;
c5aa993b 1072
c906108c
SS
1073 case BINOP_LSH:
1074 v = v1 << v2;
1075 break;
c5aa993b 1076
c906108c
SS
1077 case BINOP_RSH:
1078 v = v1 >> v2;
1079 break;
c5aa993b 1080
c906108c
SS
1081 case BINOP_BITWISE_AND:
1082 v = v1 & v2;
1083 break;
c5aa993b 1084
c906108c
SS
1085 case BINOP_BITWISE_IOR:
1086 v = v1 | v2;
1087 break;
c5aa993b 1088
c906108c
SS
1089 case BINOP_BITWISE_XOR:
1090 v = v1 ^ v2;
1091 break;
c5aa993b 1092
c906108c
SS
1093 case BINOP_LOGICAL_AND:
1094 v = v1 && v2;
1095 break;
c5aa993b 1096
c906108c
SS
1097 case BINOP_LOGICAL_OR:
1098 v = v1 || v2;
1099 break;
c5aa993b 1100
c906108c
SS
1101 case BINOP_MIN:
1102 v = v1 < v2 ? v1 : v2;
1103 break;
c5aa993b 1104
c906108c
SS
1105 case BINOP_MAX:
1106 v = v1 > v2 ? v1 : v2;
1107 break;
1108
1109 case BINOP_EQUAL:
1110 v = v1 == v2;
1111 break;
1112
c4093a6a
JM
1113 case BINOP_NOTEQUAL:
1114 v = v1 != v2;
1115 break;
1116
c906108c
SS
1117 case BINOP_LESS:
1118 v = v1 < v2;
1119 break;
c5aa993b 1120
b966cb8a
TT
1121 case BINOP_GTR:
1122 v = v1 > v2;
1123 break;
1124
1125 case BINOP_LEQ:
1126 v = v1 <= v2;
1127 break;
1128
1129 case BINOP_GEQ:
1130 v = v1 >= v2;
1131 break;
1132
c906108c 1133 default:
8a3fe4f8 1134 error (_("Invalid binary operation on numbers."));
c906108c
SS
1135 }
1136
301f0ecf 1137 val = allocate_value (result_type);
990a07ab 1138 store_unsigned_integer (value_contents_raw (val),
df407dfe 1139 TYPE_LENGTH (value_type (val)),
e17a4113
UW
1140 gdbarch_byte_order
1141 (get_type_arch (result_type)),
c906108c
SS
1142 v);
1143 }
1144 else
1145 {
c4093a6a 1146 LONGEST v1, v2, v = 0;
a109c7c1 1147
c906108c
SS
1148 v1 = value_as_long (arg1);
1149 v2 = value_as_long (arg2);
c5aa993b 1150
c906108c
SS
1151 switch (op)
1152 {
1153 case BINOP_ADD:
1154 v = v1 + v2;
1155 break;
c5aa993b 1156
c906108c
SS
1157 case BINOP_SUB:
1158 v = v1 - v2;
1159 break;
c5aa993b 1160
c906108c
SS
1161 case BINOP_MUL:
1162 v = v1 * v2;
1163 break;
c5aa993b 1164
c906108c 1165 case BINOP_DIV:
ef80d18e 1166 case BINOP_INTDIV:
399cfac6
DL
1167 if (v2 != 0)
1168 v = v1 / v2;
1169 else
8a3fe4f8 1170 error (_("Division by zero"));
c4093a6a
JM
1171 break;
1172
bd49c137 1173 case BINOP_EXP:
d118ef87 1174 v = integer_pow (v1, v2);
c906108c 1175 break;
c5aa993b 1176
c906108c 1177 case BINOP_REM:
399cfac6
DL
1178 if (v2 != 0)
1179 v = v1 % v2;
1180 else
8a3fe4f8 1181 error (_("Division by zero"));
c906108c 1182 break;
c5aa993b 1183
c906108c
SS
1184 case BINOP_MOD:
1185 /* Knuth 1.2.4, integer only. Note that unlike the C '%' op,
581e13c1 1186 X mod 0 has a defined value, X. */
c906108c
SS
1187 if (v2 == 0)
1188 {
1189 v = v1;
1190 }
1191 else
1192 {
c5aa993b 1193 v = v1 / v2;
581e13c1 1194 /* Compute floor. */
c906108c
SS
1195 if (TRUNCATION_TOWARDS_ZERO && (v < 0) && ((v1 % v2) != 0))
1196 {
1197 v--;
1198 }
1199 v = v1 - (v2 * v);
1200 }
1201 break;
c5aa993b 1202
c906108c
SS
1203 case BINOP_LSH:
1204 v = v1 << v2;
1205 break;
c5aa993b 1206
c906108c
SS
1207 case BINOP_RSH:
1208 v = v1 >> v2;
1209 break;
c5aa993b 1210
c906108c
SS
1211 case BINOP_BITWISE_AND:
1212 v = v1 & v2;
1213 break;
c5aa993b 1214
c906108c
SS
1215 case BINOP_BITWISE_IOR:
1216 v = v1 | v2;
1217 break;
c5aa993b 1218
c906108c
SS
1219 case BINOP_BITWISE_XOR:
1220 v = v1 ^ v2;
1221 break;
c5aa993b 1222
c906108c
SS
1223 case BINOP_LOGICAL_AND:
1224 v = v1 && v2;
1225 break;
c5aa993b 1226
c906108c
SS
1227 case BINOP_LOGICAL_OR:
1228 v = v1 || v2;
1229 break;
c5aa993b 1230
c906108c
SS
1231 case BINOP_MIN:
1232 v = v1 < v2 ? v1 : v2;
1233 break;
c5aa993b 1234
c906108c
SS
1235 case BINOP_MAX:
1236 v = v1 > v2 ? v1 : v2;
1237 break;
1238
1239 case BINOP_EQUAL:
1240 v = v1 == v2;
1241 break;
1242
b966cb8a
TT
1243 case BINOP_NOTEQUAL:
1244 v = v1 != v2;
1245 break;
1246
c906108c
SS
1247 case BINOP_LESS:
1248 v = v1 < v2;
1249 break;
c5aa993b 1250
b966cb8a
TT
1251 case BINOP_GTR:
1252 v = v1 > v2;
1253 break;
1254
1255 case BINOP_LEQ:
1256 v = v1 <= v2;
1257 break;
1258
1259 case BINOP_GEQ:
1260 v = v1 >= v2;
1261 break;
1262
c906108c 1263 default:
8a3fe4f8 1264 error (_("Invalid binary operation on numbers."));
c906108c
SS
1265 }
1266
301f0ecf 1267 val = allocate_value (result_type);
990a07ab 1268 store_signed_integer (value_contents_raw (val),
df407dfe 1269 TYPE_LENGTH (value_type (val)),
e17a4113
UW
1270 gdbarch_byte_order
1271 (get_type_arch (result_type)),
c906108c
SS
1272 v);
1273 }
1274 }
1275
1276 return val;
1277}
7346b668 1278
8954db33
AB
1279/* Widen a scalar value SCALAR_VALUE to vector type VECTOR_TYPE by
1280 replicating SCALAR_VALUE for each element of the vector. Only scalar
1281 types that can be cast to the type of one element of the vector are
1282 acceptable. The newly created vector value is returned upon success,
1283 otherwise an error is thrown. */
1284
1285struct value *
1286value_vector_widen (struct value *scalar_value, struct type *vector_type)
1287{
1288 /* Widen the scalar to a vector. */
1289 struct type *eltype, *scalar_type;
1290 struct value *val, *elval;
1291 LONGEST low_bound, high_bound;
1292 int i;
1293
f168693b 1294 vector_type = check_typedef (vector_type);
8954db33
AB
1295
1296 gdb_assert (TYPE_CODE (vector_type) == TYPE_CODE_ARRAY
1297 && TYPE_VECTOR (vector_type));
1298
1299 if (!get_array_bounds (vector_type, &low_bound, &high_bound))
1300 error (_("Could not determine the vector bounds"));
1301
1302 eltype = check_typedef (TYPE_TARGET_TYPE (vector_type));
1303 elval = value_cast (eltype, scalar_value);
1304
1305 scalar_type = check_typedef (value_type (scalar_value));
1306
1307 /* If we reduced the length of the scalar then check we didn't loose any
1308 important bits. */
1309 if (TYPE_LENGTH (eltype) < TYPE_LENGTH (scalar_type)
1310 && !value_equal (elval, scalar_value))
1311 error (_("conversion of scalar to vector involves truncation"));
1312
1313 val = allocate_value (vector_type);
1314 for (i = 0; i < high_bound - low_bound + 1; i++)
1315 /* Duplicate the contents of elval into the destination vector. */
1316 memcpy (value_contents_writeable (val) + (i * TYPE_LENGTH (eltype)),
1317 value_contents_all (elval), TYPE_LENGTH (eltype));
1318
1319 return val;
1320}
1321
7346b668
KW
1322/* Performs a binary operation on two vector operands by calling scalar_binop
1323 for each pair of vector components. */
1324
1325static struct value *
1326vector_binop (struct value *val1, struct value *val2, enum exp_opcode op)
1327{
1328 struct value *val, *tmp, *mark;
22e048c9 1329 struct type *type1, *type2, *eltype1, *eltype2;
dbc98a8b
KW
1330 int t1_is_vec, t2_is_vec, elsize, i;
1331 LONGEST low_bound1, high_bound1, low_bound2, high_bound2;
7346b668
KW
1332
1333 type1 = check_typedef (value_type (val1));
1334 type2 = check_typedef (value_type (val2));
1335
1336 t1_is_vec = (TYPE_CODE (type1) == TYPE_CODE_ARRAY
1337 && TYPE_VECTOR (type1)) ? 1 : 0;
1338 t2_is_vec = (TYPE_CODE (type2) == TYPE_CODE_ARRAY
1339 && TYPE_VECTOR (type2)) ? 1 : 0;
1340
1341 if (!t1_is_vec || !t2_is_vec)
1342 error (_("Vector operations are only supported among vectors"));
1343
dbc98a8b
KW
1344 if (!get_array_bounds (type1, &low_bound1, &high_bound1)
1345 || !get_array_bounds (type2, &low_bound2, &high_bound2))
1346 error (_("Could not determine the vector bounds"));
1347
7346b668
KW
1348 eltype1 = check_typedef (TYPE_TARGET_TYPE (type1));
1349 eltype2 = check_typedef (TYPE_TARGET_TYPE (type2));
dbc98a8b 1350 elsize = TYPE_LENGTH (eltype1);
7346b668
KW
1351
1352 if (TYPE_CODE (eltype1) != TYPE_CODE (eltype2)
dbc98a8b
KW
1353 || elsize != TYPE_LENGTH (eltype2)
1354 || TYPE_UNSIGNED (eltype1) != TYPE_UNSIGNED (eltype2)
1355 || low_bound1 != low_bound2 || high_bound1 != high_bound2)
7346b668
KW
1356 error (_("Cannot perform operation on vectors with different types"));
1357
7346b668
KW
1358 val = allocate_value (type1);
1359 mark = value_mark ();
dbc98a8b 1360 for (i = 0; i < high_bound1 - low_bound1 + 1; i++)
7346b668
KW
1361 {
1362 tmp = value_binop (value_subscript (val1, i),
1363 value_subscript (val2, i), op);
1364 memcpy (value_contents_writeable (val) + i * elsize,
1365 value_contents_all (tmp),
1366 elsize);
1367 }
1368 value_free_to_mark (mark);
1369
1370 return val;
1371}
1372
1373/* Perform a binary operation on two operands. */
1374
1375struct value *
1376value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
1377{
3bdf2bbd 1378 struct value *val;
7346b668
KW
1379 struct type *type1 = check_typedef (value_type (arg1));
1380 struct type *type2 = check_typedef (value_type (arg2));
3bdf2bbd
KW
1381 int t1_is_vec = (TYPE_CODE (type1) == TYPE_CODE_ARRAY
1382 && TYPE_VECTOR (type1));
1383 int t2_is_vec = (TYPE_CODE (type2) == TYPE_CODE_ARRAY
1384 && TYPE_VECTOR (type2));
1385
1386 if (!t1_is_vec && !t2_is_vec)
1387 val = scalar_binop (arg1, arg2, op);
1388 else if (t1_is_vec && t2_is_vec)
1389 val = vector_binop (arg1, arg2, op);
7346b668 1390 else
3bdf2bbd
KW
1391 {
1392 /* Widen the scalar operand to a vector. */
1393 struct value **v = t1_is_vec ? &arg2 : &arg1;
1394 struct type *t = t1_is_vec ? type2 : type1;
1395
1396 if (TYPE_CODE (t) != TYPE_CODE_FLT
1397 && TYPE_CODE (t) != TYPE_CODE_DECFLOAT
1398 && !is_integral_type (t))
1399 error (_("Argument to operation not a number or boolean."));
1400
8954db33
AB
1401 /* Replicate the scalar value to make a vector value. */
1402 *v = value_vector_widen (*v, t1_is_vec ? type1 : type2);
1403
3bdf2bbd
KW
1404 val = vector_binop (arg1, arg2, op);
1405 }
1406
1407 return val;
7346b668 1408}
c906108c
SS
1409\f
1410/* Simulate the C operator ! -- return 1 if ARG1 contains zero. */
1411
1412int
f23631e4 1413value_logical_not (struct value *arg1)
c906108c 1414{
52f0bd74 1415 int len;
fc1a4b47 1416 const gdb_byte *p;
c906108c
SS
1417 struct type *type1;
1418
0ab7ba45 1419 arg1 = coerce_array (arg1);
df407dfe 1420 type1 = check_typedef (value_type (arg1));
c906108c 1421
70100014
UW
1422 if (is_floating_value (arg1))
1423 return target_float_is_zero (value_contents (arg1), type1);
c906108c
SS
1424
1425 len = TYPE_LENGTH (type1);
0fd88904 1426 p = value_contents (arg1);
c906108c
SS
1427
1428 while (--len >= 0)
1429 {
1430 if (*p++)
1431 break;
1432 }
1433
1434 return len < 0;
1435}
1436
c4093a6a 1437/* Perform a comparison on two string values (whose content are not
581e13c1 1438 necessarily null terminated) based on their length. */
c4093a6a
JM
1439
1440static int
f23631e4 1441value_strcmp (struct value *arg1, struct value *arg2)
c4093a6a 1442{
df407dfe
AC
1443 int len1 = TYPE_LENGTH (value_type (arg1));
1444 int len2 = TYPE_LENGTH (value_type (arg2));
fc1a4b47
AC
1445 const gdb_byte *s1 = value_contents (arg1);
1446 const gdb_byte *s2 = value_contents (arg2);
c4093a6a
JM
1447 int i, len = len1 < len2 ? len1 : len2;
1448
1449 for (i = 0; i < len; i++)
1450 {
1451 if (s1[i] < s2[i])
1452 return -1;
1453 else if (s1[i] > s2[i])
1454 return 1;
1455 else
1456 continue;
1457 }
1458
1459 if (len1 < len2)
1460 return -1;
1461 else if (len1 > len2)
1462 return 1;
1463 else
1464 return 0;
1465}
1466
c906108c
SS
1467/* Simulate the C operator == by returning a 1
1468 iff ARG1 and ARG2 have equal contents. */
1469
1470int
f23631e4 1471value_equal (struct value *arg1, struct value *arg2)
c906108c 1472{
52f0bd74 1473 int len;
fc1a4b47
AC
1474 const gdb_byte *p1;
1475 const gdb_byte *p2;
c906108c
SS
1476 struct type *type1, *type2;
1477 enum type_code code1;
1478 enum type_code code2;
2de41bce 1479 int is_int1, is_int2;
c906108c 1480
994b9211
AC
1481 arg1 = coerce_array (arg1);
1482 arg2 = coerce_array (arg2);
c906108c 1483
df407dfe
AC
1484 type1 = check_typedef (value_type (arg1));
1485 type2 = check_typedef (value_type (arg2));
c906108c
SS
1486 code1 = TYPE_CODE (type1);
1487 code2 = TYPE_CODE (type2);
2de41bce
PH
1488 is_int1 = is_integral_type (type1);
1489 is_int2 = is_integral_type (type2);
c906108c 1490
2de41bce 1491 if (is_int1 && is_int2)
c906108c
SS
1492 return longest_to_int (value_as_long (value_binop (arg1, arg2,
1493 BINOP_EQUAL)));
66c02b9e
UW
1494 else if ((is_floating_value (arg1) || is_int1)
1495 && (is_floating_value (arg2) || is_int2))
4ef30785 1496 {
66c02b9e
UW
1497 struct type *eff_type_v1, *eff_type_v2;
1498 gdb::byte_vector v1, v2;
1499 v1.resize (std::max (TYPE_LENGTH (type1), TYPE_LENGTH (type2)));
1500 v2.resize (std::max (TYPE_LENGTH (type1), TYPE_LENGTH (type2)));
4ef30785 1501
66c02b9e
UW
1502 value_args_as_target_float (arg1, arg2,
1503 v1.data (), &eff_type_v1,
1504 v2.data (), &eff_type_v2);
4ef30785 1505
66c02b9e
UW
1506 return target_float_compare (v1.data (), eff_type_v1,
1507 v2.data (), eff_type_v2) == 0;
4ef30785 1508 }
c906108c
SS
1509
1510 /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1511 is bigger. */
2de41bce 1512 else if (code1 == TYPE_CODE_PTR && is_int2)
1aa20aa8 1513 return value_as_address (arg1) == (CORE_ADDR) value_as_long (arg2);
2de41bce 1514 else if (code2 == TYPE_CODE_PTR && is_int1)
1aa20aa8 1515 return (CORE_ADDR) value_as_long (arg1) == value_as_address (arg2);
c906108c
SS
1516
1517 else if (code1 == code2
1518 && ((len = (int) TYPE_LENGTH (type1))
1519 == (int) TYPE_LENGTH (type2)))
1520 {
0fd88904
AC
1521 p1 = value_contents (arg1);
1522 p2 = value_contents (arg2);
c906108c
SS
1523 while (--len >= 0)
1524 {
1525 if (*p1++ != *p2++)
1526 break;
1527 }
1528 return len < 0;
1529 }
c4093a6a
JM
1530 else if (code1 == TYPE_CODE_STRING && code2 == TYPE_CODE_STRING)
1531 {
1532 return value_strcmp (arg1, arg2) == 0;
1533 }
c906108c 1534 else
dba7455e 1535 error (_("Invalid type combination in equality test."));
c906108c
SS
1536}
1537
218d2fc6
TJB
1538/* Compare values based on their raw contents. Useful for arrays since
1539 value_equal coerces them to pointers, thus comparing just the address
1540 of the array instead of its contents. */
1541
1542int
1543value_equal_contents (struct value *arg1, struct value *arg2)
1544{
1545 struct type *type1, *type2;
1546
1547 type1 = check_typedef (value_type (arg1));
1548 type2 = check_typedef (value_type (arg2));
1549
1550 return (TYPE_CODE (type1) == TYPE_CODE (type2)
1551 && TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
1552 && memcmp (value_contents (arg1), value_contents (arg2),
1553 TYPE_LENGTH (type1)) == 0);
1554}
1555
c906108c
SS
1556/* Simulate the C operator < by returning 1
1557 iff ARG1's contents are less than ARG2's. */
1558
1559int
f23631e4 1560value_less (struct value *arg1, struct value *arg2)
c906108c 1561{
52f0bd74
AC
1562 enum type_code code1;
1563 enum type_code code2;
c906108c 1564 struct type *type1, *type2;
2de41bce 1565 int is_int1, is_int2;
c906108c 1566
994b9211
AC
1567 arg1 = coerce_array (arg1);
1568 arg2 = coerce_array (arg2);
c906108c 1569
df407dfe
AC
1570 type1 = check_typedef (value_type (arg1));
1571 type2 = check_typedef (value_type (arg2));
c906108c
SS
1572 code1 = TYPE_CODE (type1);
1573 code2 = TYPE_CODE (type2);
2de41bce
PH
1574 is_int1 = is_integral_type (type1);
1575 is_int2 = is_integral_type (type2);
c906108c 1576
2de41bce 1577 if (is_int1 && is_int2)
c906108c
SS
1578 return longest_to_int (value_as_long (value_binop (arg1, arg2,
1579 BINOP_LESS)));
66c02b9e
UW
1580 else if ((is_floating_value (arg1) || is_int1)
1581 && (is_floating_value (arg2) || is_int2))
d067a990 1582 {
66c02b9e
UW
1583 struct type *eff_type_v1, *eff_type_v2;
1584 gdb::byte_vector v1, v2;
1585 v1.resize (std::max (TYPE_LENGTH (type1), TYPE_LENGTH (type2)));
1586 v2.resize (std::max (TYPE_LENGTH (type1), TYPE_LENGTH (type2)));
a109c7c1 1587
66c02b9e
UW
1588 value_args_as_target_float (arg1, arg2,
1589 v1.data (), &eff_type_v1,
1590 v2.data (), &eff_type_v2);
4ef30785 1591
66c02b9e
UW
1592 return target_float_compare (v1.data (), eff_type_v1,
1593 v2.data (), eff_type_v2) == -1;
4ef30785 1594 }
c906108c 1595 else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
1aa20aa8 1596 return value_as_address (arg1) < value_as_address (arg2);
c906108c
SS
1597
1598 /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1599 is bigger. */
2de41bce 1600 else if (code1 == TYPE_CODE_PTR && is_int2)
1aa20aa8 1601 return value_as_address (arg1) < (CORE_ADDR) value_as_long (arg2);
2de41bce 1602 else if (code2 == TYPE_CODE_PTR && is_int1)
1aa20aa8 1603 return (CORE_ADDR) value_as_long (arg1) < value_as_address (arg2);
c4093a6a
JM
1604 else if (code1 == TYPE_CODE_STRING && code2 == TYPE_CODE_STRING)
1605 return value_strcmp (arg1, arg2) < 0;
c906108c
SS
1606 else
1607 {
8a3fe4f8 1608 error (_("Invalid type combination in ordering comparison."));
c906108c
SS
1609 return 0;
1610 }
1611}
1612\f
36e9969c
NS
1613/* The unary operators +, - and ~. They free the argument ARG1. */
1614
1615struct value *
1616value_pos (struct value *arg1)
1617{
1618 struct type *type;
4066e646 1619
36e9969c 1620 arg1 = coerce_ref (arg1);
36e9969c
NS
1621 type = check_typedef (value_type (arg1));
1622
66c02b9e
UW
1623 if (is_integral_type (type) || is_floating_value (arg1)
1624 || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)))
1625 return value_from_contents (type, value_contents (arg1));
36e9969c 1626 else
dba7455e 1627 error (_("Argument to positive operation not a number."));
36e9969c 1628}
c906108c 1629
f23631e4
AC
1630struct value *
1631value_neg (struct value *arg1)
c906108c 1632{
52f0bd74 1633 struct type *type;
4066e646 1634
994b9211 1635 arg1 = coerce_ref (arg1);
df407dfe 1636 type = check_typedef (value_type (arg1));
c906108c 1637
66c02b9e
UW
1638 if (is_integral_type (type) || is_floating_type (type))
1639 return value_binop (value_from_longest (type, 0), arg1, BINOP_SUB);
120bd360
KW
1640 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))
1641 {
1642 struct value *tmp, *val = allocate_value (type);
1643 struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type));
cfa6f054
KW
1644 int i;
1645 LONGEST low_bound, high_bound;
120bd360 1646
cfa6f054
KW
1647 if (!get_array_bounds (type, &low_bound, &high_bound))
1648 error (_("Could not determine the vector bounds"));
1649
1650 for (i = 0; i < high_bound - low_bound + 1; i++)
120bd360
KW
1651 {
1652 tmp = value_neg (value_subscript (arg1, i));
1653 memcpy (value_contents_writeable (val) + i * TYPE_LENGTH (eltype),
1654 value_contents_all (tmp), TYPE_LENGTH (eltype));
1655 }
1656 return val;
1657 }
c5aa993b 1658 else
dba7455e 1659 error (_("Argument to negate operation not a number."));
c906108c
SS
1660}
1661
f23631e4
AC
1662struct value *
1663value_complement (struct value *arg1)
c906108c 1664{
52f0bd74 1665 struct type *type;
120bd360 1666 struct value *val;
4066e646 1667
994b9211 1668 arg1 = coerce_ref (arg1);
df407dfe 1669 type = check_typedef (value_type (arg1));
c906108c 1670
120bd360
KW
1671 if (is_integral_type (type))
1672 val = value_from_longest (type, ~value_as_long (arg1));
1673 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))
1674 {
1675 struct value *tmp;
1676 struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type));
cfa6f054
KW
1677 int i;
1678 LONGEST low_bound, high_bound;
1679
1680 if (!get_array_bounds (type, &low_bound, &high_bound))
1681 error (_("Could not determine the vector bounds"));
120bd360
KW
1682
1683 val = allocate_value (type);
cfa6f054 1684 for (i = 0; i < high_bound - low_bound + 1; i++)
120bd360
KW
1685 {
1686 tmp = value_complement (value_subscript (arg1, i));
1687 memcpy (value_contents_writeable (val) + i * TYPE_LENGTH (eltype),
1688 value_contents_all (tmp), TYPE_LENGTH (eltype));
1689 }
1690 }
1691 else
1692 error (_("Argument to complement operation not an integer, boolean."));
c906108c 1693
120bd360 1694 return val;
c906108c
SS
1695}
1696\f
df407dfe 1697/* The INDEX'th bit of SET value whose value_type is TYPE,
0fd88904 1698 and whose value_contents is valaddr.
581e13c1 1699 Return -1 if out of range, -2 other error. */
c906108c
SS
1700
1701int
fc1a4b47 1702value_bit_index (struct type *type, const gdb_byte *valaddr, int index)
c906108c 1703{
50810684 1704 struct gdbarch *gdbarch = get_type_arch (type);
c906108c
SS
1705 LONGEST low_bound, high_bound;
1706 LONGEST word;
1707 unsigned rel_index;
262452ec 1708 struct type *range = TYPE_INDEX_TYPE (type);
a109c7c1 1709
c906108c
SS
1710 if (get_discrete_bounds (range, &low_bound, &high_bound) < 0)
1711 return -2;
1712 if (index < low_bound || index > high_bound)
1713 return -1;
1714 rel_index = index - low_bound;
e17a4113
UW
1715 word = extract_unsigned_integer (valaddr + (rel_index / TARGET_CHAR_BIT), 1,
1716 gdbarch_byte_order (gdbarch));
c906108c 1717 rel_index %= TARGET_CHAR_BIT;
50810684 1718 if (gdbarch_bits_big_endian (gdbarch))
c906108c
SS
1719 rel_index = TARGET_CHAR_BIT - 1 - rel_index;
1720 return (word >> rel_index) & 1;
1721}
1722
fbb06eb1 1723int
f23631e4 1724value_in (struct value *element, struct value *set)
c906108c
SS
1725{
1726 int member;
df407dfe
AC
1727 struct type *settype = check_typedef (value_type (set));
1728 struct type *eltype = check_typedef (value_type (element));
a109c7c1 1729
c906108c
SS
1730 if (TYPE_CODE (eltype) == TYPE_CODE_RANGE)
1731 eltype = TYPE_TARGET_TYPE (eltype);
1732 if (TYPE_CODE (settype) != TYPE_CODE_SET)
8a3fe4f8 1733 error (_("Second argument of 'IN' has wrong type"));
c906108c
SS
1734 if (TYPE_CODE (eltype) != TYPE_CODE_INT
1735 && TYPE_CODE (eltype) != TYPE_CODE_CHAR
1736 && TYPE_CODE (eltype) != TYPE_CODE_ENUM
1737 && TYPE_CODE (eltype) != TYPE_CODE_BOOL)
8a3fe4f8 1738 error (_("First argument of 'IN' has wrong type"));
0fd88904 1739 member = value_bit_index (settype, value_contents (set),
c906108c
SS
1740 value_as_long (element));
1741 if (member < 0)
8a3fe4f8 1742 error (_("First argument of 'IN' not in range"));
fbb06eb1 1743 return member;
c906108c
SS
1744}
1745
1746void
fba45db2 1747_initialize_valarith (void)
c906108c
SS
1748{
1749}
This page took 2.194261 seconds and 4 git commands to generate.