diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-07-04 09:06:08 +0100 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-09-16 10:16:47 +0100 |
commit | 67bd3fd5e4d1bf9f1730eaf6ed9fa9df89904fc2 (patch) | |
tree | 3165b7d615b9de7ee5acfc311221fe2efda09acc /gdb | |
parent | 85967615df75e299b375223cc5d211ef78fcf3e8 (diff) | |
download | gdb-67bd3fd5e4d1bf9f1730eaf6ed9fa9df89904fc2.zip gdb-67bd3fd5e4d1bf9f1730eaf6ed9fa9df89904fc2.tar.gz gdb-67bd3fd5e4d1bf9f1730eaf6ed9fa9df89904fc2.tar.bz2 |
gdb: Convert language_data::c_style_arrays to a method
Convert language_data::c_style_arrays member variable to a virtual
method language_defn::c_style_arrays_p.
There should be no user visible changes after this commit.
gdb/ChangeLog:
* ada-lang.c (ada_language_data): Remove c_style_arrays
initializer.
(ada_language::c_style_arrays_p): New member fuction.
* c-lang.c (c_language_data): Remove c_style_arrays
initializer.
(cplus_language_data): Likewise.
(asm_language_data): Likewise.
(minimal_language_data): Likewise.
* d-lang.c (d_language_data): Likewise.
* eval.c (ptrmath_type_p): Update call to c_style_arrays_p.
* f-lang.c (f_language_data): Remove c_style_arrays initializer.
(f_language::c_style_arrays_p): New member function.
* go-lang.c (go_language_data): Remove c_style_arrays initializer.
* infcall.c (value_arg_coerce): Update call to c_style_arrays_p.
* language.c (unknown_language_data): Remove c_style_arrays
initializer.
(auto_language_data): Likewise.
* language.h (language_data): Remove c_style_arrays field.
(language_defn::c_style_arrays_p): New member function.
* m2-lang.c (m2_language_data): Remove c_style_arrays initializer.
(m2_language::c_style_arrays_p): New member function.
* objc-lang.c (objc_language_data): Remove c_style_arrays
initializer.
* opencl-lang.c (opencl_language_data): Likewise.
* p-lang.c (pascal_language_data): Likewise.
* rust-lang.c (rust_language_data): Likewise.
* valarith.c (value_subscript): Update call to c_style_arrays_p,
and update local variable to a bool.
* valops.c (value_cast): Update call to c_style_arrays_p.
(value_array): Likewise.
* value.c (coerce_array): Likewise.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 34 | ||||
-rw-r--r-- | gdb/ada-lang.c | 6 | ||||
-rw-r--r-- | gdb/c-lang.c | 4 | ||||
-rw-r--r-- | gdb/d-lang.c | 1 | ||||
-rw-r--r-- | gdb/eval.c | 2 | ||||
-rw-r--r-- | gdb/f-lang.c | 6 | ||||
-rw-r--r-- | gdb/go-lang.c | 1 | ||||
-rw-r--r-- | gdb/infcall.c | 2 | ||||
-rw-r--r-- | gdb/language.c | 2 | ||||
-rw-r--r-- | gdb/language.h | 13 | ||||
-rw-r--r-- | gdb/m2-lang.c | 6 | ||||
-rw-r--r-- | gdb/objc-lang.c | 1 | ||||
-rw-r--r-- | gdb/opencl-lang.c | 1 | ||||
-rw-r--r-- | gdb/p-lang.c | 1 | ||||
-rw-r--r-- | gdb/rust-lang.c | 1 | ||||
-rw-r--r-- | gdb/valarith.c | 6 | ||||
-rw-r--r-- | gdb/valops.c | 4 | ||||
-rw-r--r-- | gdb/value.c | 2 |
18 files changed, 65 insertions, 28 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index dfdd18f..4f4336f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,39 @@ 2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-lang.c (ada_language_data): Remove c_style_arrays + initializer. + (ada_language::c_style_arrays_p): New member fuction. + * c-lang.c (c_language_data): Remove c_style_arrays + initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * eval.c (ptrmath_type_p): Update call to c_style_arrays_p. + * f-lang.c (f_language_data): Remove c_style_arrays initializer. + (f_language::c_style_arrays_p): New member function. + * go-lang.c (go_language_data): Remove c_style_arrays initializer. + * infcall.c (value_arg_coerce): Update call to c_style_arrays_p. + * language.c (unknown_language_data): Remove c_style_arrays + initializer. + (auto_language_data): Likewise. + * language.h (language_data): Remove c_style_arrays field. + (language_defn::c_style_arrays_p): New member function. + * m2-lang.c (m2_language_data): Remove c_style_arrays initializer. + (m2_language::c_style_arrays_p): New member function. + * objc-lang.c (objc_language_data): Remove c_style_arrays + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + * valarith.c (value_subscript): Update call to c_style_arrays_p, + and update local variable to a bool. + * valops.c (value_cast): Update call to c_style_arrays_p. + (value_array): Likewise. + * value.c (coerce_array): Likewise. + +2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-lang.c (ada_language_data): Remove la_language initializer. * c-lang.c (c_language_data): Likewise. (cplus_language_data): Likewise. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index b1127d8..859dcec 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -13716,7 +13716,6 @@ extern const struct language_data ada_language_data = &ada_exp_descriptor, true, /* la_store_sym_names_in_linkage_form_p */ ada_op_print_tab, /* expression operators for printing */ - 0, /* c-style arrays */ 1, /* String lower bound */ &ada_varobj_ops, }; @@ -14200,6 +14199,11 @@ public: const char *struct_too_deep_ellipsis () const override { return "(...)"; } + /* See language.h. */ + + bool c_style_arrays_p () const override + { return false; } + protected: /* See language.h. */ diff --git a/gdb/c-lang.c b/gdb/c-lang.c index d8d66c2..41eac2d 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -882,7 +882,6 @@ extern const struct language_data c_language_data = &exp_descriptor_c, true, /* la_store_sym_names_in_linkage_form_p */ c_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &c_varobj_ops, }; @@ -990,7 +989,6 @@ extern const struct language_data cplus_language_data = &exp_descriptor_c, false, /* la_store_sym_names_in_linkage_form_p */ c_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &cplus_varobj_ops, }; @@ -1201,7 +1199,6 @@ extern const struct language_data asm_language_data = &exp_descriptor_c, true, /* la_store_sym_names_in_linkage_form_p */ c_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; @@ -1270,7 +1267,6 @@ extern const struct language_data minimal_language_data = &exp_descriptor_c, true, /* la_store_sym_names_in_linkage_form_p */ c_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 18f785f..6791208 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -135,7 +135,6 @@ extern const struct language_data d_language_data = &exp_descriptor_c, false, /* la_store_sym_names_in_linkage_form_p */ d_op_print_tab, /* Expression operators for printing. */ - 1, /* C-style arrays. */ 0, /* String lower bound. */ &default_varobj_ops, }; @@ -622,7 +622,7 @@ ptrmath_type_p (const struct language_defn *lang, struct type *type) return 1; case TYPE_CODE_ARRAY: - return type->is_vector () ? 0 : lang->c_style_arrays; + return type->is_vector () ? 0 : lang->c_style_arrays_p (); default: return 0; diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 55d0a7a..649716b 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -493,7 +493,6 @@ extern const struct language_data f_language_data = &exp_descriptor_f, false, /* la_store_sym_names_in_linkage_form_p */ f_op_print_tab, /* expression operators for printing */ - 0, /* arrays are first-class (not c-style) */ 1, /* String lower bound */ &default_varobj_ops, }; @@ -720,6 +719,11 @@ public: const char *struct_too_deep_ellipsis () const override { return "(...)"; } + /* See language.h. */ + + bool c_style_arrays_p () const override + { return false; } + protected: /* See language.h. */ diff --git a/gdb/go-lang.c b/gdb/go-lang.c index ed7fcd1..c2724e3 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -515,7 +515,6 @@ extern const struct language_data go_language_data = &exp_descriptor_c, false, /* la_store_sym_names_in_linkage_form_p */ go_op_print_tab, /* Expression operators for printing. */ - 1, /* C-style arrays. */ 0, /* String lower bound. */ &default_varobj_ops, }; diff --git a/gdb/infcall.c b/gdb/infcall.c index f87b745..8df7523 100644 --- a/gdb/infcall.c +++ b/gdb/infcall.c @@ -219,7 +219,7 @@ value_arg_coerce (struct gdbarch *gdbarch, struct value *arg, /* Arrays are coerced to pointers to their first element, unless they are vectors, in which case we want to leave them alone, because they are passed by value. */ - if (current_language->c_style_arrays) + if (current_language->c_style_arrays_p ()) if (!type->is_vector ()) type = lookup_pointer_type (TYPE_TARGET_TYPE (type)); break; diff --git a/gdb/language.c b/gdb/language.c index 55e8104..9a496ae 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -782,7 +782,6 @@ extern const struct language_data unknown_language_data = &exp_descriptor_standard, true, /* store_sym_names_in_linkage_form_p */ unk_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; @@ -917,7 +916,6 @@ extern const struct language_data auto_language_data = &exp_descriptor_standard, false, /* store_sym_names_in_linkage_form_p */ unk_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; diff --git a/gdb/language.h b/gdb/language.h index 731b641..83014e4 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -232,11 +232,6 @@ struct language_data const struct op_print *la_op_print_tab; - /* Zero if the language has first-class arrays. True if there are no - array values, and array objects decay to pointers, as in C. */ - - char c_style_arrays; - /* Index to use for extracting the first element of a string. */ char string_lower_bound; @@ -565,6 +560,14 @@ struct language_defn : language_data virtual const char *name_of_this () const { return nullptr; } + /* Return false if the language has first-class arrays. Return true if + there are no array values, and array objects decay to pointers, as in + C. The default is true as currently most supported languages behave + in this manor. */ + + virtual bool c_style_arrays_p () const + { return true; } + protected: /* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method. diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 94340b0..9dd5577 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -206,7 +206,6 @@ extern const struct language_data m2_language_data = &exp_descriptor_modula2, false, /* la_store_sym_names_in_linkage_form_p */ m2_op_print_tab, /* expression operators for printing */ - 0, /* arrays are first-class (not c-style) */ 0, /* String lower bound */ &default_varobj_ops, }; @@ -436,6 +435,11 @@ public: return false; } + + /* See language.h. */ + + bool c_style_arrays_p () const override + { return false; } }; /* Single instance of the M2 language. */ diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index f605c21..66b7b50 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -330,7 +330,6 @@ extern const struct language_data objc_language_data = &exp_descriptor_standard, false, /* la_store_sym_names_in_linkage_form_p */ objc_op_print_tab, /* Expression operators for printing */ - 1, /* C-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 2c8dba0..1ac3aa4 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1013,7 +1013,6 @@ extern const struct language_data opencl_language_data = &exp_descriptor_opencl, false, /* la_store_sym_names_in_linkage_form_p */ c_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; diff --git a/gdb/p-lang.c b/gdb/p-lang.c index aef908c..66ba51a 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -259,7 +259,6 @@ extern const struct language_data pascal_language_data = &exp_descriptor_standard, false, /* la_store_sym_names_in_linkage_form_p */ pascal_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 2ceb573..de971e6 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -1908,7 +1908,6 @@ extern const struct language_data rust_language_data = &exp_descriptor_rust, false, /* la_store_sym_names_in_linkage_form_p */ c_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, }; diff --git a/gdb/valarith.c b/gdb/valarith.c index c418fc6..7127a5d 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -140,7 +140,7 @@ value_ptrdiff (struct value *arg1, struct value *arg2) struct value * value_subscript (struct value *array, LONGEST index) { - int c_style = current_language->c_style_arrays; + bool c_style = current_language->c_style_arrays_p (); struct type *tarray; array = coerce_ref (array); @@ -156,7 +156,7 @@ value_subscript (struct value *array, LONGEST index) if (VALUE_LVAL (array) != lval_memory) return value_subscripted_rvalue (array, index, lowerbound); - if (c_style == 0) + if (!c_style) { if (index >= lowerbound && index <= upperbound) return value_subscripted_rvalue (array, index, lowerbound); @@ -165,7 +165,7 @@ value_subscript (struct value *array, LONGEST index) if (upperbound > -1) warning (_("array or string index out of range")); /* fall doing C stuff */ - c_style = 1; + c_style = true; } index -= lowerbound; diff --git a/gdb/valops.c b/gdb/valops.c index 6dc2f54..7b604da 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -414,7 +414,7 @@ value_cast (struct type *type, struct value *arg2) } } - if (current_language->c_style_arrays + if (current_language->c_style_arrays_p () && type2->code () == TYPE_CODE_ARRAY && !type2->is_vector ()) arg2 = value_coerce_array (arg2); @@ -1622,7 +1622,7 @@ value_array (int lowbound, int highbound, struct value **elemvec) arraytype = lookup_array_range_type (value_enclosing_type (elemvec[0]), lowbound, highbound); - if (!current_language->c_style_arrays) + if (!current_language->c_style_arrays_p ()) { val = allocate_value (arraytype); for (idx = 0; idx < nelem; idx++) diff --git a/gdb/value.c b/gdb/value.c index 8f4030e..c72b2fd 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -3687,7 +3687,7 @@ coerce_array (struct value *arg) switch (type->code ()) { case TYPE_CODE_ARRAY: - if (!type->is_vector () && current_language->c_style_arrays) + if (!type->is_vector () && current_language->c_style_arrays_p ()) arg = value_coerce_array (arg); break; case TYPE_CODE_FUNC: |