* utils.c (query): Change syntax of query annotations to be
[deliverable/binutils-gdb.git] / gdb / eval.c
CommitLineData
bd5635a1 1/* Evaluate expressions for GDB.
e17960fb 2 Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
bd5635a1
RP
3
4This file is part of GDB.
5
2ccb3837 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
2ccb3837
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
2ccb3837 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
2ccb3837
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1
RP
19
20#include "defs.h"
bd5635a1 21#include "symtab.h"
01be6913 22#include "gdbtypes.h"
bd5635a1
RP
23#include "value.h"
24#include "expression.h"
25#include "target.h"
2ccb3837 26#include "frame.h"
40620258 27#include "demangle.h"
fb6e675f 28#include "language.h" /* For CAST_IS_CONVERSION */
bd5635a1 29
01be6913
PB
30/* Values of NOSIDE argument to eval_subexp. */
31enum noside
32{ EVAL_NORMAL,
33 EVAL_SKIP, /* Only effect is to increment pos. */
34 EVAL_AVOID_SIDE_EFFECTS /* Don't modify any variables or
35 call any functions. The value
36 returned will have the correct
37 type, and will have an
38 approximately correct lvalue
39 type (inaccuracy: anything that is
40 listed as being in a register in
41 the function in which it was
42 declared will be lval_register). */
43};
44
45/* Prototypes for local functions. */
46
47static value
48evaluate_subexp_for_sizeof PARAMS ((struct expression *, int *));
49
50static value
51evaluate_subexp_with_coercion PARAMS ((struct expression *, int *,
52 enum noside));
53
54static value
55evaluate_subexp_for_address PARAMS ((struct expression *, int *,
56 enum noside));
57
58static value
59evaluate_subexp PARAMS ((struct type *, struct expression *, int *,
60 enum noside));
bd5635a1
RP
61
62\f
63/* Parse the string EXP as a C expression, evaluate it,
64 and return the result as a number. */
65
66CORE_ADDR
67parse_and_eval_address (exp)
68 char *exp;
69{
2ccb3837 70 struct expression *expr = parse_expression (exp);
bd5635a1 71 register CORE_ADDR addr;
01be6913
PB
72 register struct cleanup *old_chain =
73 make_cleanup (free_current_contents, &expr);
bd5635a1 74
2ccb3837 75 addr = value_as_pointer (evaluate_expression (expr));
bd5635a1
RP
76 do_cleanups (old_chain);
77 return addr;
78}
79
80/* Like parse_and_eval_address but takes a pointer to a char * variable
81 and advanced that variable across the characters parsed. */
82
83CORE_ADDR
84parse_and_eval_address_1 (expptr)
85 char **expptr;
86{
2ccb3837 87 struct expression *expr = parse_exp_1 (expptr, (struct block *)0, 0);
bd5635a1 88 register CORE_ADDR addr;
01be6913
PB
89 register struct cleanup *old_chain =
90 make_cleanup (free_current_contents, &expr);
bd5635a1 91
2ccb3837 92 addr = value_as_pointer (evaluate_expression (expr));
bd5635a1
RP
93 do_cleanups (old_chain);
94 return addr;
95}
96
97value
98parse_and_eval (exp)
99 char *exp;
100{
2ccb3837 101 struct expression *expr = parse_expression (exp);
bd5635a1
RP
102 register value val;
103 register struct cleanup *old_chain
104 = make_cleanup (free_current_contents, &expr);
105
106 val = evaluate_expression (expr);
107 do_cleanups (old_chain);
108 return val;
109}
110
111/* Parse up to a comma (or to a closeparen)
112 in the string EXPP as an expression, evaluate it, and return the value.
113 EXPP is advanced to point to the comma. */
114
115value
116parse_to_comma_and_eval (expp)
117 char **expp;
118{
2ccb3837 119 struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
bd5635a1
RP
120 register value val;
121 register struct cleanup *old_chain
122 = make_cleanup (free_current_contents, &expr);
123
124 val = evaluate_expression (expr);
125 do_cleanups (old_chain);
126 return val;
127}
128\f
129/* Evaluate an expression in internal prefix form
0a5d35ed 130 such as is constructed by parse.y.
bd5635a1
RP
131
132 See expression.h for info on the format of an expression. */
133
134static value evaluate_subexp ();
135static value evaluate_subexp_for_address ();
136static value evaluate_subexp_for_sizeof ();
137static value evaluate_subexp_with_coercion ();
138
bd5635a1
RP
139value
140evaluate_expression (exp)
141 struct expression *exp;
142{
143 int pc = 0;
144 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL);
145}
146
147/* Evaluate an expression, avoiding all memory references
148 and getting a value whose type alone is correct. */
149
150value
151evaluate_type (exp)
152 struct expression *exp;
153{
154 int pc = 0;
155 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS);
156}
157
158static value
159evaluate_subexp (expect_type, exp, pos, noside)
160 struct type *expect_type;
161 register struct expression *exp;
162 register int *pos;
163 enum noside noside;
164{
165 enum exp_opcode op;
1500864f 166 int tem, tem2, tem3;
40620258
KH
167 register int pc, pc2 = 0, oldpos;
168 register value arg1 = NULL, arg2 = NULL, arg3;
01be6913 169 struct type *type;
bd5635a1
RP
170 int nargs;
171 value *argvec;
172
173 pc = (*pos)++;
174 op = exp->elts[pc].opcode;
175
176 switch (op)
177 {
178 case OP_SCOPE:
a8a69e63 179 tem = longest_to_int (exp->elts[pc + 2].longconst);
1500864f 180 (*pos) += 4 + BYTES_TO_EXP_ELEM (tem + 1);
01be6913 181 arg1 = value_struct_elt_for_reference (exp->elts[pc + 1].type,
8f86a4e4 182 0,
01be6913 183 exp->elts[pc + 1].type,
a8a69e63 184 &exp->elts[pc + 3].string,
01be6913 185 expect_type);
5f00ca54 186 if (arg1 == NULL)
a8a69e63 187 error ("There is no field named %s", &exp->elts[pc + 3].string);
5f00ca54 188 return arg1;
bd5635a1
RP
189
190 case OP_LONG:
191 (*pos) += 3;
2ccb3837 192 return value_from_longest (exp->elts[pc + 1].type,
a8a69e63 193 exp->elts[pc + 2].longconst);
bd5635a1
RP
194
195 case OP_DOUBLE:
196 (*pos) += 3;
197 return value_from_double (exp->elts[pc + 1].type,
198 exp->elts[pc + 2].doubleconst);
199
200 case OP_VAR_VALUE:
479fdd26 201 (*pos) += 3;
bd5635a1
RP
202 if (noside == EVAL_SKIP)
203 goto nosideret;
204 if (noside == EVAL_AVOID_SIDE_EFFECTS)
205 {
40620258 206 struct symbol * sym = exp->elts[pc + 2].symbol;
bd5635a1
RP
207 enum lval_type lv;
208
209 switch (SYMBOL_CLASS (sym))
210 {
211 case LOC_CONST:
212 case LOC_LABEL:
213 case LOC_CONST_BYTES:
214 lv = not_lval;
215 break;
216
217 case LOC_REGISTER:
218 case LOC_REGPARM:
219 lv = lval_register;
220 break;
221
222 default:
223 lv = lval_memory;
224 break;
225 }
226
227 return value_zero (SYMBOL_TYPE (sym), lv);
228 }
229 else
479fdd26
JK
230 return value_of_variable (exp->elts[pc + 2].symbol,
231 exp->elts[pc + 1].block);
bd5635a1
RP
232
233 case OP_LAST:
234 (*pos) += 2;
2ccb3837
JG
235 return
236 access_value_history (longest_to_int (exp->elts[pc + 1].longconst));
bd5635a1
RP
237
238 case OP_REGISTER:
239 (*pos) += 2;
2ccb3837 240 return value_of_register (longest_to_int (exp->elts[pc + 1].longconst));
bd5635a1 241
e58de8a2
FF
242 case OP_BOOL:
243 (*pos) += 2;
244 return value_from_longest (builtin_type_chill_bool,
245 exp->elts[pc + 1].longconst);
246
bd5635a1
RP
247 case OP_INTERNALVAR:
248 (*pos) += 2;
249 return value_of_internalvar (exp->elts[pc + 1].internalvar);
250
251 case OP_STRING:
a8a69e63 252 tem = longest_to_int (exp->elts[pc + 1].longconst);
1500864f 253 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1
RP
254 if (noside == EVAL_SKIP)
255 goto nosideret;
a8a69e63 256 return value_string (&exp->elts[pc + 2].string, tem);
bd5635a1 257
1500864f
JK
258 case OP_BITSTRING:
259 error ("support for OP_BITSTRING unimplemented");
260 break;
261
262 case OP_ARRAY:
263 (*pos) += 3;
264 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
265 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
266 nargs = tem3 - tem2 + 1;
267 argvec = (value *) alloca (sizeof (value) * nargs);
268 for (tem = 0; tem < nargs; tem++)
269 {
270 /* Ensure that array expressions are coerced into pointer objects. */
271 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
272 }
273 if (noside == EVAL_SKIP)
274 goto nosideret;
275 return (value_array (tem2, tem3, argvec));
276 break;
277
bd5635a1
RP
278 case TERNOP_COND:
279 /* Skip third and second args to evaluate the first one. */
280 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
e58de8a2 281 if (value_logical_not (arg1))
bd5635a1
RP
282 {
283 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
284 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
285 }
286 else
287 {
288 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
289 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
290 return arg2;
291 }
292
293 case OP_FUNCALL:
294 (*pos) += 2;
295 op = exp->elts[*pos].opcode;
296 if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
297 {
298 int fnptr;
299
2ccb3837 300 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
bd5635a1
RP
301 /* First, evaluate the structure into arg2 */
302 pc2 = (*pos)++;
303
304 if (noside == EVAL_SKIP)
305 goto nosideret;
306
307 if (op == STRUCTOP_MEMBER)
308 {
309 arg2 = evaluate_subexp_for_address (exp, pos, noside);
310 }
311 else
312 {
313 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
314 }
315
316 /* If the function is a virtual function, then the
317 aggregate value (providing the structure) plays
318 its part by providing the vtable. Otherwise,
319 it is just along for the ride: call the function
320 directly. */
321
322 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
323
2ccb3837 324 fnptr = longest_to_int (value_as_long (arg1));
35fcebce
PB
325
326 if (METHOD_PTR_IS_VIRTUAL(fnptr))
bd5635a1 327 {
35fcebce 328 int fnoffset = METHOD_PTR_TO_VOFFSET(fnptr);
bd5635a1 329 struct type *basetype;
35fcebce
PB
330 struct type *domain_type =
331 TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)));
bd5635a1
RP
332 int i, j;
333 basetype = TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
35fcebce
PB
334 if (domain_type != basetype)
335 arg2 = value_cast(lookup_pointer_type (domain_type), arg2);
336 basetype = TYPE_VPTR_BASETYPE (domain_type);
bd5635a1
RP
337 for (i = TYPE_NFN_FIELDS (basetype) - 1; i >= 0; i--)
338 {
339 struct fn_field *f = TYPE_FN_FIELDLIST1 (basetype, i);
340 /* If one is virtual, then all are virtual. */
341 if (TYPE_FN_FIELD_VIRTUAL_P (f, 0))
342 for (j = TYPE_FN_FIELDLIST_LENGTH (basetype, i) - 1; j >= 0; --j)
35fcebce 343 if (TYPE_FN_FIELD_VOFFSET (f, j) == fnoffset)
bd5635a1 344 {
35fcebce
PB
345 value temp = value_ind (arg2);
346 arg1 = value_virtual_fn_field (&temp, f, j, domain_type, 0);
347 arg2 = value_addr (temp);
bd5635a1
RP
348 goto got_it;
349 }
350 }
351 if (i < 0)
35fcebce 352 error ("virtual function at index %d not found", fnoffset);
bd5635a1
RP
353 }
354 else
355 {
356 VALUE_TYPE (arg1) = lookup_pointer_type (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)));
357 }
358 got_it:
359
360 /* Now, say which argument to start evaluating from */
361 tem = 2;
362 }
363 else if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
364 {
365 /* Hair for method invocations */
366 int tem2;
367
2ccb3837 368 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
bd5635a1
RP
369 /* First, evaluate the structure into arg2 */
370 pc2 = (*pos)++;
a8a69e63 371 tem2 = longest_to_int (exp->elts[pc2 + 1].longconst);
1500864f 372 *pos += 3 + BYTES_TO_EXP_ELEM (tem2 + 1);
bd5635a1
RP
373 if (noside == EVAL_SKIP)
374 goto nosideret;
375
376 if (op == STRUCTOP_STRUCT)
377 {
479fdd26
JK
378 /* If v is a variable in a register, and the user types
379 v.method (), this will produce an error, because v has
380 no address.
381
382 A possible way around this would be to allocate a
383 copy of the variable on the stack, copy in the
384 contents, call the function, and copy out the
385 contents. I.e. convert this from call by reference
386 to call by copy-return (or whatever it's called).
387 However, this does not work because it is not the
388 same: the method being called could stash a copy of
389 the address, and then future uses through that address
390 (after the method returns) would be expected to
391 use the variable itself, not some copy of it. */
bd5635a1
RP
392 arg2 = evaluate_subexp_for_address (exp, pos, noside);
393 }
394 else
395 {
396 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
397 }
398 /* Now, say which argument to start evaluating from */
399 tem = 2;
400 }
401 else
402 {
2ccb3837 403 nargs = longest_to_int (exp->elts[pc + 1].longconst);
bd5635a1
RP
404 tem = 0;
405 }
1500864f
JK
406 /* Allocate arg vector, including space for the function to be
407 called in argvec[0] and a terminating NULL */
bd5635a1
RP
408 argvec = (value *) alloca (sizeof (value) * (nargs + 2));
409 for (; tem <= nargs; tem++)
410 /* Ensure that array expressions are coerced into pointer objects. */
411 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
412
413 /* signal end of arglist */
414 argvec[tem] = 0;
415
416 if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
417 {
418 int static_memfuncp;
419 value temp = arg2;
40620258
KH
420 char tstr[15], mangle_tstr[15], *ptr, *mangle_ptr;
421 char *pp;
bd5635a1
RP
422
423 argvec[1] = arg2;
40620258
KH
424 argvec[0] = 0;
425 strcpy(tstr, &exp->elts[pc2+2].string);
426 if (!strncmp(tstr, "operator", 8))
427 {
428 ptr = &tstr[8];
429 strcpy(mangle_tstr, "__");
430 mangle_ptr = &mangle_tstr[2];
431 pp = cplus_mangle_opname(ptr, DMGL_ANSI);
432 if (pp)
433 strcpy(mangle_ptr, pp);
434 else
435 strcpy(mangle_ptr, ptr);
436 argvec[0] =
437 value_struct_elt (&temp, argvec+1, mangle_tstr,
bd5635a1
RP
438 &static_memfuncp,
439 op == STRUCTOP_STRUCT
440 ? "structure" : "structure pointer");
40620258
KH
441 if (!argvec[0])
442 {
443 pp = cplus_mangle_opname(ptr, DMGL_NO_OPTS);
444 if (pp)
445 strcpy(mangle_ptr, pp);
446 else
447 strcpy(mangle_ptr, ptr);
448 strcpy(tstr, mangle_tstr);
449 }
450 }
451 if (!argvec[0])
bd5635a1 452 {
40620258
KH
453 temp = arg2;
454 argvec[0] =
455 value_struct_elt (&temp, argvec+1, tstr,
456 &static_memfuncp,
457 op == STRUCTOP_STRUCT
458 ? "structure" : "structure pointer");
bd5635a1 459 }
40620258
KH
460 arg2 = value_from_longest (lookup_pointer_type(VALUE_TYPE (temp)),
461 VALUE_ADDRESS (temp)+VALUE_OFFSET (temp));
462 argvec[1] = arg2;
463
bd5635a1
RP
464 if (static_memfuncp)
465 {
466 argvec[1] = argvec[0];
467 nargs--;
468 argvec++;
469 }
470 }
471 else if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
472 {
473 argvec[1] = arg2;
474 argvec[0] = arg1;
475 }
476
477 if (noside == EVAL_SKIP)
478 goto nosideret;
479 if (noside == EVAL_AVOID_SIDE_EFFECTS)
480 {
481 /* If the return type doesn't look like a function type, call an
482 error. This can happen if somebody tries to turn a variable into
483 a function call. This is here because people often want to
484 call, eg, strcmp, which gdb doesn't know is a function. If
485 gdb isn't asked for it's opinion (ie. through "whatis"),
486 it won't offer it. */
487
488 struct type *ftype =
489 TYPE_TARGET_TYPE (VALUE_TYPE (argvec[0]));
490
491 if (ftype)
492 return allocate_value (TYPE_TARGET_TYPE (VALUE_TYPE (argvec[0])));
493 else
494 error ("Expression of type other than \"Function returning ...\" used as function");
495 }
e17960fb 496 return call_function_by_hand (argvec[0], nargs, argvec + 1);
bd5635a1
RP
497
498 case STRUCTOP_STRUCT:
a8a69e63 499 tem = longest_to_int (exp->elts[pc + 1].longconst);
1500864f 500 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1
RP
501 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
502 if (noside == EVAL_SKIP)
503 goto nosideret;
504 if (noside == EVAL_AVOID_SIDE_EFFECTS)
505 return value_zero (lookup_struct_elt_type (VALUE_TYPE (arg1),
a8a69e63 506 &exp->elts[pc + 2].string,
35fcebce 507 0),
bd5635a1
RP
508 lval_memory);
509 else
510 {
511 value temp = arg1;
a8a69e63 512 return value_struct_elt (&temp, (value *)0, &exp->elts[pc + 2].string,
bd5635a1
RP
513 (int *) 0, "structure");
514 }
515
516 case STRUCTOP_PTR:
a8a69e63 517 tem = longest_to_int (exp->elts[pc + 1].longconst);
1500864f 518 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1
RP
519 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
520 if (noside == EVAL_SKIP)
521 goto nosideret;
522 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1500864f 523 return value_zero (lookup_struct_elt_type (VALUE_TYPE (arg1),
a8a69e63 524 &exp->elts[pc + 2].string,
35fcebce 525 0),
bd5635a1
RP
526 lval_memory);
527 else
528 {
529 value temp = arg1;
a8a69e63 530 return value_struct_elt (&temp, (value *)0, &exp->elts[pc + 2].string,
bd5635a1
RP
531 (int *) 0, "structure pointer");
532 }
533
534 case STRUCTOP_MEMBER:
535 arg1 = evaluate_subexp_for_address (exp, pos, noside);
01be6913 536 goto handle_pointer_to_member;
bd5635a1
RP
537 case STRUCTOP_MPTR:
538 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
01be6913 539 handle_pointer_to_member:
bd5635a1
RP
540 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
541 if (noside == EVAL_SKIP)
542 goto nosideret;
01be6913
PB
543 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_PTR)
544 goto bad_pointer_to_member;
545 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
546 if (TYPE_CODE (type) == TYPE_CODE_METHOD)
547 error ("not implemented: pointer-to-method in pointer-to-member construct");
548 if (TYPE_CODE (type) != TYPE_CODE_MEMBER)
549 goto bad_pointer_to_member;
bd5635a1 550 /* Now, convert these values to an address. */
01be6913
PB
551 arg1 = value_cast (lookup_pointer_type (TYPE_DOMAIN_TYPE (type)),
552 arg1);
553 arg3 = value_from_longest (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
554 value_as_long (arg1) + value_as_long (arg2));
bd5635a1 555 return value_ind (arg3);
01be6913
PB
556 bad_pointer_to_member:
557 error("non-pointer-to-member value used in pointer-to-member construct");
bd5635a1 558
1500864f
JK
559 case BINOP_CONCAT:
560 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
561 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
562 if (noside == EVAL_SKIP)
563 goto nosideret;
564 if (binop_user_defined_p (op, arg1, arg2))
565 return value_x_binop (arg1, arg2, op, OP_NULL);
566 else
567 return value_concat (arg1, arg2);
568
bd5635a1
RP
569 case BINOP_ASSIGN:
570 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
571 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
572 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
573 return arg1;
574 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 575 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
576 else
577 return value_assign (arg1, arg2);
578
579 case BINOP_ASSIGN_MODIFY:
580 (*pos) += 2;
581 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
582 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
583 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
584 return arg1;
585 op = exp->elts[pc + 1].opcode;
586 if (binop_user_defined_p (op, arg1, arg2))
587 return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op);
588 else if (op == BINOP_ADD)
589 arg2 = value_add (arg1, arg2);
590 else if (op == BINOP_SUB)
591 arg2 = value_sub (arg1, arg2);
592 else
593 arg2 = value_binop (arg1, arg2, op);
594 return value_assign (arg1, arg2);
595
596 case BINOP_ADD:
597 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
598 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
599 if (noside == EVAL_SKIP)
600 goto nosideret;
601 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 602 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
603 else
604 return value_add (arg1, arg2);
605
606 case BINOP_SUB:
607 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
608 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
609 if (noside == EVAL_SKIP)
610 goto nosideret;
611 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 612 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
613 else
614 return value_sub (arg1, arg2);
615
616 case BINOP_MUL:
617 case BINOP_DIV:
618 case BINOP_REM:
76a0ffb4 619 case BINOP_MOD:
bd5635a1
RP
620 case BINOP_LSH:
621 case BINOP_RSH:
e58de8a2
FF
622 case BINOP_BITWISE_AND:
623 case BINOP_BITWISE_IOR:
624 case BINOP_BITWISE_XOR:
bd5635a1
RP
625 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
626 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
627 if (noside == EVAL_SKIP)
628 goto nosideret;
629 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 630 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
631 else
632 if (noside == EVAL_AVOID_SIDE_EFFECTS
76a0ffb4 633 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
bd5635a1
RP
634 return value_zero (VALUE_TYPE (arg1), not_lval);
635 else
636 return value_binop (arg1, arg2, op);
637
638 case BINOP_SUBSCRIPT:
639 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
640 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
641 if (noside == EVAL_SKIP)
642 goto nosideret;
643 if (noside == EVAL_AVOID_SIDE_EFFECTS)
35fcebce
PB
644 {
645 /* If the user attempts to subscript something that has no target
646 type (like a plain int variable for example), then report this
647 as an error. */
648
649 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg1));
650 if (type)
651 return value_zero (type, VALUE_LVAL (arg1));
652 else
653 error ("cannot subscript something of type `%s'",
654 TYPE_NAME (VALUE_TYPE (arg1)));
655 }
bd5635a1
RP
656
657 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 658 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
659 else
660 return value_subscript (arg1, arg2);
661
54bbbfb4
FF
662 case MULTI_SUBSCRIPT:
663 (*pos) += 2;
664 nargs = longest_to_int (exp->elts[pc + 1].longconst);
665 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
666 while (nargs-- > 0)
667 {
668 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
669 /* FIXME: EVAL_SKIP handling may not be correct. */
670 if (noside == EVAL_SKIP)
671 {
672 if (nargs > 0)
673 {
674 continue;
675 }
676 else
677 {
678 goto nosideret;
679 }
680 }
681 /* FIXME: EVAL_AVOID_SIDE_EFFECTS handling may not be correct. */
682 if (noside == EVAL_AVOID_SIDE_EFFECTS)
683 {
684 /* If the user attempts to subscript something that has no target
685 type (like a plain int variable for example), then report this
686 as an error. */
687
688 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg1));
689 if (type != NULL)
690 {
691 arg1 = value_zero (type, VALUE_LVAL (arg1));
692 noside = EVAL_SKIP;
693 continue;
694 }
695 else
696 {
697 error ("cannot subscript something of type `%s'",
698 TYPE_NAME (VALUE_TYPE (arg1)));
699 }
700 }
701
702 if (binop_user_defined_p (op, arg1, arg2))
703 {
704 arg1 = value_x_binop (arg1, arg2, op, OP_NULL);
705 }
706 else
707 {
708 arg1 = value_subscript (arg1, arg2);
709 }
710 }
711 return (arg1);
712
e58de8a2 713 case BINOP_LOGICAL_AND:
bd5635a1
RP
714 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
715 if (noside == EVAL_SKIP)
716 {
717 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
718 goto nosideret;
719 }
720
721 oldpos = *pos;
722 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
723 *pos = oldpos;
724
725 if (binop_user_defined_p (op, arg1, arg2))
726 {
727 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2ccb3837 728 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
729 }
730 else
731 {
e58de8a2 732 tem = value_logical_not (arg1);
bd5635a1
RP
733 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
734 (tem ? EVAL_SKIP : noside));
2ccb3837 735 return value_from_longest (builtin_type_int,
e58de8a2 736 (LONGEST) (!tem && !value_logical_not (arg2)));
bd5635a1
RP
737 }
738
e58de8a2 739 case BINOP_LOGICAL_OR:
bd5635a1
RP
740 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
741 if (noside == EVAL_SKIP)
742 {
743 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
744 goto nosideret;
745 }
746
747 oldpos = *pos;
748 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
749 *pos = oldpos;
750
751 if (binop_user_defined_p (op, arg1, arg2))
752 {
753 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2ccb3837 754 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
755 }
756 else
757 {
e58de8a2 758 tem = value_logical_not (arg1);
bd5635a1
RP
759 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
760 (!tem ? EVAL_SKIP : noside));
2ccb3837 761 return value_from_longest (builtin_type_int,
e58de8a2 762 (LONGEST) (!tem || !value_logical_not (arg2)));
bd5635a1
RP
763 }
764
765 case BINOP_EQUAL:
766 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
767 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
768 if (noside == EVAL_SKIP)
769 goto nosideret;
770 if (binop_user_defined_p (op, arg1, arg2))
771 {
2ccb3837 772 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
773 }
774 else
775 {
776 tem = value_equal (arg1, arg2);
2ccb3837 777 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
778 }
779
780 case BINOP_NOTEQUAL:
781 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
782 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
783 if (noside == EVAL_SKIP)
784 goto nosideret;
785 if (binop_user_defined_p (op, arg1, arg2))
786 {
2ccb3837 787 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
788 }
789 else
790 {
791 tem = value_equal (arg1, arg2);
2ccb3837 792 return value_from_longest (builtin_type_int, (LONGEST) ! tem);
bd5635a1
RP
793 }
794
795 case BINOP_LESS:
796 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
797 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
798 if (noside == EVAL_SKIP)
799 goto nosideret;
800 if (binop_user_defined_p (op, arg1, arg2))
801 {
2ccb3837 802 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
803 }
804 else
805 {
806 tem = value_less (arg1, arg2);
2ccb3837 807 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
808 }
809
810 case BINOP_GTR:
811 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
812 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
813 if (noside == EVAL_SKIP)
814 goto nosideret;
815 if (binop_user_defined_p (op, arg1, arg2))
816 {
2ccb3837 817 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
818 }
819 else
820 {
821 tem = value_less (arg2, arg1);
2ccb3837 822 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
823 }
824
825 case BINOP_GEQ:
826 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
827 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
828 if (noside == EVAL_SKIP)
829 goto nosideret;
830 if (binop_user_defined_p (op, arg1, arg2))
831 {
2ccb3837 832 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
833 }
834 else
835 {
8f86a4e4
JG
836 tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
837 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
838 }
839
840 case BINOP_LEQ:
841 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
842 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
843 if (noside == EVAL_SKIP)
844 goto nosideret;
845 if (binop_user_defined_p (op, arg1, arg2))
846 {
2ccb3837 847 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
848 }
849 else
850 {
8f86a4e4
JG
851 tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
852 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
853 }
854
855 case BINOP_REPEAT:
856 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
857 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
858 if (noside == EVAL_SKIP)
859 goto nosideret;
860 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_INT)
861 error ("Non-integral right operand for \"@\" operator.");
862 if (noside == EVAL_AVOID_SIDE_EFFECTS)
863 return allocate_repeat_value (VALUE_TYPE (arg1),
2ccb3837 864 longest_to_int (value_as_long (arg2)));
bd5635a1 865 else
2ccb3837 866 return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
bd5635a1
RP
867
868 case BINOP_COMMA:
869 evaluate_subexp (NULL_TYPE, exp, pos, noside);
870 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
871
872 case UNOP_NEG:
873 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
874 if (noside == EVAL_SKIP)
875 goto nosideret;
876 if (unop_user_defined_p (op, arg1))
877 return value_x_unop (arg1, op);
878 else
879 return value_neg (arg1);
880
e58de8a2 881 case UNOP_COMPLEMENT:
5f00ca54
JK
882 /* C++: check for and handle destructor names. */
883 op = exp->elts[*pos].opcode;
884
bd5635a1
RP
885 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
886 if (noside == EVAL_SKIP)
887 goto nosideret;
e58de8a2
FF
888 if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
889 return value_x_unop (arg1, UNOP_COMPLEMENT);
bd5635a1 890 else
e58de8a2 891 return value_complement (arg1);
bd5635a1 892
e58de8a2 893 case UNOP_LOGICAL_NOT:
bd5635a1
RP
894 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
895 if (noside == EVAL_SKIP)
896 goto nosideret;
897 if (unop_user_defined_p (op, arg1))
898 return value_x_unop (arg1, op);
899 else
2ccb3837 900 return value_from_longest (builtin_type_int,
e58de8a2 901 (LONGEST) value_logical_not (arg1));
bd5635a1
RP
902
903 case UNOP_IND:
904 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
905 expect_type = TYPE_TARGET_TYPE (expect_type);
906 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
907 if (noside == EVAL_SKIP)
908 goto nosideret;
909 if (noside == EVAL_AVOID_SIDE_EFFECTS)
910 {
911 if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_PTR
912 || TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_REF
913 /* In C you can dereference an array to get the 1st elt. */
914 || TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_ARRAY
915 )
916 return value_zero (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)),
917 lval_memory);
918 else if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_INT)
919 /* GDB allows dereferencing an int. */
920 return value_zero (builtin_type_int, lval_memory);
921 else
922 error ("Attempt to take contents of a non-pointer value.");
923 }
924 return value_ind (arg1);
925
926 case UNOP_ADDR:
927 /* C++: check for and handle pointer to members. */
928
929 op = exp->elts[*pos].opcode;
930
931 if (noside == EVAL_SKIP)
932 {
933 if (op == OP_SCOPE)
934 {
a8a69e63 935 int temm = longest_to_int (exp->elts[pc+3].longconst);
1500864f 936 (*pos) += 3 + BYTES_TO_EXP_ELEM (temm + 1);
bd5635a1
RP
937 }
938 else
939 evaluate_subexp (expect_type, exp, pos, EVAL_SKIP);
940 goto nosideret;
941 }
942
01be6913 943 return evaluate_subexp_for_address (exp, pos, noside);
bd5635a1
RP
944
945 case UNOP_SIZEOF:
946 if (noside == EVAL_SKIP)
947 {
948 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
949 goto nosideret;
950 }
951 return evaluate_subexp_for_sizeof (exp, pos);
952
953 case UNOP_CAST:
954 (*pos) += 2;
955 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
956 if (noside == EVAL_SKIP)
957 goto nosideret;
958 return value_cast (exp->elts[pc + 1].type, arg1);
959
960 case UNOP_MEMVAL:
961 (*pos) += 2;
962 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
963 if (noside == EVAL_SKIP)
964 goto nosideret;
965 if (noside == EVAL_AVOID_SIDE_EFFECTS)
966 return value_zero (exp->elts[pc + 1].type, lval_memory);
967 else
968 return value_at_lazy (exp->elts[pc + 1].type,
2ccb3837 969 value_as_pointer (arg1));
bd5635a1
RP
970
971 case UNOP_PREINCREMENT:
972 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
973 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
974 return arg1;
975 else if (unop_user_defined_p (op, arg1))
976 {
977 return value_x_unop (arg1, op);
978 }
979 else
980 {
2ccb3837 981 arg2 = value_add (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
982 (LONGEST) 1));
983 return value_assign (arg1, arg2);
984 }
985
986 case UNOP_PREDECREMENT:
987 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
988 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
989 return arg1;
990 else if (unop_user_defined_p (op, arg1))
991 {
992 return value_x_unop (arg1, op);
993 }
994 else
995 {
2ccb3837 996 arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
997 (LONGEST) 1));
998 return value_assign (arg1, arg2);
999 }
1000
1001 case UNOP_POSTINCREMENT:
1002 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1003 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1004 return arg1;
1005 else if (unop_user_defined_p (op, arg1))
1006 {
1007 return value_x_unop (arg1, op);
1008 }
1009 else
1010 {
2ccb3837 1011 arg2 = value_add (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
1012 (LONGEST) 1));
1013 value_assign (arg1, arg2);
1014 return arg1;
1015 }
1016
1017 case UNOP_POSTDECREMENT:
1018 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1019 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1020 return arg1;
1021 else if (unop_user_defined_p (op, arg1))
1022 {
1023 return value_x_unop (arg1, op);
1024 }
1025 else
1026 {
2ccb3837 1027 arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
1028 (LONGEST) 1));
1029 value_assign (arg1, arg2);
1030 return arg1;
1031 }
1032
1033 case OP_THIS:
1034 (*pos) += 1;
1035 return value_of_this (1);
1036
1500864f
JK
1037 case OP_TYPE:
1038 error ("Attempt to use a type name as an expression");
1039
bd5635a1 1040 default:
1500864f
JK
1041 /* Removing this case and compiling with gcc -Wall reveals that
1042 a lot of cases are hitting this case. Some of these should
1043 probably be removed from expression.h (e.g. do we need a BINOP_SCOPE
1044 and an OP_SCOPE?); others are legitimate expressions which are
1045 (apparently) not fully implemented.
1046
1047 If there are any cases landing here which mean a user error,
1048 then they should be separate cases, with more descriptive
1049 error messages. */
1050
1051 error ("\
1052GDB does not (yet) know how to evaluated that kind of expression");
bd5635a1
RP
1053 }
1054
1055 nosideret:
2ccb3837 1056 return value_from_longest (builtin_type_long, (LONGEST) 1);
bd5635a1
RP
1057}
1058\f
1059/* Evaluate a subexpression of EXP, at index *POS,
1060 and return the address of that subexpression.
1061 Advance *POS over the subexpression.
1062 If the subexpression isn't an lvalue, get an error.
1063 NOSIDE may be EVAL_AVOID_SIDE_EFFECTS;
1064 then only the type of the result need be correct. */
1065
1066static value
1067evaluate_subexp_for_address (exp, pos, noside)
1068 register struct expression *exp;
1069 register int *pos;
1070 enum noside noside;
1071{
1072 enum exp_opcode op;
1073 register int pc;
e17960fb 1074 struct symbol *var;
bd5635a1
RP
1075
1076 pc = (*pos);
1077 op = exp->elts[pc].opcode;
1078
1079 switch (op)
1080 {
1081 case UNOP_IND:
1082 (*pos)++;
1083 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
1084
1085 case UNOP_MEMVAL:
1086 (*pos) += 3;
1087 return value_cast (lookup_pointer_type (exp->elts[pc + 1].type),
1088 evaluate_subexp (NULL_TYPE, exp, pos, noside));
1089
1090 case OP_VAR_VALUE:
479fdd26 1091 var = exp->elts[pc + 2].symbol;
e17960fb
JG
1092
1093 /* C++: The "address" of a reference should yield the address
1094 * of the object pointed to. Let value_addr() deal with it. */
1095 if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_REF)
1096 goto default_case;
1097
479fdd26 1098 (*pos) += 4;
bd5635a1
RP
1099 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1100 {
1101 struct type *type =
e17960fb
JG
1102 lookup_pointer_type (SYMBOL_TYPE (var));
1103 enum address_class sym_class = SYMBOL_CLASS (var);
bd5635a1
RP
1104
1105 if (sym_class == LOC_CONST
1106 || sym_class == LOC_CONST_BYTES
1107 || sym_class == LOC_REGISTER
1108 || sym_class == LOC_REGPARM)
1109 error ("Attempt to take address of register or constant.");
1110
1111 return
1112 value_zero (type, not_lval);
1113 }
1114 else
479fdd26
JK
1115 return
1116 locate_var_value
1117 (var,
1118 block_innermost_frame (exp->elts[pc + 1].block));
bd5635a1
RP
1119
1120 default:
e17960fb 1121 default_case:
bd5635a1
RP
1122 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1123 {
1124 value x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1125 if (VALUE_LVAL (x) == lval_memory)
0a5d35ed 1126 return value_zero (lookup_pointer_type (VALUE_TYPE (x)),
bd5635a1
RP
1127 not_lval);
1128 else
1129 error ("Attempt to take address of non-lval");
1130 }
1131 return value_addr (evaluate_subexp (NULL_TYPE, exp, pos, noside));
1132 }
1133}
1134
1135/* Evaluate like `evaluate_subexp' except coercing arrays to pointers.
fb6e675f
FF
1136 When used in contexts where arrays will be coerced anyway, this is
1137 equivalent to `evaluate_subexp' but much faster because it avoids
479fdd26
JK
1138 actually fetching array contents (perhaps obsolete now that we have
1139 VALUE_LAZY).
fb6e675f
FF
1140
1141 Note that we currently only do the coercion for C expressions, where
1142 arrays are zero based and the coercion is correct. For other languages,
1143 with nonzero based arrays, coercion loses. Use CAST_IS_CONVERSION
1144 to decide if coercion is appropriate.
1145
479fdd26 1146 */
bd5635a1
RP
1147
1148static value
1149evaluate_subexp_with_coercion (exp, pos, noside)
1150 register struct expression *exp;
1151 register int *pos;
1152 enum noside noside;
1153{
1154 register enum exp_opcode op;
1155 register int pc;
1156 register value val;
e17960fb 1157 struct symbol *var;
bd5635a1
RP
1158
1159 pc = (*pos);
1160 op = exp->elts[pc].opcode;
1161
1162 switch (op)
1163 {
1164 case OP_VAR_VALUE:
479fdd26 1165 var = exp->elts[pc + 2].symbol;
fb6e675f
FF
1166 if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_ARRAY
1167 && CAST_IS_CONVERSION)
bd5635a1 1168 {
479fdd26
JK
1169 (*pos) += 4;
1170 val =
1171 locate_var_value
1172 (var, block_innermost_frame (exp->elts[pc + 1].block));
e17960fb 1173 return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (SYMBOL_TYPE (var))),
bd5635a1
RP
1174 val);
1175 }
479fdd26
JK
1176 /* FALLTHROUGH */
1177
1178 default:
1179 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
bd5635a1
RP
1180 }
1181}
1182
1183/* Evaluate a subexpression of EXP, at index *POS,
1184 and return a value for the size of that subexpression.
1185 Advance *POS over the subexpression. */
1186
1187static value
1188evaluate_subexp_for_sizeof (exp, pos)
1189 register struct expression *exp;
1190 register int *pos;
1191{
1192 enum exp_opcode op;
1193 register int pc;
1194 value val;
1195
1196 pc = (*pos);
1197 op = exp->elts[pc].opcode;
1198
1199 switch (op)
1200 {
1201 /* This case is handled specially
1202 so that we avoid creating a value for the result type.
1203 If the result type is very big, it's desirable not to
1204 create a value unnecessarily. */
1205 case UNOP_IND:
1206 (*pos)++;
1207 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2ccb3837 1208 return value_from_longest (builtin_type_int, (LONGEST)
bd5635a1
RP
1209 TYPE_LENGTH (TYPE_TARGET_TYPE (VALUE_TYPE (val))));
1210
1211 case UNOP_MEMVAL:
1212 (*pos) += 3;
2ccb3837 1213 return value_from_longest (builtin_type_int,
bd5635a1
RP
1214 (LONGEST) TYPE_LENGTH (exp->elts[pc + 1].type));
1215
1216 case OP_VAR_VALUE:
479fdd26
JK
1217 (*pos) += 4;
1218 return
1219 value_from_longest
1220 (builtin_type_int,
1221 (LONGEST) TYPE_LENGTH (SYMBOL_TYPE (exp->elts[pc + 2].symbol)));
bd5635a1
RP
1222
1223 default:
1224 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2ccb3837 1225 return value_from_longest (builtin_type_int,
bd5635a1
RP
1226 (LONGEST) TYPE_LENGTH (VALUE_TYPE (val)));
1227 }
1228}
0a5d35ed
SG
1229
1230/* Parse a type expression in the string [P..P+LENGTH). */
1231
1232struct type *
1233parse_and_eval_type (p, length)
1234 char *p;
1235 int length;
1236{
1237 char *tmp = (char *)alloca (length + 4);
1238 struct expression *expr;
1239 tmp[0] = '(';
35fcebce 1240 memcpy (tmp+1, p, length);
0a5d35ed
SG
1241 tmp[length+1] = ')';
1242 tmp[length+2] = '0';
1243 tmp[length+3] = '\0';
1244 expr = parse_expression (tmp);
1245 if (expr->elts[0].opcode != UNOP_CAST)
1246 error ("Internal error in eval_type.");
1247 return expr->elts[1].type;
1248}
This page took 0.208295 seconds and 4 git commands to generate.