* gdb.base/ptype.exp: Accept char[0] as well as char[] for "ptype
[deliverable/binutils-gdb.git] / gdb / expprint.c
CommitLineData
bd5635a1 1/* Print in infix form a struct expression.
28de880c 2 Copyright (C) 1986, 1989, 1991 Free Software Foundation, Inc.
bd5635a1
RP
3
4This file is part of GDB.
5
10147c02 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
10147c02
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
10147c02 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
10147c02
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1 19
bd5635a1
RP
20#include "defs.h"
21#include "symtab.h"
28de880c 22#include "gdbtypes.h"
bd5635a1
RP
23#include "expression.h"
24#include "value.h"
28de880c
JG
25#include "language.h"
26#include "parser-defs.h"
bd5635a1 27
28de880c
JG
28/* Prototypes for local functions */
29
30static void
dcda44a0 31print_subexp PARAMS ((struct expression *, int *, GDB_FILE *, enum precedence));
28de880c
JG
32
33static void
dcda44a0 34print_simple_m2_func PARAMS ((char *, struct expression *, int *, GDB_FILE *));
bd5635a1
RP
35
36void
37print_expression (exp, stream)
38 struct expression *exp;
dcda44a0 39 GDB_FILE *stream;
bd5635a1
RP
40{
41 int pc = 0;
42 print_subexp (exp, &pc, stream, PREC_NULL);
43}
44
45/* Print the subexpression of EXP that starts in position POS, on STREAM.
46 PREC is the precedence of the surrounding operator;
47 if the precedence of the main operator of this subexpression is less,
48 parentheses are needed here. */
49
50static void
51print_subexp (exp, pos, stream, prec)
52 register struct expression *exp;
53 register int *pos;
dcda44a0 54 GDB_FILE *stream;
bd5635a1
RP
55 enum precedence prec;
56{
57 register unsigned tem;
28de880c 58 register const struct op_print *op_print_tab;
bd5635a1
RP
59 register int pc;
60 unsigned nargs;
61 register char *op_str;
62 int assign_modify = 0;
63 enum exp_opcode opcode;
dcda44a0 64 enum precedence myprec = PREC_NULL;
bd5635a1 65 /* Set to 1 for a right-associative operator. */
dcda44a0
PB
66 int assoc = 0;
67 value_ptr val;
68 char *tempstr = NULL;
bd5635a1 69
28de880c 70 op_print_tab = exp->language_defn->la_op_print_tab;
bd5635a1
RP
71 pc = (*pos)++;
72 opcode = exp->elts[pc].opcode;
73 switch (opcode)
74 {
28de880c
JG
75 /* Common ops */
76
bd5635a1 77 case OP_SCOPE:
5d074aa9
FF
78 myprec = PREC_PREFIX;
79 assoc = 0;
f661c4ca
PS
80 fputs_filtered (type_name_no_tag (exp->elts[pc + 1].type), stream);
81 fputs_filtered ("::", stream);
a8a69e63 82 nargs = longest_to_int (exp->elts[pc + 2].longconst);
f661c4ca 83 (*pos) += 4 + BYTES_TO_EXP_ELEM (nargs + 1);
a8a69e63 84 fputs_filtered (&exp->elts[pc + 3].string, stream);
bd5635a1
RP
85 return;
86
87 case OP_LONG:
88 (*pos) += 3;
28de880c 89 value_print (value_from_longest (exp->elts[pc + 1].type,
a8a69e63 90 exp->elts[pc + 2].longconst),
bd5635a1
RP
91 stream, 0, Val_no_prettyprint);
92 return;
93
94 case OP_DOUBLE:
95 (*pos) += 3;
96 value_print (value_from_double (exp->elts[pc + 1].type,
97 exp->elts[pc + 2].doubleconst),
98 stream, 0, Val_no_prettyprint);
99 return;
100
101 case OP_VAR_VALUE:
dcda44a0
PB
102 {
103 struct block *b;
104 (*pos) += 3;
105 b = exp->elts[pc + 1].block;
106 if (b != NULL
107 && BLOCK_FUNCTION (b) != NULL
108 && SYMBOL_SOURCE_NAME (BLOCK_FUNCTION (b)) != NULL)
109 {
110 fputs_filtered (SYMBOL_SOURCE_NAME (BLOCK_FUNCTION (b)), stream);
111 fputs_filtered ("::", stream);
112 }
113 fputs_filtered (SYMBOL_SOURCE_NAME (exp->elts[pc + 2].symbol), stream);
114 }
bd5635a1
RP
115 return;
116
117 case OP_LAST:
118 (*pos) += 2;
10147c02
JG
119 fprintf_filtered (stream, "$%d",
120 longest_to_int (exp->elts[pc + 1].longconst));
bd5635a1
RP
121 return;
122
123 case OP_REGISTER:
124 (*pos) += 2;
10147c02 125 fprintf_filtered (stream, "$%s",
35fcebce 126 reg_names[longest_to_int (exp->elts[pc + 1].longconst)]);
bd5635a1
RP
127 return;
128
5d074aa9
FF
129 case OP_BOOL:
130 (*pos) += 2;
131 fprintf_filtered (stream, "%s",
132 longest_to_int (exp->elts[pc + 1].longconst)
133 ? "TRUE" : "FALSE");
134 return;
135
bd5635a1
RP
136 case OP_INTERNALVAR:
137 (*pos) += 2;
10147c02 138 fprintf_filtered (stream, "$%s",
bd5635a1
RP
139 internalvar_name (exp->elts[pc + 1].internalvar));
140 return;
141
142 case OP_FUNCALL:
143 (*pos) += 2;
10147c02 144 nargs = longest_to_int (exp->elts[pc + 1].longconst);
bd5635a1 145 print_subexp (exp, pos, stream, PREC_SUFFIX);
10147c02 146 fputs_filtered (" (", stream);
bd5635a1
RP
147 for (tem = 0; tem < nargs; tem++)
148 {
149 if (tem != 0)
10147c02 150 fputs_filtered (", ", stream);
bd5635a1
RP
151 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
152 }
10147c02 153 fputs_filtered (")", stream);
bd5635a1
RP
154 return;
155
156 case OP_STRING:
a8a69e63 157 nargs = longest_to_int (exp -> elts[pc + 1].longconst);
c4413e2c 158 (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
a8a69e63 159 /* LA_PRINT_STRING will print using the current repeat count threshold.
5d074aa9 160 If necessary, we can temporarily set it to zero, or pass it as an
a8a69e63
FF
161 additional parameter to LA_PRINT_STRING. -fnf */
162 LA_PRINT_STRING (stream, &exp->elts[pc + 2].string, nargs, 0);
bd5635a1
RP
163 return;
164
c4413e2c
FF
165 case OP_BITSTRING:
166 error ("support for OP_BITSTRING unimplemented");
167 break;
168
169 case OP_ARRAY:
f661c4ca
PS
170 (*pos) += 3;
171 nargs = longest_to_int (exp->elts[pc + 2].longconst);
172 nargs -= longest_to_int (exp->elts[pc + 1].longconst);
173 nargs++;
174 tem = 0;
175 if (exp->elts[pc + 4].opcode == OP_LONG
176 && exp->elts[pc + 5].type == builtin_type_char
177 && exp->language_defn->la_language == language_c)
178 {
179 /* Attempt to print C character arrays using string syntax.
180 Walk through the args, picking up one character from each
181 of the OP_LONG expression elements. If any array element
182 does not match our expection of what we should find for
183 a simple string, revert back to array printing. Note that
184 the last expression element is an explicit null terminator
185 byte, which doesn't get printed. */
186 tempstr = alloca (nargs);
187 pc += 4;
188 while (tem < nargs)
189 {
190 if (exp->elts[pc].opcode != OP_LONG
191 || exp->elts[pc + 1].type != builtin_type_char)
192 {
193 /* Not a simple array of char, use regular array printing. */
194 tem = 0;
195 break;
196 }
197 else
198 {
199 tempstr[tem++] =
200 longest_to_int (exp->elts[pc + 2].longconst);
201 pc += 4;
202 }
203 }
204 }
205 if (tem > 0)
206 {
207 LA_PRINT_STRING (stream, tempstr, nargs - 1, 0);
208 (*pos) = pc;
209 }
210 else
211 {
dcda44a0
PB
212 int is_chill = exp->language_defn->la_language == language_chill;
213 fputs_filtered (is_chill ? " [" : " {", stream);
f661c4ca
PS
214 for (tem = 0; tem < nargs; tem++)
215 {
216 if (tem != 0)
217 {
218 fputs_filtered (", ", stream);
219 }
220 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
221 }
dcda44a0 222 fputs_filtered (is_chill ? "]" : "}", stream);
f661c4ca
PS
223 }
224 return;
c4413e2c 225
dcda44a0
PB
226 case OP_LABELED:
227 tem = longest_to_int (exp->elts[pc + 1].longconst);
228 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
229
230 if (exp->language_defn->la_language == language_chill)
231 {
232 fputs_filtered (".", stream);
233 fputs_filtered (&exp->elts[pc + 2].string, stream);
234 fputs_filtered (exp->elts[*pos].opcode == OP_LABELED ? ", "
235 : ": ",
236 stream);
237 }
238 else
239 {
240 /* Gcc support both these syntaxes. Unsure which is preferred. */
241#if 1
242 fputs_filtered (&exp->elts[pc + 2].string, stream);
243 fputs_filtered (": ", stream);
244#else
245 fputs_filtered (".", stream);
246 fputs_filtered (&exp->elts[pc + 2].string, stream);
247 fputs_filtered ("=", stream);
248#endif
249 }
250 print_subexp (exp, pos, stream, PREC_SUFFIX);
251 return;
252
bd5635a1
RP
253 case TERNOP_COND:
254 if ((int) prec > (int) PREC_COMMA)
10147c02 255 fputs_filtered ("(", stream);
bd5635a1
RP
256 /* Print the subexpressions, forcing parentheses
257 around any binary operations within them.
258 This is more parentheses than are strictly necessary,
259 but it looks clearer. */
260 print_subexp (exp, pos, stream, PREC_HYPER);
10147c02 261 fputs_filtered (" ? ", stream);
bd5635a1 262 print_subexp (exp, pos, stream, PREC_HYPER);
10147c02 263 fputs_filtered (" : ", stream);
bd5635a1
RP
264 print_subexp (exp, pos, stream, PREC_HYPER);
265 if ((int) prec > (int) PREC_COMMA)
10147c02 266 fputs_filtered (")", stream);
bd5635a1
RP
267 return;
268
269 case STRUCTOP_STRUCT:
a8a69e63 270 tem = longest_to_int (exp->elts[pc + 1].longconst);
c4413e2c 271 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1 272 print_subexp (exp, pos, stream, PREC_SUFFIX);
10147c02 273 fputs_filtered (".", stream);
a8a69e63 274 fputs_filtered (&exp->elts[pc + 2].string, stream);
bd5635a1
RP
275 return;
276
28de880c 277 /* Will not occur for Modula-2 */
bd5635a1 278 case STRUCTOP_PTR:
a8a69e63 279 tem = longest_to_int (exp->elts[pc + 1].longconst);
c4413e2c 280 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1 281 print_subexp (exp, pos, stream, PREC_SUFFIX);
10147c02 282 fputs_filtered ("->", stream);
a8a69e63 283 fputs_filtered (&exp->elts[pc + 2].string, stream);
bd5635a1
RP
284 return;
285
286 case BINOP_SUBSCRIPT:
287 print_subexp (exp, pos, stream, PREC_SUFFIX);
10147c02 288 fputs_filtered ("[", stream);
bd5635a1 289 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
10147c02 290 fputs_filtered ("]", stream);
bd5635a1
RP
291 return;
292
293 case UNOP_POSTINCREMENT:
294 print_subexp (exp, pos, stream, PREC_SUFFIX);
10147c02 295 fputs_filtered ("++", stream);
bd5635a1
RP
296 return;
297
298 case UNOP_POSTDECREMENT:
299 print_subexp (exp, pos, stream, PREC_SUFFIX);
10147c02 300 fputs_filtered ("--", stream);
bd5635a1
RP
301 return;
302
303 case UNOP_CAST:
304 (*pos) += 2;
305 if ((int) prec > (int) PREC_PREFIX)
10147c02
JG
306 fputs_filtered ("(", stream);
307 fputs_filtered ("(", stream);
bd5635a1 308 type_print (exp->elts[pc + 1].type, "", stream, 0);
10147c02 309 fputs_filtered (") ", stream);
bd5635a1
RP
310 print_subexp (exp, pos, stream, PREC_PREFIX);
311 if ((int) prec > (int) PREC_PREFIX)
10147c02 312 fputs_filtered (")", stream);
bd5635a1
RP
313 return;
314
315 case UNOP_MEMVAL:
316 (*pos) += 2;
317 if ((int) prec > (int) PREC_PREFIX)
10147c02 318 fputs_filtered ("(", stream);
28de880c
JG
319 if (exp->elts[pc + 1].type->code == TYPE_CODE_FUNC &&
320 exp->elts[pc + 3].opcode == OP_LONG) {
321 /* We have a minimal symbol fn, probably. It's encoded
322 as a UNOP_MEMVAL (function-type) of an OP_LONG (int, address).
323 Swallow the OP_LONG (including both its opcodes); ignore
324 its type; print the value in the type of the MEMVAL. */
325 (*pos) += 4;
326 val = value_at_lazy (exp->elts[pc + 1].type,
327 (CORE_ADDR) exp->elts[pc + 5].longconst);
328 value_print (val, stream, 0, Val_no_prettyprint);
329 } else {
330 fputs_filtered ("{", stream);
331 type_print (exp->elts[pc + 1].type, "", stream, 0);
332 fputs_filtered ("} ", stream);
333 print_subexp (exp, pos, stream, PREC_PREFIX);
334 }
bd5635a1 335 if ((int) prec > (int) PREC_PREFIX)
10147c02 336 fputs_filtered (")", stream);
bd5635a1
RP
337 return;
338
339 case BINOP_ASSIGN_MODIFY:
340 opcode = exp->elts[pc + 1].opcode;
341 (*pos) += 2;
342 myprec = PREC_ASSIGN;
343 assoc = 1;
344 assign_modify = 1;
28de880c
JG
345 op_str = "???";
346 for (tem = 0; op_print_tab[tem].opcode != OP_NULL; tem++)
bd5635a1
RP
347 if (op_print_tab[tem].opcode == opcode)
348 {
349 op_str = op_print_tab[tem].string;
350 break;
351 }
f661c4ca
PS
352 if (op_print_tab[tem].opcode != opcode)
353 /* Not found; don't try to keep going because we don't know how
354 to interpret further elements. */
355 error ("Invalid expression");
81919cc8 356 break;
bd5635a1 357
28de880c
JG
358 /* C++ ops */
359
bd5635a1
RP
360 case OP_THIS:
361 ++(*pos);
10147c02 362 fputs_filtered ("this", stream);
bd5635a1
RP
363 return;
364
28de880c
JG
365 /* Modula-2 ops */
366
54bbbfb4 367 case MULTI_SUBSCRIPT:
28de880c
JG
368 (*pos) += 2;
369 nargs = longest_to_int (exp->elts[pc + 1].longconst);
370 print_subexp (exp, pos, stream, PREC_SUFFIX);
dcda44a0 371 fprintf_unfiltered (stream, " [");
28de880c
JG
372 for (tem = 0; tem < nargs; tem++)
373 {
374 if (tem != 0)
dcda44a0 375 fprintf_unfiltered (stream, ", ");
28de880c
JG
376 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
377 }
dcda44a0 378 fprintf_unfiltered (stream, "]");
28de880c
JG
379 return;
380
381 case BINOP_VAL:
382 (*pos)+=2;
dcda44a0 383 fprintf_unfiltered(stream,"VAL(");
28de880c 384 type_print(exp->elts[pc+1].type,"",stream,0);
dcda44a0 385 fprintf_unfiltered(stream,",");
28de880c 386 print_subexp(exp,pos,stream,PREC_PREFIX);
dcda44a0 387 fprintf_unfiltered(stream,")");
28de880c
JG
388 return;
389
390 case UNOP_CAP:
391 print_simple_m2_func("CAP",exp,pos,stream);
392 return;
393
394 case UNOP_CHR:
395 print_simple_m2_func("CHR",exp,pos,stream);
396 return;
397
398 case UNOP_ORD:
399 print_simple_m2_func("ORD",exp,pos,stream);
400 return;
401
402 case UNOP_ABS:
403 print_simple_m2_func("ABS",exp,pos,stream);
404 return;
405
406 case UNOP_FLOAT:
407 print_simple_m2_func("FLOAT",exp,pos,stream);
408 return;
409
410 case UNOP_HIGH:
411 print_simple_m2_func("HIGH",exp,pos,stream);
412 return;
413
414 case UNOP_MAX:
415 print_simple_m2_func("MAX",exp,pos,stream);
416 return;
417
418 case UNOP_MIN:
419 print_simple_m2_func("MIN",exp,pos,stream);
420 return;
421
422 case UNOP_ODD:
423 print_simple_m2_func("ODD",exp,pos,stream);
424 return;
425
426 case UNOP_TRUNC:
427 print_simple_m2_func("TRUNC",exp,pos,stream);
428 return;
429
430 case BINOP_INCL:
431 case BINOP_EXCL:
432 error("print_subexp: Not implemented.");
433
434 /* Default ops */
435
bd5635a1 436 default:
28de880c
JG
437 op_str = "???";
438 for (tem = 0; op_print_tab[tem].opcode != OP_NULL; tem++)
bd5635a1
RP
439 if (op_print_tab[tem].opcode == opcode)
440 {
441 op_str = op_print_tab[tem].string;
442 myprec = op_print_tab[tem].precedence;
443 assoc = op_print_tab[tem].right_assoc;
444 break;
445 }
f661c4ca
PS
446 if (op_print_tab[tem].opcode != opcode)
447 /* Not found; don't try to keep going because we don't know how
448 to interpret further elements. For example, this happens
449 if opcode is OP_TYPE. */
450 error ("Invalid expression");
28de880c 451 }
bd5635a1
RP
452
453 if ((int) myprec < (int) prec)
10147c02 454 fputs_filtered ("(", stream);
bd5635a1
RP
455 if ((int) opcode > (int) BINOP_END)
456 {
dcda44a0
PB
457 if (assoc)
458 {
459 /* Unary postfix operator. */
460 print_subexp (exp, pos, stream, PREC_SUFFIX);
461 fputs_filtered (op_str, stream);
462 }
463 else
464 {
465 /* Unary prefix operator. */
466 fputs_filtered (op_str, stream);
467 print_subexp (exp, pos, stream, PREC_PREFIX);
468 }
bd5635a1
RP
469 }
470 else
471 {
472 /* Binary operator. */
473 /* Print left operand.
474 If operator is right-associative,
475 increment precedence for this operand. */
10147c02
JG
476 print_subexp (exp, pos, stream,
477 (enum precedence) ((int) myprec + assoc));
bd5635a1
RP
478 /* Print the operator itself. */
479 if (assign_modify)
10147c02 480 fprintf_filtered (stream, " %s= ", op_str);
bd5635a1 481 else if (op_str[0] == ',')
10147c02 482 fprintf_filtered (stream, "%s ", op_str);
bd5635a1 483 else
10147c02 484 fprintf_filtered (stream, " %s ", op_str);
bd5635a1
RP
485 /* Print right operand.
486 If operator is left-associative,
487 increment precedence for this operand. */
10147c02
JG
488 print_subexp (exp, pos, stream,
489 (enum precedence) ((int) myprec + !assoc));
bd5635a1 490 }
28de880c 491
bd5635a1 492 if ((int) myprec < (int) prec)
10147c02 493 fputs_filtered (")", stream);
bd5635a1 494}
28de880c
JG
495
496/* Print out something of the form <s>(<arg>).
497 This is used to print out some builtin Modula-2
498 functions.
499 FIXME: There is probably some way to get the precedence
500 rules to do this (print a unary operand with parens around it). */
501static void
502print_simple_m2_func(s,exp,pos,stream)
503 char *s;
504 register struct expression *exp;
505 register int *pos;
dcda44a0 506 GDB_FILE *stream;
28de880c 507{
dcda44a0 508 fprintf_unfiltered(stream,"%s(",s);
28de880c 509 print_subexp(exp,pos,stream,PREC_PREFIX);
dcda44a0 510 fprintf_unfiltered(stream,")");
28de880c
JG
511}
512
513/* Return the operator corresponding to opcode OP as
514 a string. NULL indicates that the opcode was not found in the
515 current language table. */
516char *
517op_string(op)
518 enum exp_opcode op;
519{
520 int tem;
521 register const struct op_print *op_print_tab;
522
523 op_print_tab = current_language->la_op_print_tab;
524 for (tem = 0; op_print_tab[tem].opcode != OP_NULL; tem++)
525 if (op_print_tab[tem].opcode == op)
526 return op_print_tab[tem].string;
527 return NULL;
528}
54bbbfb4
FF
529
530#ifdef DEBUG_EXPRESSIONS
531
532/* Support for dumping the raw data from expressions in a human readable
533 form. */
534
535void
536dump_expression (exp, stream, note)
537 struct expression *exp;
dcda44a0 538 GDB_FILE *stream;
54bbbfb4
FF
539 char *note;
540{
541 int elt;
542 char *opcode_name;
543 char *eltscan;
544 int eltsize;
545
dcda44a0
PB
546 fprintf_filtered (stream, "Dump of expression @ ");
547 gdb_print_address (exp, stream);
548 fprintf_filtered (stream, ", %s:\n", note);
54bbbfb4
FF
549 fprintf_filtered (stream, "\tLanguage %s, %d elements, %d bytes each.\n",
550 exp->language_defn->la_name, exp -> nelts,
551 sizeof (union exp_element));
552 fprintf_filtered (stream, "\t%5s %20s %16s %s\n", "Index", "Opcode",
553 "Hex Value", "String Value");
554 for (elt = 0; elt < exp -> nelts; elt++)
555 {
556 fprintf_filtered (stream, "\t%5d ", elt);
557 switch (exp -> elts[elt].opcode)
558 {
559 default: opcode_name = "<unknown>"; break;
560 case OP_NULL: opcode_name = "OP_NULL"; break;
561 case BINOP_ADD: opcode_name = "BINOP_ADD"; break;
562 case BINOP_SUB: opcode_name = "BINOP_SUB"; break;
563 case BINOP_MUL: opcode_name = "BINOP_MUL"; break;
564 case BINOP_DIV: opcode_name = "BINOP_DIV"; break;
565 case BINOP_REM: opcode_name = "BINOP_REM"; break;
76a0ffb4 566 case BINOP_MOD: opcode_name = "BINOP_MOD"; break;
54bbbfb4
FF
567 case BINOP_LSH: opcode_name = "BINOP_LSH"; break;
568 case BINOP_RSH: opcode_name = "BINOP_RSH"; break;
569 case BINOP_LOGICAL_AND: opcode_name = "BINOP_LOGICAL_AND"; break;
570 case BINOP_LOGICAL_OR: opcode_name = "BINOP_LOGICAL_OR"; break;
571 case BINOP_BITWISE_AND: opcode_name = "BINOP_BITWISE_AND"; break;
572 case BINOP_BITWISE_IOR: opcode_name = "BINOP_BITWISE_IOR"; break;
573 case BINOP_BITWISE_XOR: opcode_name = "BINOP_BITWISE_XOR"; break;
574 case BINOP_EQUAL: opcode_name = "BINOP_EQUAL"; break;
575 case BINOP_NOTEQUAL: opcode_name = "BINOP_NOTEQUAL"; break;
576 case BINOP_LESS: opcode_name = "BINOP_LESS"; break;
577 case BINOP_GTR: opcode_name = "BINOP_GTR"; break;
578 case BINOP_LEQ: opcode_name = "BINOP_LEQ"; break;
579 case BINOP_GEQ: opcode_name = "BINOP_GEQ"; break;
580 case BINOP_REPEAT: opcode_name = "BINOP_REPEAT"; break;
581 case BINOP_ASSIGN: opcode_name = "BINOP_ASSIGN"; break;
582 case BINOP_COMMA: opcode_name = "BINOP_COMMA"; break;
583 case BINOP_SUBSCRIPT: opcode_name = "BINOP_SUBSCRIPT"; break;
584 case MULTI_SUBSCRIPT: opcode_name = "MULTI_SUBSCRIPT"; break;
585 case BINOP_EXP: opcode_name = "BINOP_EXP"; break;
586 case BINOP_MIN: opcode_name = "BINOP_MIN"; break;
587 case BINOP_MAX: opcode_name = "BINOP_MAX"; break;
588 case BINOP_SCOPE: opcode_name = "BINOP_SCOPE"; break;
589 case STRUCTOP_MEMBER: opcode_name = "STRUCTOP_MEMBER"; break;
590 case STRUCTOP_MPTR: opcode_name = "STRUCTOP_MPTR"; break;
591 case BINOP_INTDIV: opcode_name = "BINOP_INTDIV"; break;
592 case BINOP_ASSIGN_MODIFY: opcode_name = "BINOP_ASSIGN_MODIFY"; break;
593 case BINOP_VAL: opcode_name = "BINOP_VAL"; break;
594 case BINOP_INCL: opcode_name = "BINOP_INCL"; break;
595 case BINOP_EXCL: opcode_name = "BINOP_EXCL"; break;
f661c4ca 596 case BINOP_CONCAT: opcode_name = "BINOP_CONCAT"; break;
54bbbfb4
FF
597 case BINOP_END: opcode_name = "BINOP_END"; break;
598 case TERNOP_COND: opcode_name = "TERNOP_COND"; break;
599 case OP_LONG: opcode_name = "OP_LONG"; break;
600 case OP_DOUBLE: opcode_name = "OP_DOUBLE"; break;
601 case OP_VAR_VALUE: opcode_name = "OP_VAR_VALUE"; break;
602 case OP_LAST: opcode_name = "OP_LAST"; break;
603 case OP_REGISTER: opcode_name = "OP_REGISTER"; break;
604 case OP_INTERNALVAR: opcode_name = "OP_INTERNALVAR"; break;
605 case OP_FUNCALL: opcode_name = "OP_FUNCALL"; break;
606 case OP_STRING: opcode_name = "OP_STRING"; break;
c4413e2c
FF
607 case OP_BITSTRING: opcode_name = "OP_BITSTRING"; break;
608 case OP_ARRAY: opcode_name = "OP_ARRAY"; break;
54bbbfb4
FF
609 case UNOP_CAST: opcode_name = "UNOP_CAST"; break;
610 case UNOP_MEMVAL: opcode_name = "UNOP_MEMVAL"; break;
611 case UNOP_NEG: opcode_name = "UNOP_NEG"; break;
612 case UNOP_LOGICAL_NOT: opcode_name = "UNOP_LOGICAL_NOT"; break;
613 case UNOP_COMPLEMENT: opcode_name = "UNOP_COMPLEMENT"; break;
614 case UNOP_IND: opcode_name = "UNOP_IND"; break;
615 case UNOP_ADDR: opcode_name = "UNOP_ADDR"; break;
616 case UNOP_PREINCREMENT: opcode_name = "UNOP_PREINCREMENT"; break;
617 case UNOP_POSTINCREMENT: opcode_name = "UNOP_POSTINCREMENT"; break;
618 case UNOP_PREDECREMENT: opcode_name = "UNOP_PREDECREMENT"; break;
619 case UNOP_POSTDECREMENT: opcode_name = "UNOP_POSTDECREMENT"; break;
620 case UNOP_SIZEOF: opcode_name = "UNOP_SIZEOF"; break;
621 case UNOP_PLUS: opcode_name = "UNOP_PLUS"; break;
622 case UNOP_CAP: opcode_name = "UNOP_CAP"; break;
623 case UNOP_CHR: opcode_name = "UNOP_CHR"; break;
624 case UNOP_ORD: opcode_name = "UNOP_ORD"; break;
625 case UNOP_ABS: opcode_name = "UNOP_ABS"; break;
626 case UNOP_FLOAT: opcode_name = "UNOP_FLOAT"; break;
627 case UNOP_HIGH: opcode_name = "UNOP_HIGH"; break;
628 case UNOP_MAX: opcode_name = "UNOP_MAX"; break;
629 case UNOP_MIN: opcode_name = "UNOP_MIN"; break;
630 case UNOP_ODD: opcode_name = "UNOP_ODD"; break;
631 case UNOP_TRUNC: opcode_name = "UNOP_TRUNC"; break;
632 case OP_BOOL: opcode_name = "OP_BOOL"; break;
633 case OP_M2_STRING: opcode_name = "OP_M2_STRING"; break;
634 case STRUCTOP_STRUCT: opcode_name = "STRUCTOP_STRUCT"; break;
635 case STRUCTOP_PTR: opcode_name = "STRUCTOP_PTR"; break;
636 case OP_THIS: opcode_name = "OP_THIS"; break;
637 case OP_SCOPE: opcode_name = "OP_SCOPE"; break;
638 case OP_TYPE: opcode_name = "OP_TYPE"; break;
dcda44a0 639 case OP_LABELED: opcode_name = "OP_LABELED"; break;
54bbbfb4
FF
640 }
641 fprintf_filtered (stream, "%20s ", opcode_name);
642 fprintf_filtered (stream,
dcda44a0 643#if defined (PRINTF_HAS_LONG_LONG)
54bbbfb4
FF
644 "%ll16x ",
645#else
646 "%l16x ",
647#endif
648 exp -> elts[elt].longconst);
649
650 for (eltscan = (char *) &exp->elts[elt],
651 eltsize = sizeof (union exp_element) ;
652 eltsize-- > 0;
653 eltscan++)
654 {
655 fprintf_filtered (stream, "%c",
656 isprint (*eltscan) ? (*eltscan & 0xFF) : '.');
657 }
658 fprintf_filtered (stream, "\n");
659 }
660}
661
662#endif /* DEBUG_EXPRESSIONS */
This page took 0.201416 seconds and 4 git commands to generate.