00001 package edu.ksu.cis.bandera.jjjc.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.jjjc.analysis.*;
00038
00039 public final class AExpListForInit extends PForInit
00040 {
00041 private final LinkedList _exp_ = new TypedLinkedList(new Exp_Cast());
00042
00043 private class Exp_Cast implements Cast
00044 {
00045 public Object cast(Object o)
00046 {
00047 PExp node = (PExp) o;
00048
00049 if((node.parent() != null) &&
00050 (node.parent() != AExpListForInit.this))
00051 {
00052 node.parent().removeChild(node);
00053 }
00054
00055 if((node.parent() == null) ||
00056 (node.parent() != AExpListForInit.this))
00057 {
00058 node.parent(AExpListForInit.this);
00059 }
00060
00061 return node;
00062 }
00063 }
00064 public AExpListForInit()
00065 {
00066 }
00067 public AExpListForInit(
00068 List _exp_)
00069 {
00070 {
00071 Object temp[] = _exp_.toArray();
00072 for(int i = 0; i < temp.length; i++)
00073 {
00074 this._exp_.add(temp[i]);
00075 }
00076 }
00077
00078 }
00079 public AExpListForInit(
00080 XPExp _exp_)
00081 {
00082 if(_exp_ != null)
00083 {
00084 while(_exp_ instanceof X1PExp)
00085 {
00086 this._exp_.addFirst(((X1PExp) _exp_).getPExp());
00087 _exp_ = ((X1PExp) _exp_).getXPExp();
00088 }
00089 this._exp_.addFirst(((X2PExp) _exp_).getPExp());
00090 }
00091
00092 }
00093 public void apply(Switch sw)
00094 {
00095 ((Analysis) sw).caseAExpListForInit(this);
00096 }
00097 public Object clone()
00098 {
00099 return new AExpListForInit(
00100 cloneList(_exp_));
00101 }
00102 public LinkedList getExp()
00103 {
00104 return _exp_;
00105 }
00106 void removeChild(Node child)
00107 {
00108 if(_exp_.remove(child))
00109 {
00110 return;
00111 }
00112
00113 }
00114 void replaceChild(Node oldChild, Node newChild)
00115 {
00116 for(ListIterator i = _exp_.listIterator(); i.hasNext();)
00117 {
00118 if(i.next() == oldChild)
00119 {
00120 if(newChild != null)
00121 {
00122 i.set(newChild);
00123 oldChild.parent(null);
00124 return;
00125 }
00126
00127 i.remove();
00128 oldChild.parent(null);
00129 return;
00130 }
00131 }
00132
00133 }
00134 public void setExp(List list)
00135 {
00136 Object temp[] = list.toArray();
00137 for(int i = 0; i < temp.length; i++)
00138 {
00139 _exp_.add(temp[i]);
00140 }
00141 }
00142 public String toString()
00143 {
00144 return ""
00145 + toString(_exp_);
00146 }
00147 }