ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ValueAnnot.h
Go to the documentation of this file.
1 #ifndef VALUE_ANNOT_H
2 #define VALUE_ANNOT_H
3 
4 #include <AnnotExpr.h>
5 #include <OperatorAnnotation.h>
6 #include <CPPAstInterface.h>
7 #include <list>
8 
10  : public MapDescriptor<StringDescriptor, SymbolicValDescriptor, ';', '{', '}'>
11 {
13 
14 public:
15  typedef
16  MapDescriptor<StringDescriptor, SymbolicValDescriptor, ';', '{', '}'>
18  bool read( std::istream& in)
19  {
20  return ReadContainer<HasValueDescriptor,
21  CollectPair<StringDescriptor, SymbolicValDescriptor, '='>,
22  ';', '{','}'>::read(*this, in);
23  }
24  bool merge (const HasValueDescriptor& that);
25  std::string toString() const;
26  void replace_var( const std::string& name, const SymbolicVal& repl);
27  void replace_val( MapObject<SymbolicVal, SymbolicVal>& repl);
28 
29  bool has_value( const std::string& name, SymbolicValDescriptor* r = 0) const;
30 };
31 
32 class HasValueCollection : public TypeAnnotCollection< HasValueDescriptor>
33 {
34  typedef TypeAnnotCollection< HasValueDescriptor > BaseClass;
35  virtual bool read_annot_name( const std::string& annotName) const
36  { return annotName == "has_value"; }
37  public:
38  void Dump() const
39  { std::cerr << "has_value: \n"; BaseClass::Dump(); }
40  std::string is_known_member_function( AstInterface& fa,
41  const SymbolicVal& exp, AstNodePtr* objp,
42  SymbolicFunction::Arguments* argsp,
43  HasValueDescriptor* descp);
44  std::string is_known_member_function( CPPAstInterface& fa,
45  const AstNodePtr& exp, AstNodePtr* objp,
46  AstInterface::AstNodeList* args,
47  HasValueDescriptor* desc);
48 };
49 
50 typedef CollectPair< SymbolicValDescriptor, HasValueDescriptor, '='> RestrictValueDescriptor;
52  : public OPDescriptorTemp
53  <ContainerDescriptor< std::list <RestrictValueDescriptor>, RestrictValueDescriptor, ';', '{', '}'> >
54 {
55  typedef OPDescriptorTemp
56  <ContainerDescriptor< std::list <RestrictValueDescriptor>, RestrictValueDescriptor, ';', '{', '}'> >
58  public:
59  void replace_val( MapObject<SymbolicVal, SymbolicVal>& repl);
60 };
61 
63 : public OperatorAnnotCollection<RestrictValueOpDescriptor>
64 {
65  virtual bool read_annot_name( const std::string& annotName) const
66  { return annotName == "restrict_value"; }
67  public:
68  void Dump() const
69  {
70  std::cerr << "restrict_value: \n";
71  OperatorAnnotCollection<RestrictValueOpDescriptor>::Dump();
72  }
73 };
74 
76 {
81  public:
82  static ValueAnnotation* get_inst();
83  void register_annot();
84  void Dump() const;
85  bool known_type( AstInterface& fa, const AstNodePtr& exp, HasValueDescriptor* d = 0);
86  bool is_value_restrict_op( AstInterface& fa, const AstNodePtr& exp,
87  Collect2Object< AstNodePtr, HasValueDescriptor>* desc = 0,
88  MapObject<SymbolicVal, SymbolicVal>* valMap = 0,
89  Map2Object<AstInterface*, AstNodePtr, AstNodePtr> *codegen = 0);
90  bool is_access_value( CPPAstInterface& fa, const AstNodePtr& exp,
91  AstNodePtr* obj=0, std::string* name = 0,
92  AstInterface::AstNodeList* args=0,
93  HasValueDescriptor* desc = 0);
94 };
95 
96 #endif
97