ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
uniqueNameTraversal.h
Go to the documentation of this file.
1 #pragma once
2 #include <rose.h>
3 #include <vector>
4 
5 namespace ssa_private
6 {
7 
12 {
13 private:
14 
18  std::vector<SgInitializedName*> key;
19 
20  bool usesThis;
21 
22 public:
23 
26  VarUniqueName() : key(), usesThis(false)
27  {
28  }
29 
37  {
38  key.push_back(thisNode);
39  }
40 
49  VarUniqueName(const std::vector<SgInitializedName*>& prefix, SgInitializedName* thisNode) : usesThis(false)
50  {
51  key.assign(prefix.begin(), prefix.end());
52  key.push_back(thisNode);
53  }
54 
59  VarUniqueName(const VarUniqueName& other) : AstAttribute(other), usesThis(false)
60  {
61  key.assign(other.key.begin(), other.key.end());
62  }
63 
65  {
66  VarUniqueName* newName = new VarUniqueName(*this);
67  return newName;
68  }
69 
74  const std::vector<SgInitializedName*>& getKey()
75  {
76  return key;
77  }
78 
83  void setKey(const std::vector<SgInitializedName*>& newKey)
84  {
85  key.assign(newKey.begin(), newKey.end());
86  }
87 
88  bool getUsesThis()
89  {
90  return usesThis;
91  }
92 
93  void setUsesThis(bool uses)
94  {
95  usesThis = uses;
96  }
97 
102  std::string getNameString()
103  {
104  std::string name = "";
105  std::vector<SgInitializedName*>::iterator iter;
106  if (usesThis)
107  name += "this->";
108  for (iter = key.begin(); iter != key.end(); ++iter)
109  {
110  if (iter != key.begin())
111  {
112  name += ":";
113  }
114  name += (*iter)->get_name().getString();
115  }
116 
117  return name;
118  }
119 };
120 
123 {
128 
129 public:
130 
132 
134  {
135  }
136 
138  {
139  currentVar = var;
140  }
141 
143  {
144  return currentVar;
145  }
146 };
147 
149 class UniqueNameTraversal : public AstBottomUpProcessing<VariableReferenceSet>
150 {
152  std::vector<SgInitializedName*> allInitNames;
153 
157 
161 
165 
166 public:
167 
169  static std::string varKeyTag;
170 
172  typedef std::vector<SgInitializedName*> VarName;
173 
176 
177  UniqueNameTraversal(const std::vector<SgInitializedName*>& allNames,
178  bool treatPointersAsStructs = true, bool propagateNamesThroughComma = true) : allInitNames(allNames),
180  {
181  }
182 
192 };
193 
194 } //namespace ssa_private