1 /*
2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
3 * @LastModified: Oct 2017
4 */
5 /*
6 * Licensed to the Apache Software Foundation (ASF) under one or more
7 * contributor license agreements. See the NOTICE file distributed with
8 * this work for additional information regarding copyright ownership.
9 * The ASF licenses this file to You under the Apache License, Version 2.0
10 * (the "License"); you may not use this file except in compliance with
11 * the License. You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22 package com.sun.org.apache.bcel.internal.generic;
23
24 import com.sun.org.apache.bcel.internal.Const;
25 import com.sun.org.apache.bcel.internal.ExceptionConst;
26
27 /**
28 * Super class for the xRETURN family of instructions.
29 *
30 * @version $Id: ReturnInstruction.java 1747278 2016-06-07 17:28:43Z britter $
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 ---