aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog17
-rw-r--r--gdb/eval.c8
-rw-r--r--gdb/expprint.c13
-rw-r--r--gdb/expression.h13
-rw-r--r--gdb/f-exp.y16
-rw-r--r--gdb/f-lang.h13
-rw-r--r--gdb/parse.c6
-rw-r--r--gdb/rust-exp.y11
-rw-r--r--gdb/rust-lang.c13
-rw-r--r--gdb/std-operator.def5
10 files changed, 65 insertions, 50 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3b4b9d3..b7a6351 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,22 @@
2016-05-17 Tom Tromey <tom@tromey.com>
+ * std-operator.def (OP_RANGE): Rename from OP_F90_RANGE.
+ * rust-lang.c: Don't include f-lang.h.
+ (rust_range, rust_compute_range, rust_subscript)
+ (rust_evaluate_subexp): Update.
+ * rust-exp.y: Don't include f-lang.h.
+ (ast_range, convert_ast_to_expression): Update.
+ * parse.c (operator_length_standard): Update.
+ * f-lang.h (enum f90_range_type): Move to expression.h.
+ * f-exp.y: Use OP_RANGE.
+ * expression.h (enum range_type): New enum; renamed from
+ f90_range_type.
+ * expprint.c: Don't include f-lang.h.
+ (print_subexp_standard, dump_subexp_body_standard): Use OP_RANGE.
+ * eval.c (value_f90_subarray, evaluate_subexp_standard): Update.
+
+2016-05-17 Tom Tromey <tom@tromey.com>
+
* NEWS: Add Rust item.
2016-05-17 Tom Tromey <tom@tromey.com>
diff --git a/gdb/eval.c b/gdb/eval.c
index 5d32a3c..3f8ca66 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -406,8 +406,8 @@ value_f90_subarray (struct value *array,
int pc = (*pos) + 1;
LONGEST low_bound, high_bound;
struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array)));
- enum f90_range_type range_type
- = (enum f90_range_type) longest_to_int (exp->elts[pc].longconst);
+ enum range_type range_type
+ = (enum range_type) longest_to_int (exp->elts[pc].longconst);
*pos += 3;
@@ -1810,13 +1810,13 @@ evaluate_subexp_standard (struct type *expect_type,
switch (code)
{
case TYPE_CODE_ARRAY:
- if (exp->elts[*pos].opcode == OP_F90_RANGE)
+ if (exp->elts[*pos].opcode == OP_RANGE)
return value_f90_subarray (arg1, exp, pos, noside);
else
goto multi_f77_subscript;
case TYPE_CODE_STRING:
- if (exp->elts[*pos].opcode == OP_F90_RANGE)
+ if (exp->elts[*pos].opcode == OP_RANGE)
return value_f90_subarray (arg1, exp, pos, noside);
else
{
diff --git a/gdb/expprint.c b/gdb/expprint.c
index db196a1..c37ecb0 100644
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
@@ -29,7 +29,6 @@
#include "block.h"
#include "objfiles.h"
#include "valprint.h"
-#include "f-lang.h"
#include <ctype.h>
@@ -560,11 +559,11 @@ print_subexp_standard (struct expression *exp, int *pos,
return;
}
- case OP_F90_RANGE:
+ case OP_RANGE:
{
- enum f90_range_type range_type;
+ enum range_type range_type;
- range_type = (enum f90_range_type)
+ range_type = (enum range_type)
longest_to_int (exp->elts[pc + 1].longconst);
*pos += 2;
@@ -1046,11 +1045,11 @@ dump_subexp_body_standard (struct expression *exp,
elt += 2;
}
break;
- case OP_F90_RANGE:
+ case OP_RANGE:
{
- enum f90_range_type range_type;
+ enum range_type range_type;
- range_type = (enum f90_range_type)
+ range_type = (enum range_type)
longest_to_int (exp->elts[elt].longconst);
elt += 2;
diff --git a/gdb/expression.h b/gdb/expression.h
index 9986b20..4952d84 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -152,4 +152,17 @@ extern void dump_raw_expression (struct expression *,
struct ui_file *, char *);
extern void dump_prefix_expression (struct expression *, struct ui_file *);
+/* In an OP_RANGE expression, either bound could be empty, indicating
+ that its value is by default that of the corresponding bound of the
+ array or string. So we have four sorts of subrange. This
+ enumeration type is to identify this. */
+
+enum range_type
+ {
+ BOTH_BOUND_DEFAULT, /* "(:)" */
+ LOW_BOUND_DEFAULT, /* "(:high)" */
+ HIGH_BOUND_DEFAULT, /* "(low:)" */
+ NONE_BOUND_DEFAULT /* "(low:high)" */
+ };
+
#endif /* !defined (EXPRESSION_H) */
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index cd659a1..e3148a3 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -258,27 +258,27 @@ arglist : arglist ',' exp %prec ABOVE_COMMA
/* There are four sorts of subrange types in F90. */
subrange: exp ':' exp %prec ABOVE_COMMA
- { write_exp_elt_opcode (pstate, OP_F90_RANGE);
+ { write_exp_elt_opcode (pstate, OP_RANGE);
write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT);
- write_exp_elt_opcode (pstate, OP_F90_RANGE); }
+ write_exp_elt_opcode (pstate, OP_RANGE); }
;
subrange: exp ':' %prec ABOVE_COMMA
- { write_exp_elt_opcode (pstate, OP_F90_RANGE);
+ { write_exp_elt_opcode (pstate, OP_RANGE);
write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT);
- write_exp_elt_opcode (pstate, OP_F90_RANGE); }
+ write_exp_elt_opcode (pstate, OP_RANGE); }
;
subrange: ':' exp %prec ABOVE_COMMA
- { write_exp_elt_opcode (pstate, OP_F90_RANGE);
+ { write_exp_elt_opcode (pstate, OP_RANGE);
write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT);
- write_exp_elt_opcode (pstate, OP_F90_RANGE); }
+ write_exp_elt_opcode (pstate, OP_RANGE); }
;
subrange: ':' %prec ABOVE_COMMA
- { write_exp_elt_opcode (pstate, OP_F90_RANGE);
+ { write_exp_elt_opcode (pstate, OP_RANGE);
write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT);
- write_exp_elt_opcode (pstate, OP_F90_RANGE); }
+ write_exp_elt_opcode (pstate, OP_RANGE); }
;
complexnum: exp ',' exp
diff --git a/gdb/f-lang.h b/gdb/f-lang.h
index 45df770..827785a 100644
--- a/gdb/f-lang.h
+++ b/gdb/f-lang.h
@@ -37,19 +37,6 @@ extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
/* Language-specific data structures */
-/* In F90 subrange expression, either bound could be empty, indicating that
- its value is by default that of the corresponding bound of the array or
- string. So we have four sorts of subrange in F90. This enumeration type
- is to identify this. */
-
-enum f90_range_type
- {
- BOTH_BOUND_DEFAULT, /* "(:)" */
- LOW_BOUND_DEFAULT, /* "(:high)" */
- HIGH_BOUND_DEFAULT, /* "(low:)" */
- NONE_BOUND_DEFAULT /* "(low:high)" */
- };
-
/* A common block. */
struct common_block
diff --git a/gdb/parse.c b/gdb/parse.c
index 4191fc6..2b00708 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -862,7 +862,7 @@ operator_length_standard (const struct expression *expr, int endpos,
{
int oplen = 1;
int args = 0;
- enum f90_range_type range_type;
+ enum range_type range_type;
int i;
if (endpos < 1)
@@ -1004,9 +1004,9 @@ operator_length_standard (const struct expression *expr, int endpos,
oplen = 2;
break;
- case OP_F90_RANGE:
+ case OP_RANGE:
oplen = 3;
- range_type = (enum f90_range_type)
+ range_type = (enum range_type)
longest_to_int (expr->elts[endpos - 2].longconst);
switch (range_type)
diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
index f0c4e6c..c1a863c 100644
--- a/gdb/rust-exp.y
+++ b/gdb/rust-exp.y
@@ -26,7 +26,6 @@
#include "block.h"
#include "charset.h"
#include "cp-support.h"
-#include "f-lang.h"
#include "gdb_obstack.h"
#include "gdb_regex.h"
#include "rust-lang.h"
@@ -1787,7 +1786,7 @@ ast_range (const struct rust_op *lhs, const struct rust_op *rhs)
{
struct rust_op *result = OBSTACK_ZALLOC (&work_obstack, struct rust_op);
- result->opcode = OP_F90_RANGE;
+ result->opcode = OP_RANGE;
result->left.op = lhs;
result->right.op = rhs;
@@ -2417,9 +2416,9 @@ convert_ast_to_expression (struct parser_state *state,
}
break;
- case OP_F90_RANGE:
+ case OP_RANGE:
{
- enum f90_range_type kind = BOTH_BOUND_DEFAULT;
+ enum range_type kind = BOTH_BOUND_DEFAULT;
if (operation->left.op != NULL)
{
@@ -2437,9 +2436,9 @@ convert_ast_to_expression (struct parser_state *state,
kind = NONE_BOUND_DEFAULT;
}
}
- write_exp_elt_opcode (state, OP_F90_RANGE);
+ write_exp_elt_opcode (state, OP_RANGE);
write_exp_elt_longcst (state, kind);
- write_exp_elt_opcode (state, OP_F90_RANGE);
+ write_exp_elt_opcode (state, OP_RANGE);
}
break;
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 4278621..b8af166 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -25,7 +25,6 @@
#include "c-lang.h"
#include "charset.h"
#include "cp-support.h"
-#include "f-lang.h"
#include "gdbarch.h"
#include "infcall.h"
#include "objfiles.h"
@@ -1172,12 +1171,12 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
return result;
}
-/* A helper for rust_evaluate_subexp that handles OP_F90_RANGE. */
+/* A helper for rust_evaluate_subexp that handles OP_RANGE. */
static struct value *
rust_range (struct expression *exp, int *pos, enum noside noside)
{
- enum f90_range_type kind;
+ enum range_type kind;
struct value *low = NULL, *high = NULL;
struct value *addrval, *result;
CORE_ADDR addr;
@@ -1186,7 +1185,7 @@ rust_range (struct expression *exp, int *pos, enum noside noside)
struct type *temp_type;
const char *name;
- kind = (enum f90_range_type) longest_to_int (exp->elts[*pos + 1].longconst);
+ kind = (enum range_type) longest_to_int (exp->elts[*pos + 1].longconst);
*pos += 3;
if (kind == HIGH_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT)
@@ -1274,7 +1273,7 @@ rust_range (struct expression *exp, int *pos, enum noside noside)
static void
rust_compute_range (struct type *type, struct value *range,
LONGEST *low, LONGEST *high,
- enum f90_range_type *kind)
+ enum range_type *kind)
{
int i;
@@ -1311,7 +1310,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
struct type *rhstype;
LONGEST low, high, high_bound;
/* Initialized to appease the compiler. */
- enum f90_range_type kind = BOTH_BOUND_DEFAULT;
+ enum range_type kind = BOTH_BOUND_DEFAULT;
int want_slice = 0;
++*pos;
@@ -1699,7 +1698,7 @@ which has only anonymous fields"),
}
break;
- case OP_F90_RANGE:
+ case OP_RANGE:
result = rust_range (exp, pos, noside);
break;
diff --git a/gdb/std-operator.def b/gdb/std-operator.def
index 08f0d5b..6123957 100644
--- a/gdb/std-operator.def
+++ b/gdb/std-operator.def
@@ -292,8 +292,9 @@ OP (OP_NAME)
/* An Objective C Foundation Class NSString constant. */
OP (OP_OBJC_NSSTRING)
-/* A F90 array range operator (for "exp:exp", "exp:", ":exp" and ":"). */
-OP (OP_F90_RANGE)
+/* An array range operator (in Fortran 90, for "exp:exp", "exp:",
+ ":exp" and ":"). */
+OP (OP_RANGE)
/* OP_DECFLOAT is followed by a type pointer in the next exp_element
and a dec long constant value in the following exp_element.