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 */ 35 ReturnInstruction() { 36 } 37 38 39 /** 40 * @param opcode of instruction 41 */ 42 protected ReturnInstruction(final short opcode) { 43 super(opcode, (short) 1); 44 } 45 46 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 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 79 public Type getType( final ConstantPoolGen cp ) { 80 return getType(); 81 } 82 } 83