00001 // AUTOMATICALLY GENERATED -- DO NOT EDIT! -*- c++ -*- 00002 00003 #ifndef template_h 00004 #define template_h 00005 00006 #include <vector> 00007 #include <string> 00008 #include <ptree-core.h> 00009 #include "symbol_table.h" 00010 #include "class.h" 00011 00012 // 00013 // INTERFACE definition follows 00014 // 00015 00016 00017 class Template_spec; 00023 class Template_thing { 00024 std::vector<std::string> arg_names; 00025 Ptree* tree; 00026 00027 public: 00028 /***************************** Template_thing ****************************/ 00029 Template_thing(); 00030 00031 void add_args_from_ptree(Ptree* list, Abstract_scope* scope); 00032 00033 void add_type_arg(std::string name); 00034 00035 int get_num_args() const; 00036 00037 std::string get_type_arg(int i) const; 00038 00039 void set_tree(Ptree* tree); 00040 00041 Ptree* get_tree() const; 00042 }; 00043 00044 class Template_class_symbol : public Symbol { 00045 Template_thing* definition; // a class definition that can be 00046 // handed to parse_class 00047 std::vector<Template_thing*> members; 00048 std::vector<Template_spec*> special; 00049 00050 Abstract_scope* defined_in_scope; 00051 00052 public: 00053 /************************* Template_class_symbol *************************/ 00054 Template_class_symbol(Abstract_scope* scope); 00055 00056 ~Template_class_symbol(); 00057 00058 Symbol::Kind get_kind() const; 00059 00060 void set_definition(Template_thing* def); 00061 00062 void add_member(Template_thing* def); 00063 00064 Class_symbol* get_specialisation(const Type_vector& types); 00065 00066 Class_symbol* get_specialisation_from_ptree(Ptree* tree, Abstract_scope* sco); 00067 }; 00068 00069 void visit_template(Ptree* arglist, Ptree* content, Abstract_scope* scope); 00070 00071 void parse_template_arg_list(Ptree* arglist, Abstract_scope* scope, Type_vector* output); 00072 00073 #endif // template_h