1d169d70bSTobias Grosser #include <set> 2d169d70bSTobias Grosser #include <clang/AST/Decl.h> 3d169d70bSTobias Grosser #include "generator.h" 4d169d70bSTobias Grosser 5d169d70bSTobias Grosser using namespace std; 6d169d70bSTobias Grosser using namespace clang; 7d169d70bSTobias Grosser 8d169d70bSTobias Grosser class python_generator : public generator { 9d169d70bSTobias Grosser private: 10d169d70bSTobias Grosser set<string> done; 11d169d70bSTobias Grosser 12d169d70bSTobias Grosser public: python_generator(SourceManager & SM,set<RecordDecl * > & exported_types,set<FunctionDecl * > exported_functions,set<FunctionDecl * > functions)136145b11cSTobias Grosser python_generator(SourceManager &SM, set<RecordDecl *> &exported_types, 14d169d70bSTobias Grosser set<FunctionDecl *> exported_functions, 15d169d70bSTobias Grosser set<FunctionDecl *> functions) : 166145b11cSTobias Grosser generator(SM, exported_types, exported_functions, functions) {} 17d169d70bSTobias Grosser 18d169d70bSTobias Grosser virtual void generate(); 19d169d70bSTobias Grosser 20d169d70bSTobias Grosser private: 21d169d70bSTobias Grosser void print(const isl_class &clazz); 22*e8227804SMichael Kruse void print_method_arguments(int first, int n_arg); 23d169d70bSTobias Grosser void print_method_header(bool is_static, const string &name, int n_arg); 24d169d70bSTobias Grosser void print_class_header(const isl_class &clazz, const string &name, 25d169d70bSTobias Grosser const vector<string> &super); 26*e8227804SMichael Kruse void print_type_check(int indent, const string &type, const char *fmt, 27*e8227804SMichael Kruse int pos, bool upcast, const string &super, 28*e8227804SMichael Kruse const string &name, int n); 29*e8227804SMichael Kruse void print_type_checks(const string &cname, FunctionDecl *method, 30*e8227804SMichael Kruse bool first_is_ctx, int n, const vector<string> &super); 316145b11cSTobias Grosser void print_copy(QualType type); 326145b11cSTobias Grosser void print_callback(ParmVarDecl *param, int arg); 33*e8227804SMichael Kruse void print_arg_in_call(FunctionDecl *fd, const char *fmt, int arg, 34*e8227804SMichael Kruse int skip); 35d169d70bSTobias Grosser void print_argtypes(FunctionDecl *fd); 36*e8227804SMichael Kruse void print_method_return(int indent, const isl_class &clazz, 37*e8227804SMichael Kruse FunctionDecl *method, const char *fmt); 38d169d70bSTobias Grosser void print_restype(FunctionDecl *fd); 39d169d70bSTobias Grosser void print(map<string, isl_class> &classes, set<string> &done); 40d169d70bSTobias Grosser void print_constructor(const isl_class &clazz, FunctionDecl *method); 41*e8227804SMichael Kruse void print_upcast_constructors(const isl_class &clazz); 42*e8227804SMichael Kruse void print_new(const isl_class &clazz, 43*e8227804SMichael Kruse const string &python_name); 44d169d70bSTobias Grosser void print_representation(const isl_class &clazz, 45d169d70bSTobias Grosser const string &python_name); 46*e8227804SMichael Kruse void print_copy_callbacks(const isl_class &clazz); 47d169d70bSTobias Grosser void print_method_type(FunctionDecl *fd); 48d169d70bSTobias Grosser void print_method_types(const isl_class &clazz); 49*e8227804SMichael Kruse void print_get_method(const isl_class &clazz, FunctionDecl *fd); 50d169d70bSTobias Grosser void print_method(const isl_class &clazz, FunctionDecl *method, 51d169d70bSTobias Grosser vector<string> super); 52*e8227804SMichael Kruse void print_method_call(int indent, const isl_class &clazz, 53*e8227804SMichael Kruse FunctionDecl *method, const char *fmt, 54*e8227804SMichael Kruse int drop_ctx, int drop_user); 55*e8227804SMichael Kruse void print_argument_checks(const isl_class &clazz, FunctionDecl *fd, 56*e8227804SMichael Kruse int drop_ctx); 57d169d70bSTobias Grosser void print_method_overload(const isl_class &clazz, 58d169d70bSTobias Grosser FunctionDecl *method); 59d169d70bSTobias Grosser void print_method(const isl_class &clazz, const string &fullname, 60*e8227804SMichael Kruse const function_set &methods, vector<string> super); 61*e8227804SMichael Kruse void print_set_enum(const isl_class &clazz, FunctionDecl *fd, 62*e8227804SMichael Kruse int value, const string &name, const vector<string> &super); 63*e8227804SMichael Kruse void print_set_enum(const isl_class &clazz, FunctionDecl *fd, 64*e8227804SMichael Kruse const vector<string> &super); 65d169d70bSTobias Grosser 66d169d70bSTobias Grosser }; 67