00001 package edu.ksu.cis.bandera.birc;
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 import edu.ksu.cis.bandera.bir.*;
00036
00037 import ca.mcgill.sable.soot.*;
00038
00039
00040
00041
00042
00043
00044
00045
00046 public class VisibleExtractor extends AbstractExprSwitch
00047 {
00048 boolean visible = false;
00049
00050 public void caseAddExpr(AddExpr expr)
00051 {
00052 expr.getOp1().apply(this);
00053 expr.getOp2().apply(this);
00054 }
00055 public void caseAndExpr(AndExpr expr)
00056 {
00057 expr.getOp1().apply(this);
00058 expr.getOp2().apply(this);
00059 }
00060 public void caseArrayExpr(ArrayExpr expr)
00061 {
00062 expr.getArray().apply(this);
00063 expr.getIndex().apply(this);
00064 }
00065 public void caseAssignAction(AssignAction assign)
00066 {
00067 assign.getLhs().apply(this);
00068 assign.getRhs().apply(this);
00069 }
00070 public void caseDerefExpr(DerefExpr expr)
00071 {
00072 visible = true;
00073 expr.getTarget().apply(this);
00074 }
00075 public void caseDivExpr(DivExpr expr)
00076 {
00077 expr.getOp1().apply(this);
00078 expr.getOp2().apply(this);
00079 }
00080 public void caseEqExpr(EqExpr expr)
00081 {
00082 expr.getOp1().apply(this);
00083 expr.getOp2().apply(this);
00084 }
00085 public void caseLeExpr(LeExpr expr)
00086 {
00087 expr.getOp1().apply(this);
00088 expr.getOp2().apply(this);
00089 }
00090 public void caseLengthExpr(LengthExpr expr)
00091 {
00092 expr.getArray().apply(this);
00093 }
00094 public void caseLockAction(LockAction lockAction)
00095 {
00096 visible = true;
00097 }
00098 public void caseLockTest(LockTest lockTest)
00099 {
00100 visible = true;
00101 }
00102 public void caseLtExpr(LtExpr expr)
00103 {
00104 expr.getOp1().apply(this);
00105 expr.getOp2().apply(this);
00106 }
00107 public void caseMulExpr(MulExpr expr)
00108 {
00109 expr.getOp1().apply(this);
00110 expr.getOp2().apply(this);
00111 }
00112 public void caseNeExpr(NeExpr expr)
00113 {
00114 expr.getOp1().apply(this);
00115 expr.getOp2().apply(this);
00116 }
00117 public void caseNewExpr(NewExpr expr)
00118 {
00119 }
00120 public void caseNotExpr(NotExpr expr)
00121 {
00122 expr.getOp().apply(this);
00123 }
00124 public void caseNullExpr(NullExpr expr)
00125 {
00126 }
00127 public void caseOrExpr(OrExpr expr)
00128 {
00129 expr.getOp1().apply(this);
00130 expr.getOp2().apply(this);
00131 }
00132 public void casePrintAction(PrintAction printAction)
00133 {
00134 }
00135 public void caseRecordExpr(RecordExpr expr)
00136 {
00137 expr.getRecord().apply(this);
00138 }
00139 public void caseRefExpr(RefExpr expr)
00140 {
00141 }
00142 public void caseRemExpr(RemExpr expr)
00143 {
00144 expr.getOp1().apply(this);
00145 expr.getOp2().apply(this);
00146 }
00147 public void caseStateVar(StateVar expr)
00148 {
00149 if (! expr.isLocal() && ! expr.isConstant())
00150 visible = true;
00151 }
00152 public void caseSubExpr(SubExpr expr)
00153 {
00154 expr.getOp1().apply(this);
00155 expr.getOp2().apply(this);
00156 }
00157 public void caseThreadAction(ThreadAction threadAction)
00158 {
00159 visible = true;
00160 }
00161 public void caseThreadTest(ThreadTest threadTest)
00162 {
00163 visible = true;
00164 }
00165 public boolean isVisible() {
00166 return visible;
00167 }
00168 public void reset() {
00169 visible = false;
00170 }
00171 }