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