• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  */
18 package org.apache.bcel.generic;
19 
20 import org.apache.bcel.Const;
21 import org.apache.bcel.ExceptionConst;
22 
23 /**
24  * Super class for the xRETURN family of instructions.
25  *
26  * @version $Id$
27  */
28 public abstract class ReturnInstruction extends Instruction implements ExceptionThrower,
29         TypedInstruction, StackConsumer {
30 
31     /**
32      * Empty constructor needed for Instruction.readInstruction.
33      * Not to be used otherwise.
34      */
ReturnInstruction()35     ReturnInstruction() {
36     }
37 
38 
39     /**
40      * @param opcode of instruction
41      */
ReturnInstruction(final short opcode)42     protected ReturnInstruction(final short opcode) {
43         super(opcode, (short) 1);
44     }
45 
46 
getType()47     public Type getType() {
48         final short _opcode = super.getOpcode();
49         switch (_opcode) {
50             case Const.IRETURN:
51                 return Type.INT;
52             case Const.LRETURN:
53                 return Type.LONG;
54             case Const.FRETURN:
55                 return Type.FLOAT;
56             case Const.DRETURN:
57                 return Type.DOUBLE;
58             case Const.ARETURN:
59                 return Type.OBJECT;
60             case Const.RETURN:
61                 return Type.VOID;
62             default: // Never reached
63                 throw new ClassGenException("Unknown type " + _opcode);
64         }
65     }
66 
67 
68     @Override
getExceptions()69     public Class<?>[] getExceptions() {
70         return new Class[] {
71             ExceptionConst.ILLEGAL_MONITOR_STATE
72         };
73     }
74 
75 
76     /** @return type associated with the instruction
77      */
78     @Override
getType( final ConstantPoolGen cp )79     public Type getType( final ConstantPoolGen cp ) {
80         return getType();
81     }
82 }
83