41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52 * SUCH DAMAGE.
53 * ====================================================================
54 *
55 * This software consists of voluntary contributions made by many
56 * individuals on behalf of the Apache Software Foundation. For more
57 * information on the Apache Software Foundation, please see
58 * <http://www.apache.org/>.
59 */
60 import com.sun.org.apache.bcel.internal.Constants;
61 import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
62
63 /**
64 * Returnaddress, the type JSR or JSR_W instructions push upon the stack.
65 *
66 * see vmspec2 3.3.3
67 * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase">Enver Haase</A>
68 */
69 public class ReturnaddressType extends Type {
70
71 public static final ReturnaddressType NO_TARGET = new ReturnaddressType();
72 private InstructionHandle returnTarget;
73
74 /**
75 * A Returnaddress [that doesn't know where to return to].
76 */
77 private ReturnaddressType(){
78 super(Constants.T_ADDRESS, "<return address>");
79 }
80
81 /**
82 * Creates a ReturnaddressType object with a target.
83 */
84 public ReturnaddressType(InstructionHandle returnTarget) {
85 super(Constants.T_ADDRESS, "<return address targeting "+returnTarget+">");
86 this.returnTarget = returnTarget;
87 }
88
89 /**
90 * Returns if the two Returnaddresses refer to the same target.
91 */
92 public boolean equals(Object rat){
93 if(!(rat instanceof ReturnaddressType))
94 return false;
95
96 return ((ReturnaddressType)rat).returnTarget.equals(this.returnTarget);
97 }
98
99 /**
100 * @return the target of this ReturnaddressType
101 */
102 public InstructionHandle getTarget(){
103 return returnTarget;
104 }
105 }
|
41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52 * SUCH DAMAGE.
53 * ====================================================================
54 *
55 * This software consists of voluntary contributions made by many
56 * individuals on behalf of the Apache Software Foundation. For more
57 * information on the Apache Software Foundation, please see
58 * <http://www.apache.org/>.
59 */
60 import com.sun.org.apache.bcel.internal.Constants;
61 import java.util.Objects;
62
63 /**
64 * Returnaddress, the type JSR or JSR_W instructions push upon the stack.
65 *
66 * see vmspec2 3.3.3
67 * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase">Enver Haase</A>
68 */
69 public class ReturnaddressType extends Type {
70
71 public static final ReturnaddressType NO_TARGET = new ReturnaddressType();
72 private InstructionHandle returnTarget;
73
74 /**
75 * A Returnaddress [that doesn't know where to return to].
76 */
77 private ReturnaddressType(){
78 super(Constants.T_ADDRESS, "<return address>");
79 }
80
81 /**
82 * Creates a ReturnaddressType object with a target.
83 */
84 public ReturnaddressType(InstructionHandle returnTarget) {
85 super(Constants.T_ADDRESS, "<return address targeting "+returnTarget+">");
86 this.returnTarget = returnTarget;
87 }
88
89 @Override
90 public int hashCode() {
91 return Objects.hashCode(this.returnTarget);
92 }
93
94 /**
95 * Returns if the two Returnaddresses refer to the same target.
96 */
97 @Override
98 public boolean equals(Object rat){
99 if(!(rat instanceof ReturnaddressType))
100 return false;
101
102 return ((ReturnaddressType)rat).returnTarget.equals(this.returnTarget);
103 }
104
105 /**
106 * @return the target of this ReturnaddressType
107 */
108 public InstructionHandle getTarget(){
109 return returnTarget;
110 }
111 }
|