1916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath/* 2916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Copyright (C) 2011 The Android Open Source Project 3916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * 4916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License"); 5916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * you may not use this file except in compliance with the License. 6916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * You may obtain a copy of the License at 7916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * 8916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 9916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * 10916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Unless required by applicable law or agreed to in writing, software 11916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 12916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * See the License for the specific language governing permissions and 14916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * limitations under the License. 15916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath */ 16916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 17916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamathpackage com.android.dex; 18916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 19916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamathpublic final class Code { 20916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final int registersSize; 21916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final int insSize; 22916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final int outsSize; 23916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final int debugInfoOffset; 24916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final short[] instructions; 25916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final Try[] tries; 26916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath private final CatchHandler[] catchHandlers; 27916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 28916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public Code(int registersSize, int insSize, int outsSize, int debugInfoOffset, 29916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath short[] instructions, Try[] tries, CatchHandler[] catchHandlers) { 30916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.registersSize = registersSize; 31916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.insSize = insSize; 32916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.outsSize = outsSize; 33916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.debugInfoOffset = debugInfoOffset; 34916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.instructions = instructions; 35916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.tries = tries; 36916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.catchHandlers = catchHandlers; 37916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 38916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 39916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getRegistersSize() { 40916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return registersSize; 41916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 42916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 43916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getInsSize() { 44916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return insSize; 45916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 46916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 47916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getOutsSize() { 48916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return outsSize; 49916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 50916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 51916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getDebugInfoOffset() { 52916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return debugInfoOffset; 53916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 54916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 55916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public short[] getInstructions() { 56916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return instructions; 57916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 58916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 59916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public Try[] getTries() { 60916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return tries; 61916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 62916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 63916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public CatchHandler[] getCatchHandlers() { 64916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return catchHandlers; 65916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 66916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 67916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public static class Try { 68916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int startAddress; 69916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int instructionCount; 70916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int catchHandlerIndex; 71916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 72916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath Try(int startAddress, int instructionCount, int catchHandlerIndex) { 73916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.startAddress = startAddress; 74916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.instructionCount = instructionCount; 75916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.catchHandlerIndex = catchHandlerIndex; 76916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 77916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 78916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getStartAddress() { 79916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return startAddress; 80916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 81916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 82916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getInstructionCount() { 83916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return instructionCount; 84916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 85916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 86916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath /** 87916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * Returns this try's catch handler <strong>index</strong>. Note that 88916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath * this is distinct from the its catch handler <strong>offset</strong>. 89916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath */ 90916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getCatchHandlerIndex() { 91916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return catchHandlerIndex; 92916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 93916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 94916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 95916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public static class CatchHandler { 96916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int[] typeIndexes; 97916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int[] addresses; 98916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int catchAllAddress; 99916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath final int offset; 100916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 101916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public CatchHandler(int[] typeIndexes, int[] addresses, int catchAllAddress, int offset) { 102916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.typeIndexes = typeIndexes; 103916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.addresses = addresses; 104916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.catchAllAddress = catchAllAddress; 105916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath this.offset = offset; 106916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 107916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 108916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int[] getTypeIndexes() { 109916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return typeIndexes; 110916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 111916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 112916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int[] getAddresses() { 113916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return addresses; 114916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 115916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 116916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getCatchAllAddress() { 117916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return catchAllAddress; 118916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 119916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath 120916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath public int getOffset() { 121916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath return offset; 122916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 123916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath } 124916c2feaf6fc24d63369cedb33ab815ec99d1bdfNarayan Kamath} 125