1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/* 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of Java bytecode. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 5b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu) 6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it 8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free 9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option) 10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version. 11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT 13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details. 16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along 18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc., 19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.classfile.instruction; 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.ClassConstants; 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Utility methods for converting between representations of names and 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * descriptions. 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic class InstructionUtil 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the internal type corresponding to the given 'newarray' type. 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param arrayType <code>InstructionConstants.ARRAY_T_BOOLEAN</code>, 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_BYTE</code>, 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_CHAR</code>, 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_SHORT</code>, 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_INT</code>, 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_LONG</code>, 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_FLOAT</code>, or 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>InstructionConstants.ARRAY_T_DOUBLE</code>. 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @return <code>ClassConstants.INTERNAL_TYPE_BOOLEAN</code>, 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_BYTE</code>, 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_CHAR</code>, 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_SHORT</code>, 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_INT</code>, 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_LONG</code>, 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_FLOAT</code>, or 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * <code>ClassConstants.INTERNAL_TYPE_DOUBLE</code>. 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public static char internalTypeFromArrayType(byte arrayType) 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato switch (arrayType) 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_BOOLEAN: return ClassConstants.INTERNAL_TYPE_BOOLEAN; 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_CHAR: return ClassConstants.INTERNAL_TYPE_CHAR; 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_FLOAT: return ClassConstants.INTERNAL_TYPE_FLOAT; 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_DOUBLE: return ClassConstants.INTERNAL_TYPE_DOUBLE; 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_BYTE: return ClassConstants.INTERNAL_TYPE_BYTE; 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_SHORT: return ClassConstants.INTERNAL_TYPE_SHORT; 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_INT: return ClassConstants.INTERNAL_TYPE_INT; 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato case InstructionConstants.ARRAY_T_LONG: return ClassConstants.INTERNAL_TYPE_LONG; 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato default: throw new IllegalArgumentException("Unknown array type ["+arrayType+"]"); 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 68