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