Path: blob/master/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/interpreter/BytecodeNewArray.java
41161 views
/*1* Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324package sun.jvm.hotspot.interpreter;2526import sun.jvm.hotspot.oops.*;27import sun.jvm.hotspot.utilities.*;2829public class BytecodeNewArray extends Bytecode {30BytecodeNewArray(Method method, int bci) {31super(method, bci);32}3334public int getType() {35return (int) javaByteAt(1);36}3738public void verify() {39if (Assert.ASSERTS_ENABLED) {40Assert.that(isValid(), "check newarray");41}42}4344public boolean isValid() {45boolean result = javaCode() == Bytecodes._newarray;46if (result == false) return false;47switch (getType()) {48case TypeArrayKlass.T_BOOLEAN:49case TypeArrayKlass.T_CHAR:50case TypeArrayKlass.T_FLOAT:51case TypeArrayKlass.T_DOUBLE:52case TypeArrayKlass.T_BYTE:53case TypeArrayKlass.T_SHORT:54case TypeArrayKlass.T_INT:55case TypeArrayKlass.T_LONG:56break;57default:58return false;59}6061return true;62}6364public String getTypeName() {65String result;66switch (getType()) {67case TypeArrayKlass.T_BOOLEAN:68result = "boolean";69break;7071case TypeArrayKlass.T_CHAR:72result = "char";73break;7475case TypeArrayKlass.T_FLOAT:76result = "float";77break;7879case TypeArrayKlass.T_DOUBLE:80result = "double";81break;8283case TypeArrayKlass.T_BYTE:84result = "byte";85break;8687case TypeArrayKlass.T_SHORT:88result = "short";89break;9091case TypeArrayKlass.T_INT:92result = "int";93break;9495case TypeArrayKlass.T_LONG:96result = "long";97break;9899default: // should not happen100result = "<invalid>";101break;102}103104return result;105}106107public static BytecodeNewArray at(Method method, int bci) {108BytecodeNewArray b = new BytecodeNewArray(method, bci);109if (Assert.ASSERTS_ENABLED) {110b.verify();111}112return b;113}114115/** Like at, but returns null if the BCI is not at newarray */116public static BytecodeNewArray atCheck(Method method, int bci) {117BytecodeNewArray b = new BytecodeNewArray(method, bci);118return (b.isValid() ? b : null);119}120121public static BytecodeNewArray at(BytecodeStream bcs) {122return new BytecodeNewArray(bcs.method(), bcs.bci());123}124125public String toString() {126StringBuilder buf = new StringBuilder();127buf.append("newarray");128buf.append(spaces);129buf.append(getTypeName());130return buf.toString();131}132}133134135