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 /**
21 * Super class for instructions dealing with array access such as IALOAD.
22 *
23 * @version $Id: ArrayInstruction.java 1149459 2011-07-22 04:34:27Z dbrosius $
24 * @author <A HREF="mailto:m.dahm@gmx.de">M. Dahm</A>
25 */
26 public abstract class ArrayInstruction extends Instruction implements ExceptionThrower,
27 TypedInstruction {
28
29 private static final long serialVersionUID = 1355074014869910296L;
30
31
32 /**
33 * Empty constructor needed for the Class.newInstance() statement in
34 * Instruction.readInstruction(). Not to be used otherwise.
35 */
36 ArrayInstruction() {
37 }
38
39
40 /**
41 * @param opcode of instruction
42 */
43 protected ArrayInstruction(short opcode) {
44 super(opcode, (short) 1);
45 }
46
47
48 public Class<?>[] getExceptions() {
49 return org.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION;
50 }
51
52
53 /** @return type associated with the instruction
54 */
55 public Type getType( ConstantPoolGen cp ) {
56 switch (opcode) {
57 case org.apache.bcel.Constants.IALOAD:
58 case org.apache.bcel.Constants.IASTORE:
59 return Type.INT;
60 case org.apache.bcel.Constants.CALOAD:
61 case org.apache.bcel.Constants.CASTORE:
62 return Type.CHAR;
63 case org.apache.bcel.Constants.BALOAD:
64 case org.apache.bcel.Constants.BASTORE:
65 return Type.BYTE;
66 case org.apache.bcel.Constants.SALOAD:
67 case org.apache.bcel.Constants.SASTORE:
68 return Type.SHORT;
69 case org.apache.bcel.Constants.LALOAD:
70 case org.apache.bcel.Constants.LASTORE:
71 return Type.LONG;
72 case org.apache.bcel.Constants.DALOAD:
73 case org.apache.bcel.Constants.DASTORE:
74 return Type.DOUBLE;
75 case org.apache.bcel.Constants.FALOAD:
76 case org.apache.bcel.Constants.FASTORE:
77 return Type.FLOAT;
78 case org.apache.bcel.Constants.AALOAD:
79 case org.apache.bcel.Constants.AASTORE:
80 return Type.OBJECT;
81 default:
82 throw new ClassGenException("Oops: unknown case in switch" + opcode);
83 }
84 }
85 }