00001
00002
00003 #ifndef annotator_i_h
00004 #define annotator_i_h
00005
00006 #include <typeinfo>
00007 #include "ptree_util.h"
00008 #include "decl_read.h"
00009 #include "symbol_table.h"
00010 #include "downcast.h"
00011 #include "scope.h"
00012 #include "expr_annotator.h"
00013 #include "function.h"
00014 #include "namespace.h"
00015 #include "typedef.h"
00016 #include "variable.h"
00017 #include "symbol_name.h"
00018 #include "block.h"
00019 #include "implicit_conversion.h"
00020 #include "class.h"
00021 #include "template.h"
00022
00023 class Simple_declaration_reader : public Declaration_reader {
00024 Storage_class_specifier storage;
00025 Function_specifier_set func;
00026 Source* source;
00027 Ptree* func_defn;
00028 Annotator* annotator;
00029 public:
00030
00031 Simple_declaration_reader(Abstract_scope* scope, Source* source, Annotator* annotator)
00032 : Declaration_reader(scope), storage(s_None), func(), source(source),
00033 func_defn(0), annotator(annotator)
00034 { }
00035
00036 Simple_declaration_reader(Abstract_scope* scope, Source* source, Arg_vec* args, Ptree* func_defn)
00037 : Declaration_reader(scope, args), storage(s_None), func(), source(source),
00038 func_defn(func_defn), annotator(0)
00039 { }
00040
00041 public:
00042 void parse_specifiers(Ptree* tree);
00043
00044 void declare_variable(Type type, Ptree* name, Ptree* initializer, Ptree* bitsize);
00045 };
00046
00047
00048
00053 class Typedef_name_reader : public Declaration_reader {
00054 Ptree* name_out;
00055 public:
00056 Typedef_name_reader(Abstract_scope* scope)
00057 : Declaration_reader(scope), name_out(0) { }
00058 Ptree* get_name() const { return name_out; }
00059
00060 public:
00061 void declare_variable(Type type, Ptree* name, Ptree*, Ptree*);
00062 };
00063
00065 class Typedef_declaration_reader : public Declaration_reader {
00066 public:
00067 Typedef_declaration_reader(Abstract_scope* scope) : Declaration_reader(scope) { }
00068
00069 public:
00070 void declare_variable(Type type, Ptree* name, Ptree* initializer, Ptree* bitsize);
00071 };
00072
00073 #endif // annotator_i_h