forked from Imagelibrary/binutils-gdb
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.
This commit is contained in:
@@ -1,3 +1,37 @@
|
|||||||
|
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>
|
2020-09-16 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* ada-lang.c (ada_language_data): Remove la_language initializer.
|
* ada-lang.c (ada_language_data): Remove la_language initializer.
|
||||||
|
|||||||
@@ -13716,7 +13716,6 @@ extern const struct language_data ada_language_data =
|
|||||||
&ada_exp_descriptor,
|
&ada_exp_descriptor,
|
||||||
true, /* la_store_sym_names_in_linkage_form_p */
|
true, /* la_store_sym_names_in_linkage_form_p */
|
||||||
ada_op_print_tab, /* expression operators for printing */
|
ada_op_print_tab, /* expression operators for printing */
|
||||||
0, /* c-style arrays */
|
|
||||||
1, /* String lower bound */
|
1, /* String lower bound */
|
||||||
&ada_varobj_ops,
|
&ada_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -14200,6 +14199,11 @@ public:
|
|||||||
const char *struct_too_deep_ellipsis () const override
|
const char *struct_too_deep_ellipsis () const override
|
||||||
{ return "(...)"; }
|
{ return "(...)"; }
|
||||||
|
|
||||||
|
/* See language.h. */
|
||||||
|
|
||||||
|
bool c_style_arrays_p () const override
|
||||||
|
{ return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* See language.h. */
|
/* See language.h. */
|
||||||
|
|
||||||
|
|||||||
@@ -882,7 +882,6 @@ extern const struct language_data c_language_data =
|
|||||||
&exp_descriptor_c,
|
&exp_descriptor_c,
|
||||||
true, /* la_store_sym_names_in_linkage_form_p */
|
true, /* la_store_sym_names_in_linkage_form_p */
|
||||||
c_op_print_tab, /* expression operators for printing */
|
c_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&c_varobj_ops,
|
&c_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -990,7 +989,6 @@ extern const struct language_data cplus_language_data =
|
|||||||
&exp_descriptor_c,
|
&exp_descriptor_c,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
c_op_print_tab, /* expression operators for printing */
|
c_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&cplus_varobj_ops,
|
&cplus_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -1201,7 +1199,6 @@ extern const struct language_data asm_language_data =
|
|||||||
&exp_descriptor_c,
|
&exp_descriptor_c,
|
||||||
true, /* la_store_sym_names_in_linkage_form_p */
|
true, /* la_store_sym_names_in_linkage_form_p */
|
||||||
c_op_print_tab, /* expression operators for printing */
|
c_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -1270,7 +1267,6 @@ extern const struct language_data minimal_language_data =
|
|||||||
&exp_descriptor_c,
|
&exp_descriptor_c,
|
||||||
true, /* la_store_sym_names_in_linkage_form_p */
|
true, /* la_store_sym_names_in_linkage_form_p */
|
||||||
c_op_print_tab, /* expression operators for printing */
|
c_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -135,7 +135,6 @@ extern const struct language_data d_language_data =
|
|||||||
&exp_descriptor_c,
|
&exp_descriptor_c,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
d_op_print_tab, /* Expression operators for printing. */
|
d_op_print_tab, /* Expression operators for printing. */
|
||||||
1, /* C-style arrays. */
|
|
||||||
0, /* String lower bound. */
|
0, /* String lower bound. */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -622,7 +622,7 @@ ptrmath_type_p (const struct language_defn *lang, struct type *type)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case TYPE_CODE_ARRAY:
|
case TYPE_CODE_ARRAY:
|
||||||
return type->is_vector () ? 0 : lang->c_style_arrays;
|
return type->is_vector () ? 0 : lang->c_style_arrays_p ();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -493,7 +493,6 @@ extern const struct language_data f_language_data =
|
|||||||
&exp_descriptor_f,
|
&exp_descriptor_f,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
f_op_print_tab, /* expression operators for printing */
|
f_op_print_tab, /* expression operators for printing */
|
||||||
0, /* arrays are first-class (not c-style) */
|
|
||||||
1, /* String lower bound */
|
1, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -720,6 +719,11 @@ public:
|
|||||||
const char *struct_too_deep_ellipsis () const override
|
const char *struct_too_deep_ellipsis () const override
|
||||||
{ return "(...)"; }
|
{ return "(...)"; }
|
||||||
|
|
||||||
|
/* See language.h. */
|
||||||
|
|
||||||
|
bool c_style_arrays_p () const override
|
||||||
|
{ return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/* See language.h. */
|
/* See language.h. */
|
||||||
|
|||||||
@@ -515,7 +515,6 @@ extern const struct language_data go_language_data =
|
|||||||
&exp_descriptor_c,
|
&exp_descriptor_c,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
go_op_print_tab, /* Expression operators for printing. */
|
go_op_print_tab, /* Expression operators for printing. */
|
||||||
1, /* C-style arrays. */
|
|
||||||
0, /* String lower bound. */
|
0, /* String lower bound. */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ value_arg_coerce (struct gdbarch *gdbarch, struct value *arg,
|
|||||||
/* Arrays are coerced to pointers to their first element, unless
|
/* Arrays are coerced to pointers to their first element, unless
|
||||||
they are vectors, in which case we want to leave them alone,
|
they are vectors, in which case we want to leave them alone,
|
||||||
because they are passed by value. */
|
because they are passed by value. */
|
||||||
if (current_language->c_style_arrays)
|
if (current_language->c_style_arrays_p ())
|
||||||
if (!type->is_vector ())
|
if (!type->is_vector ())
|
||||||
type = lookup_pointer_type (TYPE_TARGET_TYPE (type));
|
type = lookup_pointer_type (TYPE_TARGET_TYPE (type));
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -782,7 +782,6 @@ extern const struct language_data unknown_language_data =
|
|||||||
&exp_descriptor_standard,
|
&exp_descriptor_standard,
|
||||||
true, /* store_sym_names_in_linkage_form_p */
|
true, /* store_sym_names_in_linkage_form_p */
|
||||||
unk_op_print_tab, /* expression operators for printing */
|
unk_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -917,7 +916,6 @@ extern const struct language_data auto_language_data =
|
|||||||
&exp_descriptor_standard,
|
&exp_descriptor_standard,
|
||||||
false, /* store_sym_names_in_linkage_form_p */
|
false, /* store_sym_names_in_linkage_form_p */
|
||||||
unk_op_print_tab, /* expression operators for printing */
|
unk_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -232,11 +232,6 @@ struct language_data
|
|||||||
|
|
||||||
const struct op_print *la_op_print_tab;
|
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. */
|
/* Index to use for extracting the first element of a string. */
|
||||||
char string_lower_bound;
|
char string_lower_bound;
|
||||||
|
|
||||||
@@ -565,6 +560,14 @@ struct language_defn : language_data
|
|||||||
virtual const char *name_of_this () const
|
virtual const char *name_of_this () const
|
||||||
{ return nullptr; }
|
{ 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:
|
protected:
|
||||||
|
|
||||||
/* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
|
/* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
|
||||||
|
|||||||
@@ -206,7 +206,6 @@ extern const struct language_data m2_language_data =
|
|||||||
&exp_descriptor_modula2,
|
&exp_descriptor_modula2,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
m2_op_print_tab, /* expression operators for printing */
|
m2_op_print_tab, /* expression operators for printing */
|
||||||
0, /* arrays are first-class (not c-style) */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
@@ -436,6 +435,11 @@ public:
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See language.h. */
|
||||||
|
|
||||||
|
bool c_style_arrays_p () const override
|
||||||
|
{ return false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Single instance of the M2 language. */
|
/* Single instance of the M2 language. */
|
||||||
|
|||||||
@@ -330,7 +330,6 @@ extern const struct language_data objc_language_data =
|
|||||||
&exp_descriptor_standard,
|
&exp_descriptor_standard,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
objc_op_print_tab, /* Expression operators for printing */
|
objc_op_print_tab, /* Expression operators for printing */
|
||||||
1, /* C-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1013,7 +1013,6 @@ extern const struct language_data opencl_language_data =
|
|||||||
&exp_descriptor_opencl,
|
&exp_descriptor_opencl,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
c_op_print_tab, /* expression operators for printing */
|
c_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -259,7 +259,6 @@ extern const struct language_data pascal_language_data =
|
|||||||
&exp_descriptor_standard,
|
&exp_descriptor_standard,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
pascal_op_print_tab, /* expression operators for printing */
|
pascal_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1908,7 +1908,6 @@ extern const struct language_data rust_language_data =
|
|||||||
&exp_descriptor_rust,
|
&exp_descriptor_rust,
|
||||||
false, /* la_store_sym_names_in_linkage_form_p */
|
false, /* la_store_sym_names_in_linkage_form_p */
|
||||||
c_op_print_tab, /* expression operators for printing */
|
c_op_print_tab, /* expression operators for printing */
|
||||||
1, /* c-style arrays */
|
|
||||||
0, /* String lower bound */
|
0, /* String lower bound */
|
||||||
&default_varobj_ops,
|
&default_varobj_ops,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ value_ptrdiff (struct value *arg1, struct value *arg2)
|
|||||||
struct value *
|
struct value *
|
||||||
value_subscript (struct value *array, LONGEST index)
|
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;
|
struct type *tarray;
|
||||||
|
|
||||||
array = coerce_ref (array);
|
array = coerce_ref (array);
|
||||||
@@ -156,7 +156,7 @@ value_subscript (struct value *array, LONGEST index)
|
|||||||
if (VALUE_LVAL (array) != lval_memory)
|
if (VALUE_LVAL (array) != lval_memory)
|
||||||
return value_subscripted_rvalue (array, index, lowerbound);
|
return value_subscripted_rvalue (array, index, lowerbound);
|
||||||
|
|
||||||
if (c_style == 0)
|
if (!c_style)
|
||||||
{
|
{
|
||||||
if (index >= lowerbound && index <= upperbound)
|
if (index >= lowerbound && index <= upperbound)
|
||||||
return value_subscripted_rvalue (array, index, lowerbound);
|
return value_subscripted_rvalue (array, index, lowerbound);
|
||||||
@@ -165,7 +165,7 @@ value_subscript (struct value *array, LONGEST index)
|
|||||||
if (upperbound > -1)
|
if (upperbound > -1)
|
||||||
warning (_("array or string index out of range"));
|
warning (_("array or string index out of range"));
|
||||||
/* fall doing C stuff */
|
/* fall doing C stuff */
|
||||||
c_style = 1;
|
c_style = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
index -= lowerbound;
|
index -= lowerbound;
|
||||||
|
|||||||
@@ -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->code () == TYPE_CODE_ARRAY
|
||||||
&& !type2->is_vector ())
|
&& !type2->is_vector ())
|
||||||
arg2 = value_coerce_array (arg2);
|
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]),
|
arraytype = lookup_array_range_type (value_enclosing_type (elemvec[0]),
|
||||||
lowbound, highbound);
|
lowbound, highbound);
|
||||||
|
|
||||||
if (!current_language->c_style_arrays)
|
if (!current_language->c_style_arrays_p ())
|
||||||
{
|
{
|
||||||
val = allocate_value (arraytype);
|
val = allocate_value (arraytype);
|
||||||
for (idx = 0; idx < nelem; idx++)
|
for (idx = 0; idx < nelem; idx++)
|
||||||
|
|||||||
@@ -3687,7 +3687,7 @@ coerce_array (struct value *arg)
|
|||||||
switch (type->code ())
|
switch (type->code ())
|
||||||
{
|
{
|
||||||
case TYPE_CODE_ARRAY:
|
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);
|
arg = value_coerce_array (arg);
|
||||||
break;
|
break;
|
||||||
case TYPE_CODE_FUNC:
|
case TYPE_CODE_FUNC:
|
||||||
|
|||||||
Reference in New Issue
Block a user