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 }
--- EOF ---