brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 17f4af0 Raw
175 lines · c
1#ifndef ISL_INTERFACE_PLAIN_CPP_H2#define ISL_INTERFACE_PLAIN_CPP_H3 4#include <functional>5#include <memory>6 7#include "cpp.h"8#include "generator.h"9 10using namespace std;11using namespace clang;12 13/* A type printer for converting argument and return types14 * to string representations of the corresponding types15 * in the checked C++ interface.16 */17struct checked_cpp_type_printer : public cpp_type_printer {18	virtual std::string isl_bool() const override;19	virtual std::string isl_stat() const override;20	virtual std::string isl_size() const override;21	virtual std::string isl_namespace() const override;22};23 24/* Generator for plain C++ bindings.25 *26 * "checked" is set if C++ bindings should be generated27 * that rely on the user to check for error conditions.28 */29class plain_cpp_generator : public cpp_generator {30	struct plain_printer;31	struct decl_printer;32	struct impl_printer;33protected:34	bool checked;35public:36	plain_cpp_generator(SourceManager &SM,37		set<RecordDecl *> &exported_types,38		set<FunctionDecl *> exported_functions,39		set<FunctionDecl *> functions,40		bool checked = false);41 42	virtual void generate();43private:44	void print_forward_declarations(ostream &os);45	void print_declarations(ostream &os);46	void print_class(ostream &os, const isl_class &clazz);47	void print_class_forward_decl(ostream &os, const isl_class &clazz);48	void print_implementations(ostream &os);49	void print_class_impl(ostream &os, const isl_class &clazz);50	void print_check_no_persistent_callback(ostream &os,51		const isl_class &clazz, FunctionDecl *fd);52	void print_invalid(ostream &os, int indent, const char *msg,53		const char *checked_code);54	void print_method_param_use(ostream &os, ParmVarDecl *param,55		bool load_from_this_ptr);56	std::unique_ptr<cpp_type_printer> type_printer();57	std::string get_return_type(const Method &method);58	string generate_callback_args(QualType type, bool cpp);59	string generate_callback_type(QualType type);60	string isl_bool2cpp();61	string isl_namespace();62	string param2cpp(QualType type);63};64 65/* A helper class for printing method declarations and definitions66 * of a class for the plain C++ interface.67 *68 * "generator" is the C++ interface generator printing the classes.69 */70struct plain_cpp_generator::plain_printer : public cpp_generator::class_printer {71	plain_cpp_generator &generator;72 73	plain_printer(std::ostream &os, const isl_class &clazz,74			plain_cpp_generator &generator, bool is_declaration) :75		class_printer(os, clazz, generator, is_declaration),76		generator(generator) {}77 78	void print_persistent_callback_prototype(FunctionDecl *method);79	void print_persistent_callback_setter_prototype(FunctionDecl *method);80	void print_full_method_header(const Method &method);81	void print_callback_data_decl(ParmVarDecl *param, const string &name);82	virtual bool want_descendent_overloads(const function_set &methods)83		override;84	virtual void print_public_constructors() = 0;85	virtual void print_copy_assignment() = 0;86	virtual void print_destructor() = 0;87	virtual void print_ptr() = 0;88	virtual void print_downcast() = 0;89	virtual void print_ctx() = 0;90	virtual void print_method_separator() = 0;91	virtual void print_persistent_callbacks() = 0;92	void print_public_methods();93	void print_id_constructor_user_header();94	void print_id_user_header(bool optional);95	virtual void print_id_constructor_user() = 0;96	virtual void print_id_user(bool optional) = 0;97	void print_special_id();98	void print_special();99};100 101/* A helper class for printing method declarations of a class.102 */103struct plain_cpp_generator::decl_printer :104	public plain_cpp_generator::plain_printer105{106	decl_printer(std::ostream &os, const isl_class &clazz,107			plain_cpp_generator &generator) :108		plain_printer(os, clazz, generator, true) {}109 110	void print_subclass_type();111	void print_class_factory(const std::string &prefix = std::string());112	void print_protected_constructors();113	virtual void print_copy_assignment() override;114	virtual void print_public_constructors() override;115	virtual void print_destructor() override;116	virtual void print_ptr() override;117	void print_isa_type_template(int indent, const isl_class &super);118	virtual void print_downcast() override;119	virtual void print_ctx() override;120	virtual void print_method_separator() override;121	void print_persistent_callback_data(FunctionDecl *method);122	virtual void print_persistent_callbacks() override;123	virtual void print_method(const Method &method) override;124	virtual void print_method(const ConversionMethod &method) override;125	virtual void print_get_method(FunctionDecl *fd) override;126	virtual void print_id_constructor_user() override;127	virtual void print_id_user(bool optional) override;128};129 130/* A helper class for printing method definitions of a class.131 */132struct plain_cpp_generator::impl_printer :133	public plain_cpp_generator::plain_printer134{135	impl_printer(std::ostream &os, const isl_class &clazz,136			plain_cpp_generator &generator) :137		plain_printer(os, clazz, generator, false) {}138 139	void print_arg_conversion(ParmVarDecl *dst, ParmVarDecl *src);140	virtual void print_method(const Method &method) override;141	virtual void print_method(const ConversionMethod &method) override;142	virtual void print_get_method(FunctionDecl *fd) override;143	void print_check_ptr(const char *ptr);144	void print_check_ptr_start(const char *ptr);145	void print_check_ptr_end(const char *ptr);146	void print_class_factory();147	void print_protected_constructors();148	virtual void print_public_constructors() override;149	virtual void print_copy_assignment() override;150	virtual void print_destructor() override;151	virtual void print_ptr() override;152	virtual void print_downcast() override;153	virtual void print_ctx() override;154	virtual void print_method_separator() override;155	void print_set_persistent_callback(const Method &method);156	virtual void print_persistent_callbacks() override;157	void print_argument_validity_check(const Method &method);158	void print_save_ctx(const std::string &ctx);159	void print_save_ctx(const Method &method);160	void print_on_error_continue();161	void print_exceptional_execution_check(const Method &method);162	void print_method_return(const Method &method);163	void print_stream_insertion();164	void print_wrapped_call_checked(int indent, const std::string &call);165	void print_wrapped_call(int indent, const std::string &call,166		QualType rtype);167	void print_callback_body(int indent, ParmVarDecl *param,168		const string &name);169	void print_callback_local(ParmVarDecl *param);170	virtual void print_id_constructor_user() override;171	virtual void print_id_user(bool optional) override;172};173 174#endif175