+2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * ada-lang.c (ada_language_data): Delete la_get_compile_instance
+ initializer.
+ * c-lang.c (class compile_instance): Declare.
+ (c_language_data): Delete la_get_compile_instance initializer.
+ (c_language::get_compile_instance): New member function.
+ (cplus_language_data): Delete la_get_compile_instance initializer.
+ (cplus_language::get_compile_instance): New member function.
+ (asm_language_data): Delete la_get_compile_instance initializer.
+ (minimal_language_data): Likewise.
+ * c-lang.h (c_get_compile_context): Update comment.
+ (cplus_get_compile_context): Update comment.
+ * compile/compile.c (compile_to_object): Update calls, don't rely
+ on function pointer being NULL.
+ * d-lang.c (d_language_data): Delete la_get_compile_instance
+ initializer.
+ * f-lang.c (f_language_data): Likewise.
+ * go-lang.c (go_language_data): Likewise.
+ * language.c (unknown_language_data): Likewise.
+ (auto_language_data): Likewise.
+ * language.h (language_data): Delete la_get_compile_instance field.
+ (language_defn::get_compile_instance): New member function.
+ * m2-lang.c (m2_language_data): Delete la_get_compile_instance
+ initializer.
+ * objc-lang.c (objc_language_data): Likewise.
+ * opencl-lang.c (opencl_language_data): Likewise.
+ * p-lang.c (pascal_language_data): Likewise.
+ * rust-lang.c (rust_language_data): Likewise.
+
2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com>
* ada-lang.c (ada_add_all_symbols): Update comment.
default_search_name_hash,
&ada_varobj_ops,
NULL,
- NULL,
ada_is_string_type,
"(...)" /* la_struct_too_deep_ellipsis */
};
#include "gdbcore.h"
#include "gdbarch.h"
+class compile_instance;
+
/* Given a C string type, STR_TYPE, return the corresponding target
character set name. */
NULL, /* la_get_symbol_name_matcher */
default_search_name_hash,
&c_varobj_ops,
- c_get_compile_context,
c_compute_program,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
{
c_language_arch_info (gdbarch, lai);
}
+
+ /* See language.h. */
+ compile_instance *get_compile_instance () const override
+ {
+ return c_get_compile_context ();
+ }
};
/* Single instance of the C language class. */
cp_get_symbol_name_matcher,
cp_search_name_hash,
&cplus_varobj_ops,
- cplus_get_compile_context,
cplus_compute_program,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
{
return cp_lookup_transparent_type (name);
}
+
+ /* See language.h. */
+ compile_instance *get_compile_instance () const override
+ {
+ return cplus_get_compile_context ();
+ }
};
/* The single instance of the C++ language class. */
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
compiler is owned by the caller and must be freed using the destroy
method. This function never returns NULL, but rather throws an
exception on failure. This is suitable for use as the
- la_get_compile_instance language method. */
+ language_defn::get_compile_instance method. */
extern compile_instance *c_get_compile_context (void);
compiler is owned by the caller and must be freed using the destroy
method. This function never returns NULL, but rather throws an
exception on failure. This is suitable for use as the
- la_get_compile_instance language method. */
+ language_defn::get_compile_instance method. */
extern compile_instance *cplus_get_compile_context ();
expr_pc = get_frame_address_in_block (get_selected_frame (NULL));
/* Set up instance and context for the compiler. */
- if (current_language->la_get_compile_instance == NULL)
+ std::unique_ptr <compile_instance> compiler
+ (current_language->get_compile_instance ());
+ if (compiler == nullptr)
error (_("No compiler support for language %s."),
current_language->la_name);
-
- compile_instance *compiler_instance
- = current_language->la_get_compile_instance ();
- std::unique_ptr<compile_instance> compiler (compiler_instance);
compiler->set_print_callback (print_callback, NULL);
compiler->set_scope (scope);
compiler->set_block (expr_block);
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
cp_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
f_is_string_type_p,
"(...)" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
go_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
default_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
default_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
/* Various operations on varobj. */
const struct lang_varobj_ops *la_varobj_ops;
- /* If this language allows compilation from the gdb command line,
- this method should be non-NULL. When called it should return
- an instance of struct gcc_context appropriate to the language.
- When defined this method must never return NULL; instead it
- should throw an exception on failure. The returned compiler
- instance is owned by its caller and must be deallocated by
- calling its 'destroy' method. */
-
- compile_instance *(*la_get_compile_instance) (void);
-
/* This method must be defined if 'la_get_gcc_context' is defined.
If 'la_get_gcc_context' is not defined, then this method is
ignored.
return ::iterate_over_symbols (block, name, domain, callback);
}
+ /* If this language allows compilation from the gdb command line, then
+ this method will return an instance of struct gcc_context appropriate
+ to the language. If compilation for this language is generally
+ supported, but something goes wrong then an exception is thrown. The
+ returned compiler instance is owned by its caller and must be
+ deallocated by the caller. If compilation is not supported for this
+ language then this method returns NULL. */
+
+ virtual compile_instance *get_compile_instance () const
+ {
+ return nullptr;
+ }
+
/* List of all known languages. */
static const struct language_defn *languages[nr_languages];
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
m2_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
pascal_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
default_search_name_hash,
&default_varobj_ops,
NULL,
- NULL,
rust_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};