Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 1997 Clark Verbrugge
   *
   * 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.coffi;
 
 import java.io.*;
 
 import soot.*;
 
 /*
  * A less resource hungry implementation of the TypeStack would just have pointers to
  * 'sub-stacks' instead of copying the entire array around.
  */
 
 class TypeStack
 {
     private Type[] types;
 
     private TypeStack()
     {
         // no constructor
     }
 
     public Object clone()
     {
         TypeStack newTypeStack = new TypeStack();
 
         newTypeStack.types = .clone();
 
         return newTypeStack;
     }

    
Returns an empty stack.
 
 
     public static TypeStack v()
     {
         TypeStack typeStack = new TypeStack();
 
         typeStack.types = new Type[0];
 
         return typeStack;
     }
 
     public TypeStack pop()
     {
         TypeStack newStack = new TypeStack();
 
         newStack.types = new Type[. - 1];
         System.arraycopy(, 0, newStack.types, 0, . - 1);
 
         return newStack;
     }
 
     public TypeStack push(Type type)
     {
         TypeStack newStack = new TypeStack();
 
         newStack.types = new Type[. + 1];
         System.arraycopy(, 0, newStack.types, 0, .);
 
         newStack.types[.] = type;
 
         return newStack;
     }
 
     public Type get(int index)
     {
         return [index];
     }
    public int topIndex()
    {
        return . - 1;
    }
    public Type top()
    {
        if(. == 0)
            throw new RuntimeException("TypeStack is empty");
        else
            return [. - 1];
    }
    public boolean equals(Object object)
    {
        if(object instanceof TypeStack)
        {
            TypeStack otherStack = (TypeStackobject;
            if(otherStack.types.length != .)
                return false;
            for (Type element : )
				if(!element.equals(element))
                    return false;
            return true;
        }
        else
            return false;
    }
    public TypeStack merge(TypeStack other)
    {
        if(. != other.types.length)
            throw new RuntimeException("TypeStack merging failed; unequal " +
            "stack lengths: " + . + " and " + other.types.length);
        TypeStack newStack = new TypeStack();
        newStack.types = new Type[other.types.length];
        for(int i = 0; i < .i++)
            if([i].equals(other.types[i]))
                newStack.types[i] = [i];
            else {
                if((!([iinstanceof ArrayType) && !([iinstanceof RefType)) || 
                    (!(other.types[iinstanceof RefType) && !(other.types[iinstanceof ArrayType)))
                {
                    throw new RuntimeException("TypeStack merging failed; incompatible types " + [i] + " and " + other.types[i]);
                }
                // G.v().out.println("Merging: " + types[i] + " with " + other.types[i]);
                newStack.types[i] = RefType.v("java.lang.Object");
            }
        return newStack;
    }
    public void print(PrintStream out)
    {
        for(int i = . - 1; i >= 0; i--)
            out.println(i + ": " + [i].toString());
        if(. == 0)
            out.println("<empty>");
    }
New to GrepCode? Check out our FAQ X