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 22 /** 23 * Super class for the x2y family of instructions. 24 * 25 * @version $Id$ 26 */ 27 public abstract class ConversionInstruction extends Instruction implements TypedInstruction, 28 StackProducer, StackConsumer { 29 30 /** 31 * Empty constructor needed for Instruction.readInstruction. 32 * Not to be used otherwise. 33 */ ConversionInstruction()34 ConversionInstruction() { 35 } 36 37 38 /** 39 * @param opcode opcode of instruction 40 */ ConversionInstruction(final short opcode)41 protected ConversionInstruction(final short opcode) { 42 super(opcode, (short) 1); 43 } 44 45 46 /** @return type associated with the instruction 47 */ 48 @Override getType( final ConstantPoolGen cp )49 public Type getType( final ConstantPoolGen cp ) { 50 final short _opcode = super.getOpcode(); 51 switch (_opcode) { 52 case Const.D2I: 53 case Const.F2I: 54 case Const.L2I: 55 return Type.INT; 56 case Const.D2F: 57 case Const.I2F: 58 case Const.L2F: 59 return Type.FLOAT; 60 case Const.D2L: 61 case Const.F2L: 62 case Const.I2L: 63 return Type.LONG; 64 case Const.F2D: 65 case Const.I2D: 66 case Const.L2D: 67 return Type.DOUBLE; 68 case Const.I2B: 69 return Type.BYTE; 70 case Const.I2C: 71 return Type.CHAR; 72 case Const.I2S: 73 return Type.SHORT; 74 default: // Never reached 75 throw new ClassGenException("Unknown type " + _opcode); 76 } 77 } 78 } 79