diff options
Diffstat (limited to 'gdb/expprint.c')
-rw-r--r-- | gdb/expprint.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/gdb/expprint.c b/gdb/expprint.c index b3337cd..db196a1 100644 --- a/gdb/expprint.c +++ b/gdb/expprint.c @@ -29,6 +29,7 @@ #include "block.h" #include "objfiles.h" #include "valprint.h" +#include "f-lang.h" #include <ctype.h> @@ -559,6 +560,26 @@ print_subexp_standard (struct expression *exp, int *pos, return; } + case OP_F90_RANGE: + { + enum f90_range_type range_type; + + range_type = (enum f90_range_type) + longest_to_int (exp->elts[pc + 1].longconst); + *pos += 2; + + fputs_filtered ("RANGE(", stream); + if (range_type == HIGH_BOUND_DEFAULT + || range_type == NONE_BOUND_DEFAULT) + print_subexp (exp, pos, stream, PREC_ABOVE_COMMA); + fputs_filtered ("..", stream); + if (range_type == LOW_BOUND_DEFAULT + || range_type == NONE_BOUND_DEFAULT) + print_subexp (exp, pos, stream, PREC_ABOVE_COMMA); + fputs_filtered (")", stream); + return; + } + /* Default ops */ default: @@ -1025,6 +1046,42 @@ dump_subexp_body_standard (struct expression *exp, elt += 2; } break; + case OP_F90_RANGE: + { + enum f90_range_type range_type; + + range_type = (enum f90_range_type) + longest_to_int (exp->elts[elt].longconst); + elt += 2; + + switch (range_type) + { + case BOTH_BOUND_DEFAULT: + fputs_filtered ("Range '..'", stream); + break; + case LOW_BOUND_DEFAULT: + fputs_filtered ("Range '..EXP'", stream); + break; + case HIGH_BOUND_DEFAULT: + fputs_filtered ("Range 'EXP..'", stream); + break; + case NONE_BOUND_DEFAULT: + fputs_filtered ("Range 'EXP..EXP'", stream); + break; + default: + fputs_filtered ("Invalid Range!", stream); + break; + } + + if (range_type == HIGH_BOUND_DEFAULT + || range_type == NONE_BOUND_DEFAULT) + elt = dump_subexp (exp, stream, elt); + if (range_type == LOW_BOUND_DEFAULT + || range_type == NONE_BOUND_DEFAULT) + elt = dump_subexp (exp, stream, elt); + } + break; + default: case OP_NULL: case MULTI_SUBSCRIPT: |