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