00001 package edu.ksu.cis.bandera.birp.node;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 import ca.mcgill.sable.util.*;
00037 import edu.ksu.cis.bandera.birp.analysis.*;
00038
00039 public final class ALocation extends PLocation
00040 {
00041 private TLoc _loc_;
00042 private TId _id_;
00043 private TColon _colon_;
00044 private PLiveset _livevars_;
00045 private final LinkedList _transformations_ = new TypedLinkedList(new Transformations_Cast());
00046
00047 private class Transformations_Cast implements Cast
00048 {
00049 public Object cast(Object o)
00050 {
00051 PTransformation node = (PTransformation) o;
00052
00053 if((node.parent() != null) &&
00054 (node.parent() != ALocation.this))
00055 {
00056 node.parent().removeChild(node);
00057 }
00058
00059 if((node.parent() == null) ||
00060 (node.parent() != ALocation.this))
00061 {
00062 node.parent(ALocation.this);
00063 }
00064
00065 return node;
00066 }
00067 }
00068 public ALocation()
00069 {
00070 }
00071 public ALocation(
00072 TLoc _loc_,
00073 TId _id_,
00074 TColon _colon_,
00075 PLiveset _livevars_,
00076 List _transformations_)
00077 {
00078 setLoc(_loc_);
00079
00080 setId(_id_);
00081
00082 setColon(_colon_);
00083
00084 setLivevars(_livevars_);
00085
00086 {
00087 Object temp[] = _transformations_.toArray();
00088 for(int i = 0; i < temp.length; i++)
00089 {
00090 this._transformations_.add(temp[i]);
00091 }
00092 }
00093
00094 }
00095 public ALocation(
00096 TLoc _loc_,
00097 TId _id_,
00098 TColon _colon_,
00099 PLiveset _livevars_,
00100 XPTransformation _transformations_)
00101 {
00102 setLoc(_loc_);
00103
00104 setId(_id_);
00105
00106 setColon(_colon_);
00107
00108 setLivevars(_livevars_);
00109
00110 if(_transformations_ != null)
00111 {
00112 while(_transformations_ instanceof X1PTransformation)
00113 {
00114 this._transformations_.addFirst(((X1PTransformation) _transformations_).getPTransformation());
00115 _transformations_ = ((X1PTransformation) _transformations_).getXPTransformation();
00116 }
00117 this._transformations_.addFirst(((X2PTransformation) _transformations_).getPTransformation());
00118 }
00119
00120 }
00121 public void apply(Switch sw)
00122 {
00123 ((Analysis) sw).caseALocation(this);
00124 }
00125 public Object clone()
00126 {
00127 return new ALocation(
00128 (TLoc) cloneNode(_loc_),
00129 (TId) cloneNode(_id_),
00130 (TColon) cloneNode(_colon_),
00131 (PLiveset) cloneNode(_livevars_),
00132 cloneList(_transformations_));
00133 }
00134 public TColon getColon()
00135 {
00136 return _colon_;
00137 }
00138 public TId getId()
00139 {
00140 return _id_;
00141 }
00142 public PLiveset getLivevars()
00143 {
00144 return _livevars_;
00145 }
00146 public TLoc getLoc()
00147 {
00148 return _loc_;
00149 }
00150 public LinkedList getTransformations()
00151 {
00152 return _transformations_;
00153 }
00154 void removeChild(Node child)
00155 {
00156 if(_loc_ == child)
00157 {
00158 _loc_ = null;
00159 return;
00160 }
00161
00162 if(_id_ == child)
00163 {
00164 _id_ = null;
00165 return;
00166 }
00167
00168 if(_colon_ == child)
00169 {
00170 _colon_ = null;
00171 return;
00172 }
00173
00174 if(_livevars_ == child)
00175 {
00176 _livevars_ = null;
00177 return;
00178 }
00179
00180 if(_transformations_.remove(child))
00181 {
00182 return;
00183 }
00184
00185 }
00186 void replaceChild(Node oldChild, Node newChild)
00187 {
00188 if(_loc_ == oldChild)
00189 {
00190 setLoc((TLoc) newChild);
00191 return;
00192 }
00193
00194 if(_id_ == oldChild)
00195 {
00196 setId((TId) newChild);
00197 return;
00198 }
00199
00200 if(_colon_ == oldChild)
00201 {
00202 setColon((TColon) newChild);
00203 return;
00204 }
00205
00206 if(_livevars_ == oldChild)
00207 {
00208 setLivevars((PLiveset) newChild);
00209 return;
00210 }
00211
00212 for(ListIterator i = _transformations_.listIterator(); i.hasNext();)
00213 {
00214 if(i.next() == oldChild)
00215 {
00216 if(newChild != null)
00217 {
00218 i.set(newChild);
00219 oldChild.parent(null);
00220 return;
00221 }
00222
00223 i.remove();
00224 oldChild.parent(null);
00225 return;
00226 }
00227 }
00228
00229 }
00230 public void setColon(TColon node)
00231 {
00232 if(_colon_ != null)
00233 {
00234 _colon_.parent(null);
00235 }
00236
00237 if(node != null)
00238 {
00239 if(node.parent() != null)
00240 {
00241 node.parent().removeChild(node);
00242 }
00243
00244 node.parent(this);
00245 }
00246
00247 _colon_ = node;
00248 }
00249 public void setId(TId node)
00250 {
00251 if(_id_ != null)
00252 {
00253 _id_.parent(null);
00254 }
00255
00256 if(node != null)
00257 {
00258 if(node.parent() != null)
00259 {
00260 node.parent().removeChild(node);
00261 }
00262
00263 node.parent(this);
00264 }
00265
00266 _id_ = node;
00267 }
00268 public void setLivevars(PLiveset node)
00269 {
00270 if(_livevars_ != null)
00271 {
00272 _livevars_.parent(null);
00273 }
00274
00275 if(node != null)
00276 {
00277 if(node.parent() != null)
00278 {
00279 node.parent().removeChild(node);
00280 }
00281
00282 node.parent(this);
00283 }
00284
00285 _livevars_ = node;
00286 }
00287 public void setLoc(TLoc node)
00288 {
00289 if(_loc_ != null)
00290 {
00291 _loc_.parent(null);
00292 }
00293
00294 if(node != null)
00295 {
00296 if(node.parent() != null)
00297 {
00298 node.parent().removeChild(node);
00299 }
00300
00301 node.parent(this);
00302 }
00303
00304 _loc_ = node;
00305 }
00306 public void setTransformations(List list)
00307 {
00308 Object temp[] = list.toArray();
00309 for(int i = 0; i < temp.length; i++)
00310 {
00311 _transformations_.add(temp[i]);
00312 }
00313 }
00314 public String toString()
00315 {
00316 return ""
00317 + toString(_loc_)
00318 + toString(_id_)
00319 + toString(_colon_)
00320 + toString(_livevars_)
00321 + toString(_transformations_);
00322 }
00323 }