Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 1999 Patrick Lam
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
 
 /*
  * Modified by the Sable Research Group and others 1997-1999.  
  * See the 'credits' file distributed with Soot for the complete list of
  * contributors.  (Soot is distributed at http://www.sable.mcgill.ca/soot)
  */
 
 
 
 
 
 
 package soot.jimple.internal;
 
 import soot.tagkit.*;
 import soot.*;
 import soot.jimple.*;
 import soot.util.*;
 import java.util.*;
 
 public class JAssignStmt extends AbstractDefinitionStmt
     implements AssignStmt
 {
     private class LinkedVariableBox extends VariableBox
     {
         ValueBox otherBox = null;
 
         private LinkedVariableBox(Value v)
         {
             super(v);
         }
 
         public void setOtherBox(ValueBox otherBox) { this. = otherBox; }
 
         public boolean canContainValue(Value v
         { 
             if ( == nullreturn super.canContainValue(v);
             Value other = .getValue();
             return super.canContainValue(v) && 
                 ((v instanceof Local || v instanceof Constant) || (other instanceof Local || other instanceof Constant));
         }
     }
 
     private class LinkedRValueBox extends RValueBox
     {
         ValueBox otherBox = null;
 
         private LinkedRValueBox(Value v)
         {
             super(v);
         }
 
         public void setOtherBox(ValueBox otherBox) { this. = otherBox; }
 
         public boolean canContainValue(Value v
         { 
             if ( == nullreturn super.canContainValue(v);
             Value other = .getValue();
             return super.canContainValue(v) && 
                 ((v instanceof Local || v instanceof Constant) || (other instanceof Local || other instanceof Constant));
         }
     }
 
     public JAssignStmt(Value variableValue rvalue)
     {
          = new LinkedVariableBox(variable);
          = new LinkedRValueBox(rvalue);
 
 
         if(!.canContainValue(variable) ||
             !.canContainValue(rvalue))
             throw new RuntimeException("Illegal assignment statement.  Make sure that either left side or right hand side has a local or constant.");
                     
         
          = new SingletonList();
     }
 
     protected JAssignStmt(ValueBox variableBoxValueBox rvalueBox)
     {
        this. = variableBox;
        this. = rvalueBox;
         = new SingletonList();
    }
    public boolean containsInvokeExpr()
    {
        return .getValue() instanceof InvokeExpr;
    }
    public InvokeExpr getInvokeExpr()
    {
        if (!containsInvokeExpr())
            throw new RuntimeException("getInvokeExpr() called with no invokeExpr present!");
        return (InvokeExpr).getValue();
    }
    public ValueBox getInvokeExprBox()
    {
        if (!containsInvokeExpr())
            throw new RuntimeException("getInvokeExpr() called with no invokeExpr present!");
        return ;
    }
    /* added by Feng */
    public boolean containsArrayRef()
    {
	return ((.getValue() instanceof ArrayRef) || (.getValue() instanceof ArrayRef));
    }
    public ArrayRef getArrayRef()
    {
	    throw new RuntimeException("getArrayRef() called with no ArrayRef present!");
	if (.getValue() instanceof ArrayRef)
	    return (ArrayRef.getValue();
	else
	    return (ArrayRef.getValue();
    }
    public ValueBox getArrayRefBox()
    {
	    throw new RuntimeException("getArrayRefBox() called with no ArrayRef present!");
	if (.getValue() instanceof ArrayRef)
	    return ;
	else
	    return ;
    }
    public boolean containsFieldRef()
    {
	return ((.getValue() instanceof FieldRef) || (.getValue() instanceof FieldRef));
    }
    public FieldRef getFieldRef()
    {
	    throw new RuntimeException("getFieldRef() called with no FieldRef present!");
	if (.getValue() instanceof FieldRef)
	    return (FieldRef.getValue();
	else
	    return (FieldRef.getValue();
    }
    public ValueBox getFieldRefBox()
    {
	    throw new RuntimeException("getFieldRefBox() called with no FieldRef present!");
	if (.getValue() instanceof FieldRef)
	    return ;
	else
	    return ;
    }
    public List getUnitBoxes()
    {
        // handle possible PhiExpr's
        Value rValue = .getValue();
        if(rValue instanceof UnitBoxOwner)
            return ((UnitBoxOwner)rValue).getUnitBoxes();
        return super.getUnitBoxes();
    }
	  
    public String toString()
    {
        return .getValue().toString() + " = " + .getValue().toString();
    }
    
    public void toString(UnitPrinter up) {
        .toString(up);
        up.literal(" = ");
        .toString(up);
    }
    public Object clone() 
    {
            return new JAssignStmt(Jimple.cloneIfNecessary(getLeftOp()), Jimple.cloneIfNecessary(getRightOp()));
    }
    public void setLeftOp(Value variable)
    {
        .setValue(variable);
    }
    public void setRightOp(Value rvalue)
    {
        .setValue(rvalue);
    }
    public void apply(Switch sw)
    {
        ((StmtSwitchsw).caseAssignStmt(this);
    }
New to GrepCode? Check out our FAQ X