de.rwth.dfa.jvm
Class ExecutionSolver

java.lang.Object
  |
  +--de.rwth.dfa.jvm.Solver
        |
        +--de.rwth.dfa.jvm.ExecutionSolver

public class ExecutionSolver
extends Solver

JVM abstraction solver based on direct execution. It only supports forward analyses.

Version:
$Id: ExecutionSolver.java,v 1.2 2002/09/17 06:53:53 mohnen Exp $
Author:
Markus Mohnen

Fields inherited from class de.rwth.dfa.jvm.Solver
abstraction, iterations, memory, methodExceptions, methodInstrs, methodName, stopwatch
 
Constructor Summary
ExecutionSolver(Abstraction abstraction, java.lang.String methodName, de.fub.bytecode.generic.InstructionList methodInstrs, de.fub.bytecode.classfile.CodeException[] methodExceptions)
          Creates a new ExecutionSolver instance with out stop watch.
ExecutionSolver(Abstraction abstraction, java.lang.String methodName, de.fub.bytecode.generic.InstructionList methodInstrs, de.fub.bytecode.classfile.CodeException[] methodExceptions, Stopwatch stopwatch)
          Creates a new ExecutionSolver instance with stop watch.
 
Method Summary
protected  void compute(java.lang.Object[] solution, boolean isForward, boolean isAll)
          Implementations must provide this method.
protected  boolean maybeTransfer(java.lang.Object[] solution, Lattice l, boolean isAll, java.lang.Object e, java.lang.Integer targetIndex, java.util.Hashtable exFunctions)
           
 
Methods inherited from class de.rwth.dfa.jvm.Solver
getIterations, getMemory, getSolution
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExecutionSolver

public ExecutionSolver(Abstraction abstraction,
                       java.lang.String methodName,
                       de.fub.bytecode.generic.InstructionList methodInstrs,
                       de.fub.bytecode.classfile.CodeException[] methodExceptions,
                       Stopwatch stopwatch)
Creates a new ExecutionSolver instance with stop watch.
Parameters:
abstraction - an Abstraction value
methodName - a String value
methodInstrs - an InstructionList value
methodExceptions - a CodeException[] value
stopwatch - a Stopwatch value

ExecutionSolver

public ExecutionSolver(Abstraction abstraction,
                       java.lang.String methodName,
                       de.fub.bytecode.generic.InstructionList methodInstrs,
                       de.fub.bytecode.classfile.CodeException[] methodExceptions)
Creates a new ExecutionSolver instance with out stop watch.
Parameters:
abstraction - an Abstraction value
methodName - a String value
methodInstrs - an InstructionList value
methodExceptions - a CodeException[] value
stopwatch - a Stopwatch value
Method Detail

maybeTransfer

protected boolean maybeTransfer(java.lang.Object[] solution,
                                Lattice l,
                                boolean isAll,
                                java.lang.Object e,
                                java.lang.Integer targetIndex,
                                java.util.Hashtable exFunctions)
                         throws FunctionException

compute

protected void compute(java.lang.Object[] solution,
                       boolean isForward,
                       boolean isAll)
Description copied from class: Solver
Implementations must provide this method. Given the JVM abstraction and the method in this classes data structures, the method must compute a correct solution, i.e. an approximation of the meet over paths solution (for isAll==true). This method is called from getSolution().
  1. Implementations must set the variable iterations to a sensible value.
  2. If there is a stop watch, it is already running. Implementations of this method may use the split() method as often as they wish. They may not call start() or stop().
  3. An approximation of the memory usage is done by getSolution(). Hence, setting memory in this method has no effect.
Overrides:
compute in class Solver
Following copied from class: de.rwth.dfa.jvm.Solver
Parameters:
solution - an Object[] value: A newly created array for the solution. It has one entry for each instruction.
isForward - a boolean value: Analysis control flow
isAll - a boolean value: Use meet or join