]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/gdb/gdb/valarith.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / gdb / gdb / valarith.c
1 /* Perform arithmetic and other operations on values, for GDB.
2
3    Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
5    Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "value.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "expression.h"
29 #include "target.h"
30 #include "language.h"
31 #include "gdb_string.h"
32 #include "doublest.h"
33 #include <math.h>
34 #include "infcall.h"
35
36 /* Define whether or not the C operator '/' truncates towards zero for
37    differently signed operands (truncation direction is undefined in C). */
38
39 #ifndef TRUNCATION_TOWARDS_ZERO
40 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
41 #endif
42
43 static struct value *value_subscripted_rvalue (struct value *, struct value *, int);
44
45 void _initialize_valarith (void);
46 \f
47
48 /* Given a pointer, return the size of its target.
49    If the pointer type is void *, then return 1.
50    If the target type is incomplete, then error out.
51    This isn't a general purpose function, but just a 
52    helper for value_sub & value_add.
53 */
54
55 static LONGEST
56 find_size_for_pointer_math (struct type *ptr_type)
57 {
58   LONGEST sz = -1;
59   struct type *ptr_target;
60
61   ptr_target = check_typedef (TYPE_TARGET_TYPE (ptr_type));
62
63   sz = TYPE_LENGTH (ptr_target);
64   if (sz == 0)
65     {
66       if (TYPE_CODE (ptr_type) == TYPE_CODE_VOID)
67         sz = 1;
68       else
69         {
70           char *name;
71           
72           name = TYPE_NAME (ptr_target);
73           if (name == NULL)
74             name = TYPE_TAG_NAME (ptr_target);
75           if (name == NULL)
76             error ("Cannot perform pointer math on incomplete types, "
77                    "try casting to a known type, or void *.");
78           else
79             error ("Cannot perform pointer math on incomplete type \"%s\", "
80                    "try casting to a known type, or void *.", name);
81         }
82     }
83   return sz;
84 }
85
86 struct value *
87 value_add (struct value *arg1, struct value *arg2)
88 {
89   struct value *valint;
90   struct value *valptr;
91   LONGEST sz;
92   struct type *type1, *type2, *valptrtype;
93
94   COERCE_NUMBER (arg1);
95   COERCE_NUMBER (arg2);
96   type1 = check_typedef (VALUE_TYPE (arg1));
97   type2 = check_typedef (VALUE_TYPE (arg2));
98
99   if ((TYPE_CODE (type1) == TYPE_CODE_PTR
100        || TYPE_CODE (type2) == TYPE_CODE_PTR)
101       &&
102       (TYPE_CODE (type1) == TYPE_CODE_INT
103        || TYPE_CODE (type2) == TYPE_CODE_INT))
104     /* Exactly one argument is a pointer, and one is an integer.  */
105     {
106       struct value *retval;
107
108       if (TYPE_CODE (type1) == TYPE_CODE_PTR)
109         {
110           valptr = arg1;
111           valint = arg2;
112           valptrtype = type1;
113         }
114       else
115         {
116           valptr = arg2;
117           valint = arg1;
118           valptrtype = type2;
119         }
120
121       sz = find_size_for_pointer_math (valptrtype);
122
123       retval = value_from_pointer (valptrtype,
124                                    value_as_address (valptr)
125                                    + (sz * value_as_long (valint)));
126       VALUE_BFD_SECTION (retval) = VALUE_BFD_SECTION (valptr);
127       return retval;
128     }
129
130   return value_binop (arg1, arg2, BINOP_ADD);
131 }
132
133 struct value *
134 value_sub (struct value *arg1, struct value *arg2)
135 {
136   struct type *type1, *type2;
137   COERCE_NUMBER (arg1);
138   COERCE_NUMBER (arg2);
139   type1 = check_typedef (VALUE_TYPE (arg1));
140   type2 = check_typedef (VALUE_TYPE (arg2));
141
142   if (TYPE_CODE (type1) == TYPE_CODE_PTR)
143     {
144       if (TYPE_CODE (type2) == TYPE_CODE_INT)
145         {
146           /* pointer - integer.  */
147           LONGEST sz = find_size_for_pointer_math (type1);
148
149           return value_from_pointer (type1,
150                                      (value_as_address (arg1)
151                                       - (sz * value_as_long (arg2))));
152         }
153       else if (TYPE_CODE (type2) == TYPE_CODE_PTR
154                && TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1)))
155                == TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type2))))
156         {
157           /* pointer to <type x> - pointer to <type x>.  */
158           LONGEST sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1)));
159           return value_from_longest
160             (builtin_type_long, /* FIXME -- should be ptrdiff_t */
161              (value_as_long (arg1) - value_as_long (arg2)) / sz);
162         }
163       else
164         {
165           error ("\
166 First argument of `-' is a pointer and second argument is neither\n\
167 an integer nor a pointer of the same type.");
168         }
169     }
170
171   return value_binop (arg1, arg2, BINOP_SUB);
172 }
173
174 /* Return the value of ARRAY[IDX].
175    See comments in value_coerce_array() for rationale for reason for
176    doing lower bounds adjustment here rather than there.
177    FIXME:  Perhaps we should validate that the index is valid and if
178    verbosity is set, warn about invalid indices (but still use them). */
179
180 struct value *
181 value_subscript (struct value *array, struct value *idx)
182 {
183   struct value *bound;
184   int c_style = current_language->c_style_arrays;
185   struct type *tarray;
186
187   COERCE_REF (array);
188   tarray = check_typedef (VALUE_TYPE (array));
189   COERCE_VARYING_ARRAY (array, tarray);
190
191   if (TYPE_CODE (tarray) == TYPE_CODE_ARRAY
192       || TYPE_CODE (tarray) == TYPE_CODE_STRING)
193     {
194       struct type *range_type = TYPE_INDEX_TYPE (tarray);
195       LONGEST lowerbound, upperbound;
196       get_discrete_bounds (range_type, &lowerbound, &upperbound);
197
198       if (VALUE_LVAL (array) != lval_memory)
199         return value_subscripted_rvalue (array, idx, lowerbound);
200
201       if (c_style == 0)
202         {
203           LONGEST index = value_as_long (idx);
204           if (index >= lowerbound && index <= upperbound)
205             return value_subscripted_rvalue (array, idx, lowerbound);
206           warning ("array or string index out of range");
207           /* fall doing C stuff */
208           c_style = 1;
209         }
210
211       if (lowerbound != 0)
212         {
213           bound = value_from_longest (builtin_type_int, (LONGEST) lowerbound);
214           idx = value_sub (idx, bound);
215         }
216
217       array = value_coerce_array (array);
218     }
219
220   if (TYPE_CODE (tarray) == TYPE_CODE_BITSTRING)
221     {
222       struct type *range_type = TYPE_INDEX_TYPE (tarray);
223       LONGEST index = value_as_long (idx);
224       struct value *v;
225       int offset, byte, bit_index;
226       LONGEST lowerbound, upperbound;
227       get_discrete_bounds (range_type, &lowerbound, &upperbound);
228       if (index < lowerbound || index > upperbound)
229         error ("bitstring index out of range");
230       index -= lowerbound;
231       offset = index / TARGET_CHAR_BIT;
232       byte = *((char *) VALUE_CONTENTS (array) + offset);
233       bit_index = index % TARGET_CHAR_BIT;
234       byte >>= (BITS_BIG_ENDIAN ? TARGET_CHAR_BIT - 1 - bit_index : bit_index);
235       v = value_from_longest (LA_BOOL_TYPE, byte & 1);
236       VALUE_BITPOS (v) = bit_index;
237       VALUE_BITSIZE (v) = 1;
238       VALUE_LVAL (v) = VALUE_LVAL (array);
239       if (VALUE_LVAL (array) == lval_internalvar)
240         VALUE_LVAL (v) = lval_internalvar_component;
241       VALUE_ADDRESS (v) = VALUE_ADDRESS (array);
242       VALUE_OFFSET (v) = offset + VALUE_OFFSET (array);
243       return v;
244     }
245
246   if (c_style)
247     return value_ind (value_add (array, idx));
248   else
249     error ("not an array or string");
250 }
251
252 /* Return the value of EXPR[IDX], expr an aggregate rvalue
253    (eg, a vector register).  This routine used to promote floats
254    to doubles, but no longer does.  */
255
256 static struct value *
257 value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound)
258 {
259   struct type *array_type = check_typedef (VALUE_TYPE (array));
260   struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
261   unsigned int elt_size = TYPE_LENGTH (elt_type);
262   LONGEST index = value_as_long (idx);
263   unsigned int elt_offs = elt_size * longest_to_int (index - lowerbound);
264   struct value *v;
265
266   if (index < lowerbound || elt_offs >= TYPE_LENGTH (array_type))
267     error ("no such vector element");
268
269   v = allocate_value (elt_type);
270   if (VALUE_LAZY (array))
271     VALUE_LAZY (v) = 1;
272   else
273     memcpy (VALUE_CONTENTS (v), VALUE_CONTENTS (array) + elt_offs, elt_size);
274
275   if (VALUE_LVAL (array) == lval_internalvar)
276     VALUE_LVAL (v) = lval_internalvar_component;
277   else
278     VALUE_LVAL (v) = VALUE_LVAL (array);
279   VALUE_ADDRESS (v) = VALUE_ADDRESS (array);
280   VALUE_REGNO (v) = VALUE_REGNO (array);
281   VALUE_OFFSET (v) = VALUE_OFFSET (array) + elt_offs;
282   return v;
283 }
284 \f
285 /* Check to see if either argument is a structure.  This is called so
286    we know whether to go ahead with the normal binop or look for a 
287    user defined function instead.
288
289    For now, we do not overload the `=' operator.  */
290
291 int
292 binop_user_defined_p (enum exp_opcode op, struct value *arg1, struct value *arg2)
293 {
294   struct type *type1, *type2;
295   if (op == BINOP_ASSIGN || op == BINOP_CONCAT)
296     return 0;
297   type1 = check_typedef (VALUE_TYPE (arg1));
298   type2 = check_typedef (VALUE_TYPE (arg2));
299   return (TYPE_CODE (type1) == TYPE_CODE_STRUCT
300           || TYPE_CODE (type2) == TYPE_CODE_STRUCT
301           || (TYPE_CODE (type1) == TYPE_CODE_REF
302               && TYPE_CODE (TYPE_TARGET_TYPE (type1)) == TYPE_CODE_STRUCT)
303           || (TYPE_CODE (type2) == TYPE_CODE_REF
304               && TYPE_CODE (TYPE_TARGET_TYPE (type2)) == TYPE_CODE_STRUCT));
305 }
306
307 /* Check to see if argument is a structure.  This is called so
308    we know whether to go ahead with the normal unop or look for a 
309    user defined function instead.
310
311    For now, we do not overload the `&' operator.  */
312
313 int
314 unop_user_defined_p (enum exp_opcode op, struct value *arg1)
315 {
316   struct type *type1;
317   if (op == UNOP_ADDR)
318     return 0;
319   type1 = check_typedef (VALUE_TYPE (arg1));
320   for (;;)
321     {
322       if (TYPE_CODE (type1) == TYPE_CODE_STRUCT)
323         return 1;
324       else if (TYPE_CODE (type1) == TYPE_CODE_REF)
325         type1 = TYPE_TARGET_TYPE (type1);
326       else
327         return 0;
328     }
329 }
330
331 /* We know either arg1 or arg2 is a structure, so try to find the right
332    user defined function.  Create an argument vector that calls 
333    arg1.operator @ (arg1,arg2) and return that value (where '@' is any
334    binary operator which is legal for GNU C++).
335
336    OP is the operatore, and if it is BINOP_ASSIGN_MODIFY, then OTHEROP
337    is the opcode saying how to modify it.  Otherwise, OTHEROP is
338    unused.  */
339
340 struct value *
341 value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op,
342                enum exp_opcode otherop, enum noside noside)
343 {
344   struct value **argvec;
345   char *ptr;
346   char tstr[13];
347   int static_memfuncp;
348
349   COERCE_REF (arg1);
350   COERCE_REF (arg2);
351   COERCE_ENUM (arg1);
352   COERCE_ENUM (arg2);
353
354   /* now we know that what we have to do is construct our
355      arg vector and find the right function to call it with.  */
356
357   if (TYPE_CODE (check_typedef (VALUE_TYPE (arg1))) != TYPE_CODE_STRUCT)
358     error ("Can't do that binary op on that type");     /* FIXME be explicit */
359
360   argvec = (struct value **) alloca (sizeof (struct value *) * 4);
361   argvec[1] = value_addr (arg1);
362   argvec[2] = arg2;
363   argvec[3] = 0;
364
365   /* make the right function name up */
366   strcpy (tstr, "operator__");
367   ptr = tstr + 8;
368   switch (op)
369     {
370     case BINOP_ADD:
371       strcpy (ptr, "+");
372       break;
373     case BINOP_SUB:
374       strcpy (ptr, "-");
375       break;
376     case BINOP_MUL:
377       strcpy (ptr, "*");
378       break;
379     case BINOP_DIV:
380       strcpy (ptr, "/");
381       break;
382     case BINOP_REM:
383       strcpy (ptr, "%");
384       break;
385     case BINOP_LSH:
386       strcpy (ptr, "<<");
387       break;
388     case BINOP_RSH:
389       strcpy (ptr, ">>");
390       break;
391     case BINOP_BITWISE_AND:
392       strcpy (ptr, "&");
393       break;
394     case BINOP_BITWISE_IOR:
395       strcpy (ptr, "|");
396       break;
397     case BINOP_BITWISE_XOR:
398       strcpy (ptr, "^");
399       break;
400     case BINOP_LOGICAL_AND:
401       strcpy (ptr, "&&");
402       break;
403     case BINOP_LOGICAL_OR:
404       strcpy (ptr, "||");
405       break;
406     case BINOP_MIN:
407       strcpy (ptr, "<?");
408       break;
409     case BINOP_MAX:
410       strcpy (ptr, ">?");
411       break;
412     case BINOP_ASSIGN:
413       strcpy (ptr, "=");
414       break;
415     case BINOP_ASSIGN_MODIFY:
416       switch (otherop)
417         {
418         case BINOP_ADD:
419           strcpy (ptr, "+=");
420           break;
421         case BINOP_SUB:
422           strcpy (ptr, "-=");
423           break;
424         case BINOP_MUL:
425           strcpy (ptr, "*=");
426           break;
427         case BINOP_DIV:
428           strcpy (ptr, "/=");
429           break;
430         case BINOP_REM:
431           strcpy (ptr, "%=");
432           break;
433         case BINOP_BITWISE_AND:
434           strcpy (ptr, "&=");
435           break;
436         case BINOP_BITWISE_IOR:
437           strcpy (ptr, "|=");
438           break;
439         case BINOP_BITWISE_XOR:
440           strcpy (ptr, "^=");
441           break;
442         case BINOP_MOD: /* invalid */
443         default:
444           error ("Invalid binary operation specified.");
445         }
446       break;
447     case BINOP_SUBSCRIPT:
448       strcpy (ptr, "[]");
449       break;
450     case BINOP_EQUAL:
451       strcpy (ptr, "==");
452       break;
453     case BINOP_NOTEQUAL:
454       strcpy (ptr, "!=");
455       break;
456     case BINOP_LESS:
457       strcpy (ptr, "<");
458       break;
459     case BINOP_GTR:
460       strcpy (ptr, ">");
461       break;
462     case BINOP_GEQ:
463       strcpy (ptr, ">=");
464       break;
465     case BINOP_LEQ:
466       strcpy (ptr, "<=");
467       break;
468     case BINOP_MOD:             /* invalid */
469     default:
470       error ("Invalid binary operation specified.");
471     }
472
473   argvec[0] = value_struct_elt (&arg1, argvec + 1, tstr, &static_memfuncp, "structure");
474
475   if (argvec[0])
476     {
477       if (static_memfuncp)
478         {
479           argvec[1] = argvec[0];
480           argvec++;
481         }
482       if (noside == EVAL_AVOID_SIDE_EFFECTS)
483         {
484           struct type *return_type;
485           return_type
486             = TYPE_TARGET_TYPE (check_typedef (VALUE_TYPE (argvec[0])));
487           return value_zero (return_type, VALUE_LVAL (arg1));
488         }
489       return call_function_by_hand (argvec[0], 2 - static_memfuncp, argvec + 1);
490     }
491   error ("member function %s not found", tstr);
492 #ifdef lint
493   return call_function_by_hand (argvec[0], 2 - static_memfuncp, argvec + 1);
494 #endif
495 }
496
497 /* We know that arg1 is a structure, so try to find a unary user
498    defined operator that matches the operator in question.  
499    Create an argument vector that calls arg1.operator @ (arg1)
500    and return that value (where '@' is (almost) any unary operator which
501    is legal for GNU C++).  */
502
503 struct value *
504 value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside)
505 {
506   struct value **argvec;
507   char *ptr, *mangle_ptr;
508   char tstr[13], mangle_tstr[13];
509   int static_memfuncp, nargs;
510
511   COERCE_REF (arg1);
512   COERCE_ENUM (arg1);
513
514   /* now we know that what we have to do is construct our
515      arg vector and find the right function to call it with.  */
516
517   if (TYPE_CODE (check_typedef (VALUE_TYPE (arg1))) != TYPE_CODE_STRUCT)
518     error ("Can't do that unary op on that type");      /* FIXME be explicit */
519
520   argvec = (struct value **) alloca (sizeof (struct value *) * 4);
521   argvec[1] = value_addr (arg1);
522   argvec[2] = 0;
523
524   nargs = 1;
525
526   /* make the right function name up */
527   strcpy (tstr, "operator__");
528   ptr = tstr + 8;
529   strcpy (mangle_tstr, "__");
530   mangle_ptr = mangle_tstr + 2;
531   switch (op)
532     {
533     case UNOP_PREINCREMENT:
534       strcpy (ptr, "++");
535       break;
536     case UNOP_PREDECREMENT:
537       strcpy (ptr, "--");
538       break;
539     case UNOP_POSTINCREMENT:
540       strcpy (ptr, "++");
541       argvec[2] = value_from_longest (builtin_type_int, 0);
542       argvec[3] = 0;
543       nargs ++;
544       break;
545     case UNOP_POSTDECREMENT:
546       strcpy (ptr, "--");
547       argvec[2] = value_from_longest (builtin_type_int, 0);
548       argvec[3] = 0;
549       nargs ++;
550       break;
551     case UNOP_LOGICAL_NOT:
552       strcpy (ptr, "!");
553       break;
554     case UNOP_COMPLEMENT:
555       strcpy (ptr, "~");
556       break;
557     case UNOP_NEG:
558       strcpy (ptr, "-");
559       break;
560     case UNOP_IND:
561       strcpy (ptr, "*");
562       break;
563     default:
564       error ("Invalid unary operation specified.");
565     }
566
567   argvec[0] = value_struct_elt (&arg1, argvec + 1, tstr, &static_memfuncp, "structure");
568
569   if (argvec[0])
570     {
571       if (static_memfuncp)
572         {
573           argvec[1] = argvec[0];
574           nargs --;
575           argvec++;
576         }
577       if (noside == EVAL_AVOID_SIDE_EFFECTS)
578         {
579           struct type *return_type;
580           return_type
581             = TYPE_TARGET_TYPE (check_typedef (VALUE_TYPE (argvec[0])));
582           return value_zero (return_type, VALUE_LVAL (arg1));
583         }
584       return call_function_by_hand (argvec[0], nargs, argvec + 1);
585     }
586   error ("member function %s not found", tstr);
587   return 0;                     /* For lint -- never reached */
588 }
589 \f
590
591 /* Concatenate two values with the following conditions:
592
593    (1)  Both values must be either bitstring values or character string
594    values and the resulting value consists of the concatenation of
595    ARG1 followed by ARG2.
596
597    or
598
599    One value must be an integer value and the other value must be
600    either a bitstring value or character string value, which is
601    to be repeated by the number of times specified by the integer
602    value.
603
604
605    (2)  Boolean values are also allowed and are treated as bit string
606    values of length 1.
607
608    (3)  Character values are also allowed and are treated as character
609    string values of length 1.
610  */
611
612 struct value *
613 value_concat (struct value *arg1, struct value *arg2)
614 {
615   struct value *inval1;
616   struct value *inval2;
617   struct value *outval = NULL;
618   int inval1len, inval2len;
619   int count, idx;
620   char *ptr;
621   char inchar;
622   struct type *type1 = check_typedef (VALUE_TYPE (arg1));
623   struct type *type2 = check_typedef (VALUE_TYPE (arg2));
624
625   COERCE_VARYING_ARRAY (arg1, type1);
626   COERCE_VARYING_ARRAY (arg2, type2);
627
628   /* First figure out if we are dealing with two values to be concatenated
629      or a repeat count and a value to be repeated.  INVAL1 is set to the
630      first of two concatenated values, or the repeat count.  INVAL2 is set
631      to the second of the two concatenated values or the value to be 
632      repeated. */
633
634   if (TYPE_CODE (type2) == TYPE_CODE_INT)
635     {
636       struct type *tmp = type1;
637       type1 = tmp;
638       tmp = type2;
639       inval1 = arg2;
640       inval2 = arg1;
641     }
642   else
643     {
644       inval1 = arg1;
645       inval2 = arg2;
646     }
647
648   /* Now process the input values. */
649
650   if (TYPE_CODE (type1) == TYPE_CODE_INT)
651     {
652       /* We have a repeat count.  Validate the second value and then
653          construct a value repeated that many times. */
654       if (TYPE_CODE (type2) == TYPE_CODE_STRING
655           || TYPE_CODE (type2) == TYPE_CODE_CHAR)
656         {
657           count = longest_to_int (value_as_long (inval1));
658           inval2len = TYPE_LENGTH (type2);
659           ptr = (char *) alloca (count * inval2len);
660           if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
661             {
662               inchar = (char) unpack_long (type2,
663                                            VALUE_CONTENTS (inval2));
664               for (idx = 0; idx < count; idx++)
665                 {
666                   *(ptr + idx) = inchar;
667                 }
668             }
669           else
670             {
671               for (idx = 0; idx < count; idx++)
672                 {
673                   memcpy (ptr + (idx * inval2len), VALUE_CONTENTS (inval2),
674                           inval2len);
675                 }
676             }
677           outval = value_string (ptr, count * inval2len);
678         }
679       else if (TYPE_CODE (type2) == TYPE_CODE_BITSTRING
680                || TYPE_CODE (type2) == TYPE_CODE_BOOL)
681         {
682           error ("unimplemented support for bitstring/boolean repeats");
683         }
684       else
685         {
686           error ("can't repeat values of that type");
687         }
688     }
689   else if (TYPE_CODE (type1) == TYPE_CODE_STRING
690            || TYPE_CODE (type1) == TYPE_CODE_CHAR)
691     {
692       /* We have two character strings to concatenate. */
693       if (TYPE_CODE (type2) != TYPE_CODE_STRING
694           && TYPE_CODE (type2) != TYPE_CODE_CHAR)
695         {
696           error ("Strings can only be concatenated with other strings.");
697         }
698       inval1len = TYPE_LENGTH (type1);
699       inval2len = TYPE_LENGTH (type2);
700       ptr = (char *) alloca (inval1len + inval2len);
701       if (TYPE_CODE (type1) == TYPE_CODE_CHAR)
702         {
703           *ptr = (char) unpack_long (type1, VALUE_CONTENTS (inval1));
704         }
705       else
706         {
707           memcpy (ptr, VALUE_CONTENTS (inval1), inval1len);
708         }
709       if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
710         {
711           *(ptr + inval1len) =
712             (char) unpack_long (type2, VALUE_CONTENTS (inval2));
713         }
714       else
715         {
716           memcpy (ptr + inval1len, VALUE_CONTENTS (inval2), inval2len);
717         }
718       outval = value_string (ptr, inval1len + inval2len);
719     }
720   else if (TYPE_CODE (type1) == TYPE_CODE_BITSTRING
721            || TYPE_CODE (type1) == TYPE_CODE_BOOL)
722     {
723       /* We have two bitstrings to concatenate. */
724       if (TYPE_CODE (type2) != TYPE_CODE_BITSTRING
725           && TYPE_CODE (type2) != TYPE_CODE_BOOL)
726         {
727           error ("Bitstrings or booleans can only be concatenated with other bitstrings or booleans.");
728         }
729       error ("unimplemented support for bitstring/boolean concatenation.");
730     }
731   else
732     {
733       /* We don't know how to concatenate these operands. */
734       error ("illegal operands for concatenation.");
735     }
736   return (outval);
737 }
738 \f
739
740
741 /* Perform a binary operation on two operands which have reasonable
742    representations as integers or floats.  This includes booleans,
743    characters, integers, or floats.
744    Does not support addition and subtraction on pointers;
745    use value_add or value_sub if you want to handle those possibilities.  */
746
747 struct value *
748 value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
749 {
750   struct value *val;
751   struct type *type1, *type2;
752
753   COERCE_REF (arg1);
754   COERCE_REF (arg2);
755   COERCE_ENUM (arg1);
756   COERCE_ENUM (arg2);
757   type1 = check_typedef (VALUE_TYPE (arg1));
758   type2 = check_typedef (VALUE_TYPE (arg2));
759
760   if ((TYPE_CODE (type1) != TYPE_CODE_FLT
761        && TYPE_CODE (type1) != TYPE_CODE_CHAR
762        && TYPE_CODE (type1) != TYPE_CODE_INT
763        && TYPE_CODE (type1) != TYPE_CODE_BOOL
764        && TYPE_CODE (type1) != TYPE_CODE_RANGE)
765       ||
766       (TYPE_CODE (type2) != TYPE_CODE_FLT
767        && TYPE_CODE (type2) != TYPE_CODE_CHAR
768        && TYPE_CODE (type2) != TYPE_CODE_INT
769        && TYPE_CODE (type2) != TYPE_CODE_BOOL
770        && TYPE_CODE (type2) != TYPE_CODE_RANGE))
771     error ("Argument to arithmetic operation not a number or boolean.");
772
773   if (TYPE_CODE (type1) == TYPE_CODE_FLT
774       ||
775       TYPE_CODE (type2) == TYPE_CODE_FLT)
776     {
777       /* FIXME-if-picky-about-floating-accuracy: Should be doing this
778          in target format.  real.c in GCC probably has the necessary
779          code.  */
780       DOUBLEST v1, v2, v = 0;
781       v1 = value_as_double (arg1);
782       v2 = value_as_double (arg2);
783       switch (op)
784         {
785         case BINOP_ADD:
786           v = v1 + v2;
787           break;
788
789         case BINOP_SUB:
790           v = v1 - v2;
791           break;
792
793         case BINOP_MUL:
794           v = v1 * v2;
795           break;
796
797         case BINOP_DIV:
798           v = v1 / v2;
799           break;
800
801         case BINOP_EXP:
802           v = pow (v1, v2);
803           if (errno)
804             error ("Cannot perform exponentiation: %s", safe_strerror (errno));
805           break;
806
807         default:
808           error ("Integer-only operation on floating point number.");
809         }
810
811       /* If either arg was long double, make sure that value is also long
812          double.  */
813
814       if (TYPE_LENGTH (type1) * 8 > TARGET_DOUBLE_BIT
815           || TYPE_LENGTH (type2) * 8 > TARGET_DOUBLE_BIT)
816         val = allocate_value (builtin_type_long_double);
817       else
818         val = allocate_value (builtin_type_double);
819
820       store_typed_floating (VALUE_CONTENTS_RAW (val), VALUE_TYPE (val), v);
821     }
822   else if (TYPE_CODE (type1) == TYPE_CODE_BOOL
823            &&
824            TYPE_CODE (type2) == TYPE_CODE_BOOL)
825     {
826       LONGEST v1, v2, v = 0;
827       v1 = value_as_long (arg1);
828       v2 = value_as_long (arg2);
829
830       switch (op)
831         {
832         case BINOP_BITWISE_AND:
833           v = v1 & v2;
834           break;
835
836         case BINOP_BITWISE_IOR:
837           v = v1 | v2;
838           break;
839
840         case BINOP_BITWISE_XOR:
841           v = v1 ^ v2;
842           break;
843               
844         case BINOP_EQUAL:
845           v = v1 == v2;
846           break;
847           
848         case BINOP_NOTEQUAL:
849           v = v1 != v2;
850           break;
851
852         default:
853           error ("Invalid operation on booleans.");
854         }
855
856       val = allocate_value (type1);
857       store_signed_integer (VALUE_CONTENTS_RAW (val),
858                             TYPE_LENGTH (type1),
859                             v);
860     }
861   else
862     /* Integral operations here.  */
863     /* FIXME:  Also mixed integral/booleans, with result an integer. */
864     /* FIXME: This implements ANSI C rules (also correct for C++).
865        What about FORTRAN and (the deleted) chill ?  */
866     {
867       unsigned int promoted_len1 = TYPE_LENGTH (type1);
868       unsigned int promoted_len2 = TYPE_LENGTH (type2);
869       int is_unsigned1 = TYPE_UNSIGNED (type1);
870       int is_unsigned2 = TYPE_UNSIGNED (type2);
871       unsigned int result_len;
872       int unsigned_operation;
873
874       /* Determine type length and signedness after promotion for
875          both operands.  */
876       if (promoted_len1 < TYPE_LENGTH (builtin_type_int))
877         {
878           is_unsigned1 = 0;
879           promoted_len1 = TYPE_LENGTH (builtin_type_int);
880         }
881       if (promoted_len2 < TYPE_LENGTH (builtin_type_int))
882         {
883           is_unsigned2 = 0;
884           promoted_len2 = TYPE_LENGTH (builtin_type_int);
885         }
886
887       /* Determine type length of the result, and if the operation should
888          be done unsigned.
889          Use the signedness of the operand with the greater length.
890          If both operands are of equal length, use unsigned operation
891          if one of the operands is unsigned.  */
892       if (promoted_len1 > promoted_len2)
893         {
894           unsigned_operation = is_unsigned1;
895           result_len = promoted_len1;
896         }
897       else if (promoted_len2 > promoted_len1)
898         {
899           unsigned_operation = is_unsigned2;
900           result_len = promoted_len2;
901         }
902       else
903         {
904           unsigned_operation = is_unsigned1 || is_unsigned2;
905           result_len = promoted_len1;
906         }
907
908       if (unsigned_operation)
909         {
910           ULONGEST v1, v2, v = 0;
911           v1 = (ULONGEST) value_as_long (arg1);
912           v2 = (ULONGEST) value_as_long (arg2);
913
914           /* Truncate values to the type length of the result.  */
915           if (result_len < sizeof (ULONGEST))
916             {
917               v1 &= ((LONGEST) 1 << HOST_CHAR_BIT * result_len) - 1;
918               v2 &= ((LONGEST) 1 << HOST_CHAR_BIT * result_len) - 1;
919             }
920
921           switch (op)
922             {
923             case BINOP_ADD:
924               v = v1 + v2;
925               break;
926
927             case BINOP_SUB:
928               v = v1 - v2;
929               break;
930
931             case BINOP_MUL:
932               v = v1 * v2;
933               break;
934
935             case BINOP_DIV:
936               v = v1 / v2;
937               break;
938
939             case BINOP_EXP:
940               v = pow (v1, v2);
941               if (errno)
942                 error ("Cannot perform exponentiation: %s", safe_strerror (errno));
943               break;
944
945             case BINOP_REM:
946               v = v1 % v2;
947               break;
948
949             case BINOP_MOD:
950               /* Knuth 1.2.4, integer only.  Note that unlike the C '%' op,
951                  v1 mod 0 has a defined value, v1. */
952               if (v2 == 0)
953                 {
954                   v = v1;
955                 }
956               else
957                 {
958                   v = v1 / v2;
959                   /* Note floor(v1/v2) == v1/v2 for unsigned. */
960                   v = v1 - (v2 * v);
961                 }
962               break;
963
964             case BINOP_LSH:
965               v = v1 << v2;
966               break;
967
968             case BINOP_RSH:
969               v = v1 >> v2;
970               break;
971
972             case BINOP_BITWISE_AND:
973               v = v1 & v2;
974               break;
975
976             case BINOP_BITWISE_IOR:
977               v = v1 | v2;
978               break;
979
980             case BINOP_BITWISE_XOR:
981               v = v1 ^ v2;
982               break;
983
984             case BINOP_LOGICAL_AND:
985               v = v1 && v2;
986               break;
987
988             case BINOP_LOGICAL_OR:
989               v = v1 || v2;
990               break;
991
992             case BINOP_MIN:
993               v = v1 < v2 ? v1 : v2;
994               break;
995
996             case BINOP_MAX:
997               v = v1 > v2 ? v1 : v2;
998               break;
999
1000             case BINOP_EQUAL:
1001               v = v1 == v2;
1002               break;
1003
1004             case BINOP_NOTEQUAL:
1005               v = v1 != v2;
1006               break;
1007
1008             case BINOP_LESS:
1009               v = v1 < v2;
1010               break;
1011
1012             default:
1013               error ("Invalid binary operation on numbers.");
1014             }
1015
1016           /* This is a kludge to get around the fact that we don't
1017              know how to determine the result type from the types of
1018              the operands.  (I'm not really sure how much we feel the
1019              need to duplicate the exact rules of the current
1020              language.  They can get really hairy.  But not to do so
1021              makes it hard to document just what we *do* do).  */
1022
1023           /* Can't just call init_type because we wouldn't know what
1024              name to give the type.  */
1025           val = allocate_value
1026             (result_len > TARGET_LONG_BIT / HOST_CHAR_BIT
1027              ? builtin_type_unsigned_long_long
1028              : builtin_type_unsigned_long);
1029           store_unsigned_integer (VALUE_CONTENTS_RAW (val),
1030                                   TYPE_LENGTH (VALUE_TYPE (val)),
1031                                   v);
1032         }
1033       else
1034         {
1035           LONGEST v1, v2, v = 0;
1036           v1 = value_as_long (arg1);
1037           v2 = value_as_long (arg2);
1038
1039           switch (op)
1040             {
1041             case BINOP_ADD:
1042               v = v1 + v2;
1043               break;
1044
1045             case BINOP_SUB:
1046               v = v1 - v2;
1047               break;
1048
1049             case BINOP_MUL:
1050               v = v1 * v2;
1051               break;
1052
1053             case BINOP_DIV:
1054               v = v1 / v2;
1055               break;
1056
1057             case BINOP_EXP:
1058               v = pow (v1, v2);
1059               if (errno)
1060                 error ("Cannot perform exponentiation: %s", safe_strerror (errno));
1061               break;
1062
1063             case BINOP_REM:
1064               v = v1 % v2;
1065               break;
1066
1067             case BINOP_MOD:
1068               /* Knuth 1.2.4, integer only.  Note that unlike the C '%' op,
1069                  X mod 0 has a defined value, X. */
1070               if (v2 == 0)
1071                 {
1072                   v = v1;
1073                 }
1074               else
1075                 {
1076                   v = v1 / v2;
1077                   /* Compute floor. */
1078                   if (TRUNCATION_TOWARDS_ZERO && (v < 0) && ((v1 % v2) != 0))
1079                     {
1080                       v--;
1081                     }
1082                   v = v1 - (v2 * v);
1083                 }
1084               break;
1085
1086             case BINOP_LSH:
1087               v = v1 << v2;
1088               break;
1089
1090             case BINOP_RSH:
1091               v = v1 >> v2;
1092               break;
1093
1094             case BINOP_BITWISE_AND:
1095               v = v1 & v2;
1096               break;
1097
1098             case BINOP_BITWISE_IOR:
1099               v = v1 | v2;
1100               break;
1101
1102             case BINOP_BITWISE_XOR:
1103               v = v1 ^ v2;
1104               break;
1105
1106             case BINOP_LOGICAL_AND:
1107               v = v1 && v2;
1108               break;
1109
1110             case BINOP_LOGICAL_OR:
1111               v = v1 || v2;
1112               break;
1113
1114             case BINOP_MIN:
1115               v = v1 < v2 ? v1 : v2;
1116               break;
1117
1118             case BINOP_MAX:
1119               v = v1 > v2 ? v1 : v2;
1120               break;
1121
1122             case BINOP_EQUAL:
1123               v = v1 == v2;
1124               break;
1125
1126             case BINOP_LESS:
1127               v = v1 < v2;
1128               break;
1129
1130             default:
1131               error ("Invalid binary operation on numbers.");
1132             }
1133
1134           /* This is a kludge to get around the fact that we don't
1135              know how to determine the result type from the types of
1136              the operands.  (I'm not really sure how much we feel the
1137              need to duplicate the exact rules of the current
1138              language.  They can get really hairy.  But not to do so
1139              makes it hard to document just what we *do* do).  */
1140
1141           /* Can't just call init_type because we wouldn't know what
1142              name to give the type.  */
1143           val = allocate_value
1144             (result_len > TARGET_LONG_BIT / HOST_CHAR_BIT
1145              ? builtin_type_long_long
1146              : builtin_type_long);
1147           store_signed_integer (VALUE_CONTENTS_RAW (val),
1148                                 TYPE_LENGTH (VALUE_TYPE (val)),
1149                                 v);
1150         }
1151     }
1152
1153   return val;
1154 }
1155 \f
1156 /* Simulate the C operator ! -- return 1 if ARG1 contains zero.  */
1157
1158 int
1159 value_logical_not (struct value *arg1)
1160 {
1161   int len;
1162   char *p;
1163   struct type *type1;
1164
1165   COERCE_NUMBER (arg1);
1166   type1 = check_typedef (VALUE_TYPE (arg1));
1167
1168   if (TYPE_CODE (type1) == TYPE_CODE_FLT)
1169     return 0 == value_as_double (arg1);
1170
1171   len = TYPE_LENGTH (type1);
1172   p = VALUE_CONTENTS (arg1);
1173
1174   while (--len >= 0)
1175     {
1176       if (*p++)
1177         break;
1178     }
1179
1180   return len < 0;
1181 }
1182
1183 /* Perform a comparison on two string values (whose content are not
1184    necessarily null terminated) based on their length */
1185
1186 static int
1187 value_strcmp (struct value *arg1, struct value *arg2)
1188 {
1189   int len1 = TYPE_LENGTH (VALUE_TYPE (arg1));
1190   int len2 = TYPE_LENGTH (VALUE_TYPE (arg2));
1191   char *s1 = VALUE_CONTENTS (arg1);
1192   char *s2 = VALUE_CONTENTS (arg2);
1193   int i, len = len1 < len2 ? len1 : len2;
1194
1195   for (i = 0; i < len; i++)
1196     {
1197       if (s1[i] < s2[i])
1198         return -1;
1199       else if (s1[i] > s2[i])
1200         return 1;
1201       else
1202         continue;
1203     }
1204
1205   if (len1 < len2)
1206     return -1;
1207   else if (len1 > len2)
1208     return 1;
1209   else
1210     return 0;
1211 }
1212
1213 /* Simulate the C operator == by returning a 1
1214    iff ARG1 and ARG2 have equal contents.  */
1215
1216 int
1217 value_equal (struct value *arg1, struct value *arg2)
1218 {
1219   int len;
1220   char *p1, *p2;
1221   struct type *type1, *type2;
1222   enum type_code code1;
1223   enum type_code code2;
1224
1225   COERCE_NUMBER (arg1);
1226   COERCE_NUMBER (arg2);
1227
1228   type1 = check_typedef (VALUE_TYPE (arg1));
1229   type2 = check_typedef (VALUE_TYPE (arg2));
1230   code1 = TYPE_CODE (type1);
1231   code2 = TYPE_CODE (type2);
1232
1233   if ((code1 == TYPE_CODE_INT || code1 == TYPE_CODE_BOOL) &&
1234       (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL))
1235     return longest_to_int (value_as_long (value_binop (arg1, arg2,
1236                                                        BINOP_EQUAL)));
1237   else if ((code1 == TYPE_CODE_FLT || code1 == TYPE_CODE_INT || code1 == TYPE_CODE_BOOL)
1238            && (code2 == TYPE_CODE_FLT || code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL))
1239     return value_as_double (arg1) == value_as_double (arg2);
1240
1241   /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1242      is bigger.  */
1243   else if (code1 == TYPE_CODE_PTR && (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL))
1244     return value_as_address (arg1) == (CORE_ADDR) value_as_long (arg2);
1245   else if (code2 == TYPE_CODE_PTR && (code1 == TYPE_CODE_INT || code1 == TYPE_CODE_BOOL))
1246     return (CORE_ADDR) value_as_long (arg1) == value_as_address (arg2);
1247
1248   else if (code1 == code2
1249            && ((len = (int) TYPE_LENGTH (type1))
1250                == (int) TYPE_LENGTH (type2)))
1251     {
1252       p1 = VALUE_CONTENTS (arg1);
1253       p2 = VALUE_CONTENTS (arg2);
1254       while (--len >= 0)
1255         {
1256           if (*p1++ != *p2++)
1257             break;
1258         }
1259       return len < 0;
1260     }
1261   else if (code1 == TYPE_CODE_STRING && code2 == TYPE_CODE_STRING)
1262     {
1263       return value_strcmp (arg1, arg2) == 0;
1264     }
1265   else
1266     {
1267       error ("Invalid type combination in equality test.");
1268       return 0;                 /* For lint -- never reached */
1269     }
1270 }
1271
1272 /* Simulate the C operator < by returning 1
1273    iff ARG1's contents are less than ARG2's.  */
1274
1275 int
1276 value_less (struct value *arg1, struct value *arg2)
1277 {
1278   enum type_code code1;
1279   enum type_code code2;
1280   struct type *type1, *type2;
1281
1282   COERCE_NUMBER (arg1);
1283   COERCE_NUMBER (arg2);
1284
1285   type1 = check_typedef (VALUE_TYPE (arg1));
1286   type2 = check_typedef (VALUE_TYPE (arg2));
1287   code1 = TYPE_CODE (type1);
1288   code2 = TYPE_CODE (type2);
1289
1290   if ((code1 == TYPE_CODE_INT || code1 == TYPE_CODE_BOOL) &&
1291       (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL))
1292     return longest_to_int (value_as_long (value_binop (arg1, arg2,
1293                                                        BINOP_LESS)));
1294   else if ((code1 == TYPE_CODE_FLT || code1 == TYPE_CODE_INT || code1 == TYPE_CODE_BOOL)
1295            && (code2 == TYPE_CODE_FLT || code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL))
1296     return value_as_double (arg1) < value_as_double (arg2);
1297   else if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
1298     return value_as_address (arg1) < value_as_address (arg2);
1299
1300   /* FIXME: Need to promote to either CORE_ADDR or LONGEST, whichever
1301      is bigger.  */
1302   else if (code1 == TYPE_CODE_PTR && (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL))
1303     return value_as_address (arg1) < (CORE_ADDR) value_as_long (arg2);
1304   else if (code2 == TYPE_CODE_PTR && (code1 == TYPE_CODE_INT || code1 == TYPE_CODE_BOOL))
1305     return (CORE_ADDR) value_as_long (arg1) < value_as_address (arg2);
1306   else if (code1 == TYPE_CODE_STRING && code2 == TYPE_CODE_STRING)
1307     return value_strcmp (arg1, arg2) < 0;
1308   else
1309     {
1310       error ("Invalid type combination in ordering comparison.");
1311       return 0;
1312     }
1313 }
1314 \f
1315 /* The unary operators - and ~.  Both free the argument ARG1.  */
1316
1317 struct value *
1318 value_neg (struct value *arg1)
1319 {
1320   struct type *type;
1321   struct type *result_type = VALUE_TYPE (arg1);
1322
1323   COERCE_REF (arg1);
1324   COERCE_ENUM (arg1);
1325
1326   type = check_typedef (VALUE_TYPE (arg1));
1327
1328   if (TYPE_CODE (type) == TYPE_CODE_FLT)
1329     return value_from_double (result_type, -value_as_double (arg1));
1330   else if (TYPE_CODE (type) == TYPE_CODE_INT || TYPE_CODE (type) == TYPE_CODE_BOOL)
1331     {
1332       /* Perform integral promotion for ANSI C/C++.  FIXME: What about
1333          FORTRAN and (the deleted) chill ?  */
1334       if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_int))
1335         result_type = builtin_type_int;
1336
1337       return value_from_longest (result_type, -value_as_long (arg1));
1338     }
1339   else
1340     {
1341       error ("Argument to negate operation not a number.");
1342       return 0;                 /* For lint -- never reached */
1343     }
1344 }
1345
1346 struct value *
1347 value_complement (struct value *arg1)
1348 {
1349   struct type *type;
1350   struct type *result_type = VALUE_TYPE (arg1);
1351   int typecode;
1352
1353   COERCE_REF (arg1);
1354   COERCE_ENUM (arg1);
1355
1356   type = check_typedef (VALUE_TYPE (arg1));
1357
1358   typecode = TYPE_CODE (type);
1359   if ((typecode != TYPE_CODE_INT) && (typecode != TYPE_CODE_BOOL))
1360     error ("Argument to complement operation not an integer or boolean.");
1361
1362   /* Perform integral promotion for ANSI C/C++.
1363      FIXME: What about FORTRAN ?  */
1364   if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_int))
1365     result_type = builtin_type_int;
1366
1367   return value_from_longest (result_type, ~value_as_long (arg1));
1368 }
1369 \f
1370 /* The INDEX'th bit of SET value whose VALUE_TYPE is TYPE,
1371    and whose VALUE_CONTENTS is valaddr.
1372    Return -1 if out of range, -2 other error. */
1373
1374 int
1375 value_bit_index (struct type *type, char *valaddr, int index)
1376 {
1377   LONGEST low_bound, high_bound;
1378   LONGEST word;
1379   unsigned rel_index;
1380   struct type *range = TYPE_FIELD_TYPE (type, 0);
1381   if (get_discrete_bounds (range, &low_bound, &high_bound) < 0)
1382     return -2;
1383   if (index < low_bound || index > high_bound)
1384     return -1;
1385   rel_index = index - low_bound;
1386   word = unpack_long (builtin_type_unsigned_char,
1387                       valaddr + (rel_index / TARGET_CHAR_BIT));
1388   rel_index %= TARGET_CHAR_BIT;
1389   if (BITS_BIG_ENDIAN)
1390     rel_index = TARGET_CHAR_BIT - 1 - rel_index;
1391   return (word >> rel_index) & 1;
1392 }
1393
1394 struct value *
1395 value_in (struct value *element, struct value *set)
1396 {
1397   int member;
1398   struct type *settype = check_typedef (VALUE_TYPE (set));
1399   struct type *eltype = check_typedef (VALUE_TYPE (element));
1400   if (TYPE_CODE (eltype) == TYPE_CODE_RANGE)
1401     eltype = TYPE_TARGET_TYPE (eltype);
1402   if (TYPE_CODE (settype) != TYPE_CODE_SET)
1403     error ("Second argument of 'IN' has wrong type");
1404   if (TYPE_CODE (eltype) != TYPE_CODE_INT
1405       && TYPE_CODE (eltype) != TYPE_CODE_CHAR
1406       && TYPE_CODE (eltype) != TYPE_CODE_ENUM
1407       && TYPE_CODE (eltype) != TYPE_CODE_BOOL)
1408     error ("First argument of 'IN' has wrong type");
1409   member = value_bit_index (settype, VALUE_CONTENTS (set),
1410                             value_as_long (element));
1411   if (member < 0)
1412     error ("First argument of 'IN' not in range");
1413   return value_from_longest (LA_BOOL_TYPE, member);
1414 }
1415
1416 void
1417 _initialize_valarith (void)
1418 {
1419 }