Main Page   Packages   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

QuantifiedVariableFixer.java

00001 package edu.ksu.cis.bandera.specification;
00002 
00003 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00004  * Bandera, a Java(TM) analysis and transformation toolkit           *
00005  * Copyright (C) 2002   Robby (robby@cis.ksu.edu)                    *
00006  * All rights reserved.                                              *
00007  *                                                                   *
00008  * This work was done as a project in the SAnToS Laboratory,         *
00009  * Department of Computing and Information Sciences, Kansas State    *
00010  * University, USA (http://www.cis.ksu.edu/santos).                  *
00011  * It is understood that any modification not identified as such is  *
00012  * not covered by the preceding statement.                           *
00013  *                                                                   *
00014  * This work is free software; you can redistribute it and/or        *
00015  * modify it under the terms of the GNU Library General Public       *
00016  * License as published by the Free Software Foundation; either      *
00017  * version 2 of the License, or (at your option) any later version.  *
00018  *                                                                   *
00019  * This work is distributed in the hope that it will be useful,      *
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of    *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *
00022  * Library General Public License for more details.                  *
00023  *                                                                   *
00024  * You should have received a copy of the GNU Library General Public *
00025  * License along with this toolkit; if not, write to the             *
00026  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,      *
00027  * Boston, MA  02111-1307, USA.                                      *
00028  *                                                                   *
00029  * Java is a trademark of Sun Microsystems, Inc.                     *
00030  *                                                                   *
00031  * To submit a bug report, send a comment, or get the latest news on *
00032  * this project and other SAnToS projects, please visit the web-site *
00033  *                http://www.cis.ksu.edu/santos                      *
00034  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
00035 import ca.mcgill.sable.soot.*;
00036 import ca.mcgill.sable.soot.jimple.*;
00037 import ca.mcgill.sable.soot.grimp.*;
00038 import edu.ksu.cis.bandera.jext.*;
00039 import edu.ksu.cis.bandera.jjjc.*;
00040 import edu.ksu.cis.bandera.specification.datastructure.*;
00041 public class QuantifiedVariableFixer extends AbstractBanderaValueSwitch {
00042     private static Grimp grimp = Grimp.v();
00043     private static QuantifiedVariableFixer qvf = new QuantifiedVariableFixer();
00044     private QuantifiedVariable qv;
00045 /**
00046  * 
00047  * @param expr edu.ksu.cis.bandera.jext.ComplementExpr
00048  */
00049 public void caseComplementExpr(ComplementExpr expr) {
00050     expr.getOp().apply(this);
00051     setResult(new ComplementExpr((Value) getResult()));
00052 }
00053 public void caseEqExpr(EqExpr v) {
00054     setResult(grimp.newEqExpr(grimp.newStaticFieldRef(CompilationManager.getFieldForQuantifier("quantification$" + qv.getName())), grimp.newStaticFieldRef(CompilationManager.getFieldForQuantifier(((Local) v.getOp2()).getName()))));
00055 }
00056 public void caseInstanceOfExpr(InstanceOfExpr v) {
00057     setResult(grimp.newInstanceOfExpr(grimp.newStaticFieldRef(CompilationManager.getFieldForQuantifier("quantification$" + qv.getName())), v.getCheckType()));
00058 }
00059 /**
00060  * 
00061  * @param expr edu.ksu.cis.bandera.jext.LogicalAndExpr
00062  */
00063 public void caseLogicalAndExpr(LogicalAndExpr expr) {
00064     expr.getOp1().apply(this);
00065     Value lValue = (Value) getResult();
00066     expr.getOp2().apply(this);
00067     Value rValue = (Value) getResult();
00068     setResult(new LogicalAndExpr(lValue, rValue));
00069 }
00070 /**
00071  * 
00072  * @param expr edu.ksu.cis.bandera.jext.LogicalOrExpr
00073  */
00074 public void caseLogicalOrExpr(LogicalOrExpr expr) {
00075     expr.getOp1().apply(this);
00076     Value lValue = (Value) getResult();
00077     expr.getOp2().apply(this);
00078     Value rValue = (Value) getResult();
00079     setResult(new LogicalOrExpr(lValue, rValue));
00080 }
00081 /**
00082  * 
00083  * @param v java.lang.Object
00084  */
00085 public void defaultCase(Object v) {
00086     throw new RuntimeException("Unexpected value: " + v);
00087 }
00088 /**
00089  * 
00090  * @return ca.mcgill.sable.soot.jimple.Value
00091  * @param qv edu.ksu.cis.bandera.specification.datastructure.QuantifiedVariable
00092  */
00093 public static Value fix(QuantifiedVariable qv) {
00094     qvf.qv = qv;
00095     qv.getConstraint().apply(qvf);
00096     qvf.qv = null;
00097     Value result = (Value) qvf.getResult();
00098     qvf.setResult(null);
00099     return result;
00100 }
00101 }

Generated at Thu Feb 7 06:53:13 2002 for Bandera by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001