• 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 
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